[PATCH[ Makefile: Fix scripts_basic / archscripts build order
The SUSE kernel packages are built by doing the following:
make silentoldonfig
make prepare
make scripts
make clean
<capture file list used for building modules>
make -j$NCPUs
On parallel builds (also using -C/O=), this can occasionally fail with:
HOSTCC scripts/basic/fixdep
/bin/sh: scripts/basic/fixdep: No such file or directory make[3]: *** [arch/x86/tools/relocs] Error 1
make[2]: *** [archscripts] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2
The error can also be "Permission denied."
Without the make clean this works ok.
What seems to be happening is that fixdep exists so relocs is able to be rebuilt, but then somewhere there is a FORCE rule that applies to fixdep so it is rebuilt. If the timing is right, the relocs build can happen while the fixdep rebuild is happening and we either get a non-executable fixdep or a nonexistent fixdep.
This patch moves the archscripts dependency after scripts_basic so that fixdep is always built after relocs. If I understand the build order correctly, this should be the case since scripts_basic is essentially a prereq of everything.
This was introduced by commit6520fe55 (x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.
--- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Makefile +1 -1
@@ -835,7 +835,7 @@ prepare1: prepare2 include/linux/version include/config/auto.conf $(cmd_crmodverdir) -archprepare: archheaders archscripts prepare1 scripts_basic +archprepare: archheaders scripts_basic archscripts prepare1 prepare0: archprepare FORCE $(Q)$(MAKE) $(build)=.
Signature · 2 lines
Jeff Mahoney SUSE Labs
Kbuild people, any comments?
Quoted 56 lines · Jeff Mahoney
The SUSE kernel packages are built by doing the following:
make silentoldonfig
make prepare
make scripts
make clean<capture file list used for building modules>
make -j$NCPUs
On parallel builds (also using -C/O=), this can occasionally fail with:
HOSTCCscripts/basic/fixdep
/bin/sh:scripts/basic/fixdep: No such file or directory make[3]: *** [arch/x86/tools/relocs] Error 1
make[2]: *** [archscripts] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2The error can also be "Permission denied."
Without the make clean this works ok.
What seems to be happening is that fixdep exists so relocs is able to be rebuilt, but then somewhere there is a FORCE rule that applies to fixdep so it is rebuilt. If the timing is right, the relocs build can happen while the fixdep rebuild is happening and we either get a non-executable fixdep or a nonexistent fixdep.
This patch moves the archscripts dependency after
scripts_basicso that fixdep is always built after relocs. If I understand the build order correctly, this should be the case sincescripts_basicis essentially a prereq of everything.This was introduced by commit
6520fe55(x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.Signed-off-by Jeff Mahoney <[email protected]>--- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Makefile +1
-1@@ -835,7 +835,7 @@ prepare1: prepare2 include/linux/version include/config/auto.conf $(cmd_crmodverdir) -archprepare: archheaders archscripts prepare1 scripts_basic +archprepare: archheaders scripts_basic archscripts prepare1 prepare0: archprepare FORCE $(Q)$(MAKE) $(build)=.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 1 line · H. Peter Anvin
Kbuildpeople, any comments?
Thanks for bouncing along.
This patch is wrong. It fixes the 'make' case because scripts_basic is build before archscripts but doesn't get rid of the root cause.
'make archscripts' alone still fails. I'll send a replacement that addresses that dependency issue directly.
- -Jeff
Quoted 42 lines · Jeff Mahoney
Quoted 41 lines
The SUSE kernel packages are built by doing the following:
make silentoldonfig make prepare make scripts make clean
<capture file list used for building modules>
make -j$NCPUs
On parallel builds (also using -C/O=), this can occasionally fail
with: HOSTCCscripts/basic/fixdep/bin/sh:scripts/basic/fixdep:
No such file or directory make[3]: *** [arch/x86/tools/relocs] Error 1 make[2]: *** [archscripts] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [sub-make] Error 2 make: *** [all] Error 2The error can also be "Permission denied."
Without the make clean this works ok.
What seems to be happening is that fixdep exists so relocs is able to be rebuilt, but then somewhere there is a FORCE rule that applies to fixdep so it is rebuilt. If the timing is right, the relocs build can happen while the fixdep rebuild is happening and we either get a non-executable fixdep or a nonexistent fixdep.
This patch moves the archscripts dependency after
scripts_basicso that fixdep is always built after relocs. If I understand the build order correctly, this should be the case sincescripts_basicis essentially a prereq of everything.This was introduced by commit
6520fe55(x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.Signed-off-by Jeff Mahoney <[email protected]> --- Makefile | 2+- 1 file changed, 1 insertion(+), 1 deletion(-)
--- a/Makefile +++ b/Makefile @@ -835,7 +835,7 @@ prepare1:
prepare2include/linux/versioninclude/config/auto.conf$(cmd_crmodverdir)
Quoted 7 lines
Quoted 5 lines
Makefile +1
-1-archprepare: archheaders archscripts prepare1 scripts_basic +archprepare: archheaders scripts_basic archscripts prepare1prepare0: archprepare FORCE $(Q)$(MAKE) $(build)=.
- --
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBAgAGBQJQWycqAAoJEB57S2MheeWyrOcP/1zkI9gwRCwjGhzd78177JHZ 6YFAkg3bTfQjCKrb1uU414wlFyRS+yHV2TlSDk4UTFfXMM7Y1FKmhGVF2ZJF2EBs FNOXnRFwh4zhcztXtrSNqs1omhAEfS9FBGlwOmSdSg+mMSK6cAoK2krQuEsrTYUR 9uTeJfvfOJJgTHw5+jM6HH17swF2MkhwS/C5cBt3qGc4keE/+YL7Ub8DRIcrwMN3 1ux87W7Y2e1PaPcxDufZnryMkOSq8IOmRB1ErdJ1fCRcoE3RG5esrrbULURscA3b OS5+mhJZj8Q5GlFYm1zrKNVxN973nsdw80d6QSGLU6oMtDEF7Hei4fg+KPzgFHNy Q+Cqt/il1onehS/aMxcjU9OdOPObMau5OVzDv3n+EYnR1wUW7nRevtUt4eVsYG4Z qEy50tHuv8AO+sfB3nVC268sHOteUwqDDWKJC/vRMnJ4tKHi/vNJinweXzb1G+lp O/Q2em0zBqmSnBsnlxhk+Ga4riBkcBsHtBiPFZ7NFpXrSXj93ASAURnlRFvpFa/u mGz/izuFx9s1FFWAfjLMC+LtlMndr4p0DYa2tODt72+HibVA435JMsKSQL8s8fji HdBJux8MOJzjBqic6y3lHyJKwpjXBB6zNqxr0WNocvwJiS5mEBERpDc4JQp+DCI6 EJV+7rUH8MDw5w69+e2f
=rC/d
-----END PGP SIGNATURE-----
PATCH 1/1 x86/kbuild: archscripts depends on scripts_basic
In reply to H. Peter AnvinWhile building the SUSE kernel packages, which build the scripts, make clean, and then build everything, we have been running into spurious build failures. We tracked them down to a simple dependency issue:
$ make mrproper CLEAN arch/x86/tools CLEAN scripts/basic $ cp patches/config/x86_64/desktop .config $ make archscripts HOSTCC arch/x86/tools/relocs /bin/sh: scripts/basic/fixdep: No such file or directory make[3]: *** [arch/x86/tools/relocs] Error 1 make[2]: *** [archscripts] Error 2 make[1]: *** [sub-make] Error 2 make: *** [all] Error 2
This was introduced by commit6520fe55 (x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.
This patch adds the scripts_basic dependency to the x86 archscripts.
--- arch/x86/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/Makefile +1 -1
@@ -142,7 +142,7 @@ KBUILD_CFLAGS += $(call cc-option,-mno-a KBUILD_CFLAGS += $(mflags-y) KBUILD_AFLAGS += $(mflags-y) -archscripts: +archscripts: scripts_basic $(Q)$(MAKE) $(build)=arch/x86/tools relocs ###
Re: [PATCH] x86/kbuild: archscripts depends on scripts_basic
Quoted 16 lines · Jeff Mahoney
While building the SUSE kernel packages, which build the scripts, make clean, and then build everything, we have been running into spurious build failures. We tracked them down to a simple dependency issue:
$ make mrproper CLEAN arch/x86/tools CLEAN scripts/basic $ cp patches/config/x86_64/desktop .config $ make archscripts HOSTCC arch/x86/tools/relocs /bin/sh: scripts/basic/fixdep: No such file or directory make[3]: *** [arch/x86/tools/relocs] Error 1 make[2]: *** [archscripts] Error 2 make[1]: *** [sub-make] Error 2 make: *** [all] Error 2
Quoted 7 lines
This was introduced by commit
6520fe55(x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.This patch adds the
scripts_basicdependency to the x86 archscripts.Signed-off-by Jeff Mahoney <[email protected]>
Applied to kbuild.git#rc-fixes, thanks.
Michal
PATCH 1/1 x86/kbuild: archscripts depends on scripts_basic
In reply to H. Peter AnvinWhile building the SUSE kernel packages, which build the scripts, make clean, and then build everything, we have been running into spurious build failures. We tracked them down to a simple dependency issue:
$ make mrproper CLEAN arch/x86/tools CLEAN scripts/basic $ cp patches/config/x86_64/desktop .config $ make archscripts HOSTCC arch/x86/tools/relocs /bin/sh: scripts/basic/fixdep: No such file or directory make[3]: *** [arch/x86/tools/relocs] Error 1 make[2]: *** [archscripts] Error 2 make[1]: *** [sub-make] Error 2 make: *** [all] Error 2
This was introduced by commit6520fe55 (x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.
This patch adds the scripts_basic dependency to the x86 archscripts.
--- arch/x86/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/Makefile +1 -0
@@ -142,7 +142,7 @@ KBUILD_CFLAGS += $(call cc-option,-mno-a KBUILD_CFLAGS += $(mflags-y) KBUILD_AFLAGS += $(mflags-y) -archscripts: +archscripts: scripts_basic $(Q)$(MAKE) $(build)=arch/x86/tools relocs ###