git: ac5f382a9d0a - main - stand: properly declare subdir deps or .WAIT, do parallel build

Kyle Evans kevans at FreeBSD.org
Thu Dec 31 17:17:51 UTC 2020


The branch main has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=ac5f382a9d0a26685b92b49abb845d3b30ea5f91

commit ac5f382a9d0a26685b92b49abb845d3b30ea5f91
Author:     Kyle Evans <kevans at FreeBSD.org>
AuthorDate: 2020-12-31 17:15:45 +0000
Commit:     Kyle Evans <kevans at FreeBSD.org>
CommitDate: 2020-12-31 17:15:45 +0000

    stand: properly declare subdir deps or .WAIT, do parallel build
    
    buildworld already runs the stand build in parallel[1], so make it easier to
    identify ordering issues by properly establishing dependencies or adding
    .WAIT where needed.
    
    Everything in stand/ relies on libsa, either directly or indirectly, because
    libsa build is where the stand headers get installed and it gets linked in
    most places.
    
    Interpreters depend on their libs, machine dirs usually depend on top-level
    libs that are getting built and at least one of the interpreter flavors.
    
    For i386, order btx/libi386/libfirewire before everything else using a
    big-ol-.WAIT hammer. btx is the most common dependency, but the others are
    used sporadically. This seems to be where the race reporting on the mailing
    list is- AFAICT, the following sequence is happening:
    
    1.) One of the loaders gets built based on stale btx/btxldr
    2.) btx/btxldr gets rebuilt
    3.) installworld triggers loader rebuild because btx was rebuilt after
    
    This seems like the most plausible explanation, as they've verified system
    time and timestamps.
    
    While we're here, let's switch stand/ over to a completely parallel build so
    we can work out these kinds of issues in isolation rather than in the middle
    of a larger build.
    
    Reviewed by:    bdragon, sjg, tsoome
    Tested by:      bdragon (-j1024, no failures, significant speed improvement)
    Differential Revision:  https://reviews.freebsd.org/D23411
---
 stand/Makefile       | 40 ++++++++++++++++++++++++++++++++++++++--
 stand/Makefile.amd64 |  4 ++++
 stand/Makefile.inc   |  2 ++
 stand/efi/Makefile   |  6 +++++-
 stand/i386/Makefile  | 13 ++++++++++---
 5 files changed, 59 insertions(+), 6 deletions(-)

diff --git a/stand/Makefile b/stand/Makefile
index bacf39e26eca..d7bcb4bfbca2 100644
--- a/stand/Makefile
+++ b/stand/Makefile
@@ -11,22 +11,44 @@ LIB32LIST=libsa ficl liblua
 
 S.yes+=			libsa
 
+S.${MK_LOADER_OFW}+=	libofw
+S.${MK_FDT}+=		fdt
+
 S.${MK_FORTH}+=		ficl
 S.${MK_FORTH}+=		forth
 S.${MK_LOADER_LUA}+=	liblua
 S.${MK_LOADER_LUA}+=	lua
-S.${MK_FDT}+=		fdt
-S.${MK_LOADER_OFW}+=	libofw
 S.yes+=			defaults
 S.yes+=			man
 
+.if ${MK_FORTH} != "no"
+INTERP_DEPENDS+=	forth
+.endif
+.if ${MK_LOADER_LUA} != "no"
+INTERP_DEPENDS+=	lua
+.endif
+
 .include <bsd.arch.inc.mk>
 
 S.${MK_EFI}+=		efi
 S.${MK_LOADER_UBOOT}+=	uboot
 
+.if defined(LIB32LIST)
+LIB32DEPENDS=	${LIB32LIST:S/$/32/}
+.endif
+
 .if exists(${.CURDIR}/${MACHINE}/.)
 S.yes+=         ${MACHINE}
+SUBDIR_DEPEND_${MACHINE}+=	${INTERP_DEPENDS}
+.if ${MK_FDT} != "no"
+SUBDIR_DEPEND_${MACHINE}+=	fdt
+.endif
+.if ${MK_LOADER_UBOOT} != "no"
+SUBDIR_DEPEND_${MACHINE}+=	uboot
+.endif
+.if ${MK_LOADER_OFW} != "no"
+SUBDIR_DEPEND_${MACHINE}+=	libofw
+.endif
 .endif
 
 # Build the actual subdir list from S.yes, adding in the 32-bit
@@ -36,6 +58,20 @@ SUBDIR+=${_x}
 .if defined(LIB32LIST) && ${LIB32LIST:M${_x}}
 SUBDIR+=${_x}32
 .endif
+.if ${_x} != "libsa"
+SUBDIR_DEPEND_${_x}+=	libsa
+SUBDIR_DEPEND_${_x}32+=	libsa32
+.endif
 .endfor
 
+# Remaining dependencies
+SUBDIR_DEPEND_libsa32+=	libsa
+
+SUBDIR_DEPEND_forth+=	ficl
+SUBDIR_DEPEND_lua+=	liblua
+
+SUBDIR_DEPEND_efi+=	fdt
+
+SUBDIR_PARALLEL=	yes
+
 .include <bsd.subdir.mk>
diff --git a/stand/Makefile.amd64 b/stand/Makefile.amd64
index b2b918ebed5b..9ee3649071b2 100644
--- a/stand/Makefile.amd64
+++ b/stand/Makefile.amd64
@@ -2,3 +2,7 @@
 
 S.yes+=		userboot
 S.yes+=		i386
+
+SUBDIR_DEPEND_userboot+=	${INTERP_DEPENDS}
+# These won't get tacked on in an amd64 build
+SUBDIR_DEPEND_i386+=	${LIB32DEPENDS} ${INTERP_DEPENDS}
diff --git a/stand/Makefile.inc b/stand/Makefile.inc
index d7b9d228287e..aa7cfa14542f 100644
--- a/stand/Makefile.inc
+++ b/stand/Makefile.inc
@@ -1,3 +1,5 @@
 # $FreeBSD$
 
+SUBDIR_PARALLEL=	yes
+
 .include "defs.mk"
diff --git a/stand/efi/Makefile b/stand/efi/Makefile
index f6cbede52bd5..94cb5bba5638 100644
--- a/stand/efi/Makefile
+++ b/stand/efi/Makefile
@@ -4,8 +4,12 @@ NO_OBJ=t
 
 .include <bsd.init.mk>
 
+SUBDIR.yes+=	libefi
 SUBDIR.${MK_FDT}+=	fdt
-SUBDIR.yes+=	libefi boot1 gptboot
+SUBDIR.yes+=	.WAIT
+
+SUBDIR.yes+=	boot1 gptboot
+
 SUBDIR.${MK_FORTH}+= loader_4th
 SUBDIR.${MK_LOADER_LUA}+= loader_lua
 SUBDIR.yes+=	loader_simp
diff --git a/stand/i386/Makefile b/stand/i386/Makefile
index a9d402acf609..9aa33462f309 100644
--- a/stand/i386/Makefile
+++ b/stand/i386/Makefile
@@ -4,10 +4,15 @@ NO_OBJ=t
 
 .include <bsd.init.mk>
 
-SUBDIR.yes=	mbr pmbr boot0 boot0sio btx boot2 cdboot gptboot \
-		isoboot libi386
-
+# Almost everything else here relies on btxldr, so we must make sure it's built
+# before everything else proceeds so we don't end up building against a stale
+# btxldr and ending up with a build-during-install scenario.
+SUBDIR.yes+=	btx libi386
 SUBDIR.${MK_LOADER_FIREWIRE}+=	libfirewire
+SUBDIR.yes+=	.WAIT
+
+SUBDIR.yes+=	mbr pmbr boot0 boot0sio boot2 cdboot gptboot \
+		isoboot
 
 SUBDIR.${MK_FORTH}+= loader_4th
 SUBDIR.${MK_LOADER_LUA}+= loader_lua
@@ -18,4 +23,6 @@ SUBDIR.yes+=	pxeldr
 
 SUBDIR.${MK_LOADER_ZFS}+=	zfsboot gptzfsboot
 
+SUBDIR_DEPEND_pxeldr+=	loader_${LOADER_DEFAULT_INTERP}
+
 .include <bsd.subdir.mk>


More information about the dev-commits-src-all mailing list