Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153459983
D39683.id120732.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D39683.id120732.diff
View Options
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -119,6 +119,16 @@
# For more information, see the build(7) manual page.
#
+# Include jobs.mk early if we need it.
+# It will turn:
+# make buildworld-jobs
+# into
+# make -j${JOB_MAX} buildworld > ../buildworld.log 2>&1
+#
+.if make(*-jobs)
+.include <jobs.mk>
+.endif
+
.if defined(UNIVERSE_TARGET) || defined(MAKE_JUST_WORLDS) || defined(WITHOUT_KERNELS)
__DO_KERNELS=no
.endif
diff --git a/UPDATING b/UPDATING
--- a/UPDATING
+++ b/UPDATING
@@ -27,6 +27,15 @@
world, or to merely disable the most expensive debugging functionality
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20230420:
+ Add jobs.mk to save typing. Enables -j${JOB_MAX} and logging
+ eg.
+ make buildworld-jobs
+ runs
+ make -j${JOB_MAX} buildworld > ../buildworld.log 2>&1
+
+ where JOB_MAX is derrived from ncpus in local.sys.mk if not set in env.
+
20230316:
Video related devices for some arm devices have been renamed.
If you have a custom kernel config and want to use hdmi output on
diff --git a/share/mk/jobs.mk b/share/mk/jobs.mk
new file mode 100644
--- /dev/null
+++ b/share/mk/jobs.mk
@@ -0,0 +1,88 @@
+# $Id: jobs.mk,v 1.7 2023/04/18 23:32:28 sjg Exp $
+#
+# @(#) Copyright (c) 2012-2023, Simon J. Gerraty
+#
+# This file is provided in the hope that it will
+# be of use. There is absolutely NO WARRANTY.
+# Permission to copy, redistribute or otherwise
+# use this file is hereby granted provided that
+# the above copyright notice and this notice are
+# left intact.
+#
+# Please send copies of changes and bug-fixes to:
+# sjg@crufty.net
+#
+
+# This makefile is used by top-level makefile.
+# With the following:
+#
+# .if make(*-jobs)
+# .include <jobs.mk>
+# .endif
+#
+#
+# Then if you do:
+#
+# mk target-jobs
+#
+# We will run:
+#
+# ${MAKE} -j${JOB_MAX} target > ${JOB_LOGDIR}/target.log 2>&1
+#
+# JOB_MAX defaults to 8 but should normally be derrived based on the
+# number of cpus available. The wrapper script 'mk' makes that easy.
+#
+
+now_utc ?= ${%s:L:gmtime}
+.if !defined(start_utc)
+start_utc := ${now_utc}
+.endif
+
+.info ${.newline}${TIME_STAMP} Start ${.TARGETS}
+
+.if make(*-jobs)
+
+JOB_LOGDIR ?= ${SRCTOP:H}
+JOB_LOG = ${JOB_LOGDIR}/${.TARGET:S,-jobs,,:S,/,_,g}.log
+JOB_LOG_GENS ?= 4
+# we like to rotate logs
+.if empty(NEWLOG_SH)
+.ifdef M_whence
+NEWLOG_SH := ${newlog.sh:L:${M_whence}}
+.else
+NEWLOG_SH := ${(type newlog.sh) 2> /dev/null:L:sh:M/*}
+.endif
+.endif
+.if !empty(NEWLOG_SH) && exists(${NEWLOG_SH})
+NEWLOG := sh ${NEWLOG_SH}
+JOB_NEWLOG_ARGS ?= -S -n ${JOB_LOG_GENS}
+.else
+NEWLOG = :
+.endif
+
+.if ${.MAKE.JOBS:U0} > 0
+JOB_MAX= ${.MAKE.JOBS}
+.else
+# This should be derrived from number of cpu's
+JOB_MAX?= 8
+JOB_ARGS+= -j${JOB_MAX}
+.endif
+
+# we need to reset .MAKE.LEVEL to 0 do that
+# build orchestration works as expected (DIRDEPS_BUILD)
+${.TARGETS:M*-jobs}:
+ @${NEWLOG} ${JOB_NEWLOG_ARGS} ${JOB_LOG}
+ @echo Logging to ${JOB_LOG}
+ @cd ${.CURDIR} && env MAKELEVEL=0 \
+ ${.MAKE} ${JOB_ARGS} _TARGETS=${.TARGET:S,-jobs,,} ${.TARGET:S,-jobs,,} >> ${JOB_LOG} 2>&1
+
+.endif
+
+.END: _build_finish
+.ERROR: _build_failed
+
+_build_finish: .NOMETA
+ @echo "${TIME_STAMP} Finished ${.TARGETS} seconds=`expr ${now_utc} - ${start_utc}`"
+
+_build_failed: .NOMETA
+ @echo "${TIME_STAMP} Failed ${.TARGETS} seconds=`expr ${now_utc} - ${start_utc}`"
diff --git a/share/mk/local.sys.mk b/share/mk/local.sys.mk
--- a/share/mk/local.sys.mk
+++ b/share/mk/local.sys.mk
@@ -59,6 +59,26 @@
.include "src.sys.mk"
.-include <site.sys.mk>
+.if make(*-jobs) && empty(JOB_MAX)
+# provide a reasonable? default for JOB_MAX based on ncpu
+JOB_MAX_FACTOR?= 1.33
+NPROC?= ${(type nproc) 2> /dev/null:L:sh:M/*:[1]}
+NPROC:= ${NPROC}
+.if !empty(NPROC)
+ncpu!= ${NPROC}
+.elif ${.MAKE.OS:NDarwin:NFreeBSD} == ""
+ncpu!= sysctl -n hw.ncpu
+.endif
+.if ${ncpu:U0} > 1
+.if ${JOB_MAX_FACTOR} == 1
+JOB_MAX:= ${ncpu}
+.else
+jm!= echo ${ncpu} \* ${JOB_MAX_FACTOR} | bc
+JOB_MAX:= ${jm:R}
+.endif
+.endif
+.endif
+
.if ${.MAKE.MODE:Mmeta*} != ""
# we can afford to use cookies to prevent some targets
# re-running needlessly but only when using filemon.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 22, 7:23 AM (6 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31961580
Default Alt Text
D39683.id120732.diff (4 KB)
Attached To
Mode
D39683: Add jobs.mk to allow for target-jobs
Attached
Detach File
Event Timeline
Log In to Comment