Skip to contentSkip to conversation

[PATCH[ Makefile: Fix scripts_basic / archscripts build order

PATCH In review Jeff Mahoney 3 participants 6 messages Sep 19, 2012 – Sep 21, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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 commit
6520fe55 (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
#1 lore raw

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:
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 commit
6520fe55 (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)=.
#2 lore raw

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 1 line · H. Peter Anvin

Kbuild people, 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: 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 commit 6520fe55 (x86, realmode: 16-bit real-mode code support for relocs), which added the archscripts dependency to archprepare.

+- 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/Makefile +++ b/Makefile @@ -835,7 +835,7 @@ prepare1:
prepare2 include/linux/version include/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 prepare1

prepare0: 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-----

#3 lore raw

PATCH 1/1 x86/kbuild: archscripts depends on scripts_basic

In reply to H. Peter Anvin

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

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_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
 
 ###
#5 lore raw

PATCH 1/1 x86/kbuild: archscripts depends on scripts_basic

In reply to H. Peter Anvin

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

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_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
  ###
 
#4 lore raw

Re: [PATCH] x86/kbuild: archscripts depends on scripts_basic

In reply to Jeff Mahoney
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_basic dependency to the x86 archscripts.

Applied to kbuild.git#rc-fixes, thanks.

Michal