Skip to contentSkip to conversation

kbuild fixes for 2.6.18

PATCH In review Sam Ravnborg 4 participants 7 messages Aug 7, 2006 – Aug 8, 2006

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

PATCH 1/1 kbuild fixes for 2.6.18

Hi Greg.
Please apply to 2.6.18.

Pull from:

	git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-2.6.18.git

Patches for both changes appended below.

Sam

Shortlog:

Sam Ravnborg:
kbuild: do not try to build content of initramfs
kbuild: external modules shall not check config consistency

commit 9ee4e3365dd0dab4c1e02fe44dc08a223b826c72

Author: Sam Ravnborg <[email protected]>
Date:   Mon Aug 7 21:01:36 2006 +0200

kbuild: external modules shall not check config consistency

external modules needs include/linux/autoconf.h and include/config/auto.conf but skip the integrity test of these. Even with a newer Kconfig file we shall just proceed since external modules simply uses the kernel source and shall not attempt to modify it.
Error out if a config fiel is missing since they are mandatory.

commit 58a2f7d85aaf4c41157f15c43a913b5c3c6b3adb

Author: Sam Ravnborg <[email protected]>
Date:   Mon Aug 7 20:58:28 2006 +0200

kbuild: do not try to build content of initramfs

When a file supplied via CONFIG_INITRAMFS pointed to a file for which kbuild had a rule to compile it (foo.c => foo.o) then kbuild would compile the file before adding the file to the initramfs.

Teach make that files included in initramfs shall not be updated by adding an 'empty command'. (See "Using Empty Commands" in info make).

 Makefile     |   24 ++++++++++++++++++------
 usr/Makefile |    3 +++
 2 files changed, 21 insertions(+), 6 deletions(-)
Makefile +18 -6
index 110db85..e71fefd 100644
@@ -436,12 +436,13 @@ core-y		:= usr/
 endif # KBUILD_EXTMOD
 
 ifeq ($(dot-config),1)
-# In this section, we need .config
+# Read in config
+-include include/config/auto.conf
 
+ifeq ($(KBUILD_EXTMOD),)
 # Read in dependencies to all Kconfig* files, make sure to run
 # oldconfig if changes are detected.
 -include include/config/auto.conf.cmd
--include include/config/auto.conf
 
 # To avoid any implicit rule to kick in, define an empty command
 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
@@ -451,16 +452,27 @@ # with it and forgot to run make oldconf
 # if auto.conf.cmd is missing then we are probably in a cleaned tree so
 # we execute the config step to be sure to catch updated Kconfig files
 include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
-ifeq ($(KBUILD_EXTMOD),)
 	$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
 else
-	$(error kernel configuration not valid - run 'make prepare' in $(srctree) to update it)
-endif
+# external modules needs include/linux/autoconf.h and include/config/auto.conf
+# but do not care if they are up-to-date. Use auto.conf to trigger the test
+PHONY += include/config/auto.conf
+
+include/config/auto.conf:
+	$(Q)test -e include/linux/autoconf.h -a -e $@ || (		\
+	echo;								\
+	echo "  ERROR: Kernel configuration is invalid.";		\
+	echo "         include/linux/autoconf.h or $@ are missing.";	\
+	echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
+	echo;								\
+	/bin/false)
+
+endif # KBUILD_EXTMOD
 
 else
 # Dummy target needed, because used as prerequisite
 include/config/auto.conf: ;
-endif
+endif # $(dot-config)
 
 # The all: target is the default when no target is given on the
 # command line.
usr/Makefile +3 -0
index e938242..5b31c0b 100644
@@ -35,6 +35,9 @@ quiet_cmd_initfs = GEN     $@
       cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
 
 targets := initramfs_data.cpio.gz
+# do not try to update files included in initramfs
+$(deps_initramfs): ;
+
 $(deps_initramfs): klibcdirs
 # We rebuild initramfs_data.cpio.gz if:
 # 1) Any included file is newer then initramfs_data.cpio.gz
#1 lore raw
Quoted 6 lines · Sam Ravnborg

Hi Greg.
Please apply to 2.6.18.

Pull from:

	git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-2.6.18.git

Thanks, pulled and pushed out.

Oh, I just got a few reports of 2.6.18-rc3 not building with external trees very well, and something like the following would be required:

arch/sh/Makefile 2006-08-07 21:08:26.000000000 +0200 renamed from arch/sh/Makefile-dist 2006-08-07 20:42:33.000000000 +0200 +1 -1
@@ -173,7 +173,7 @@
 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
 
 PHONY += maketools FORCE
-maketools:  include/linux/version.h FORCE
+maketools: $(objtree)/include/linux/version.h FORCE
 

for all instances of the version.h file.

Was this fixed in -rc4 and I should update the SuSE kernel to it (well, I'll do that anyway later today...), or is this something that you did not know about?

thanks,

greg k-h

#2 lore raw
Quoted 22 lines · Greg KH
Quoted 6 lines · Sam Ravnborg

Hi Greg.
Please apply to 2.6.18.

Pull from:

	git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-2.6.18.git

Thanks, pulled and pushed out.

Oh, I just got a few reports of 2.6.18-rc3 not building with external trees very well, and something like the following would be required:

arch/sh/Makefile 2006-08-07 21:08:26.000000000 +0200 renamed from arch/sh/Makefile-dist 2006-08-07 20:42:33.000000000 +0200 +1 -1
@@ -173,7 +173,7 @@
 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
 
 PHONY += maketools FORCE
-maketools:  include/linux/version.h FORCE
+maketools: $(objtree)/include/linux/version.h FORCE
 
Quoted 1 line

for all instances of the version.h file.

This looks bogus.
Current directory is $(objtree) so prefixing with $(objtree) should not be needed and doing so will confuse make. make will not know that $(objtree)/include/linux/version.h and include/linux/version.h is the same file.

And the version.h dependency is anyway not needed. kbuild guarantee the version.h is created when the commands for archprepare are executed.

So for sh I would expect the following is a better fix:

arch/sh/Makefile +2 -2
index e467a45..ed1c865 100644
@@ -172,8 +172,8 @@ include/asm-sh/.mach: $(wildcard include
 
 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
 
-PHONY += maketools FORCE
-maketools:  include/linux/version.h FORCE
+PHONY += maketools
+maketools:  FORCE
 	$(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
 
 all: zImage

arm should have a similar fix - thats the only other archtecture that reference version.h in the arch specific kbuild (Makefile) files.

Quoted 4 lines

Was this fixed in -rc4 and I should update the SuSE kernel to it (well, I'll do that anyway later today...), or is this something that you did not know about?

Have not seen the reports - may have overlookd them at lkml. Been on vacation a few days so ctrl-d was used to read most of my lkml mails.

Sam

#3 lore raw

arm + sh cross compile suite for amd64 (i386)?

Quoted 1 line · Sam Ravnborg

So for sh I would expect the following is a better fix:

Reminds me. Anyone has a pointer to arm+sh gcc + binutils cross-compile suite that can run on my amd64 box?
My usual source: http://developer.osdl.org/dev/plm/cross_compile/
did have neither sh nor arm :-(

Sam

#4 lore raw

Re: arm + sh cross compile suite for amd64 (i386)?

Quoted 9 lines · On Mon, 7 Aug 2006 23:06:25 +0200 Sam Ravnborg <[email protected]> wrote:
Quoted 1 line · Sam Ravnborg

So for sh I would expect the following is a better fix:

Reminds me. Anyone has a pointer to arm+sh gcc + binutils cross-compile suite that can run on my amd64 box?
My usual source: http://developer.osdl.org/dev/plm/cross_compile/
did have neither sh nor arm :-(

I was somewhat-successful in building those up. From my notes:

arm:

	eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

sh4:

	eval `cat sh4.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

when you've struggled with crosstool for long enough, that'll become meaningful ;)

fwiw, I've uploaded x86 binaries to http://userweb.kernel.org/~akpm/.
They're a bit flakey but seem to be good enough to get through a defconfig build. The main problem is fancy machine-specific binutils options which are present in the kernel Makefiles but which stock binutils doesn't know about.

#5 lore raw
In reply to Sam Ravnborg
Quoted 19 lines · Sam Ravnborg
Quoted 18 lines · Greg KH
Quoted 6 lines · Sam Ravnborg

Hi Greg.
Please apply to 2.6.18.

Pull from:

	git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-2.6.18.git

Thanks, pulled and pushed out.

Oh, I just got a few reports of 2.6.18-rc3 not building with external trees very well, and something like the following would be required:

arch/sh/Makefile 2006-08-07 21:08:26.000000000 +0200 renamed from arch/sh/Makefile-dist 2006-08-07 20:42:33.000000000 +0200 +0 -0
@@ -173,7 +173,7 @@
 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
 
Quoted 6 lines
Quoted 5 lines
arch/sh/Makefile 2006-08-07 21:08:26.000000000 +0200 renamed from arch/sh/Makefile-dist 2006-08-07 20:42:33.000000000 +0200 +1 -1
 PHONY += maketools FORCE
-maketools:  include/linux/version.h FORCE
+maketools: $(objtree)/include/linux/version.h FORCE
 

for all instances of the version.h file.

This looks bogus.

Ick, ok, thanks.

Quoted 7 lines

Current directory is $(objtree) so prefixing with $(objtree) should not be needed and doing so will confuse make. make will not know that $(objtree)/include/linux/version.h and include/linux/version.h is the same file.

And the version.h dependency is anyway not needed. kbuild guarantee the version.h is created when the commands for archprepare are executed.

Hm, I'll point the person who is having the problem with this at you and lkml and have him explain the problems he is seeing. Much easier than me trying to mediate the conversation :)

thanks,

greg k-h

#6 lore raw
In reply to Sam Ravnborg

At Mon, 7 Aug 2006 23:02:09 +0200,

Quoted 24 lines · Sam Ravnborg
Quoted 22 lines · Greg KH
Quoted 6 lines · Sam Ravnborg

Hi Greg.
Please apply to 2.6.18.

Pull from:

	git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-2.6.18.git

Thanks, pulled and pushed out.

Oh, I just got a few reports of 2.6.18-rc3 not building with external trees very well, and something like the following would be required:

arch/sh/Makefile 2006-08-07 21:08:26.000000000 +0200 renamed from arch/sh/Makefile-dist 2006-08-07 20:42:33.000000000 +0200 +1 -1
@@ -173,7 +173,7 @@
 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
 
 PHONY += maketools FORCE
-maketools:  include/linux/version.h FORCE
+maketools: $(objtree)/include/linux/version.h FORCE
 
Quoted 6 lines
Quoted 1 line

for all instances of the version.h file.

This looks bogus.
Current directory is $(objtree) so prefixing with $(objtree) should not be needed and doing so will confuse make. make will not know that $(objtree)/include/linux/version.h and include/linux/version.h is the same file.

OK now I'm awake ;)

Actually, this part wasn't tested at all. I just blindly applied the patch for 2.6.16. Simply discard it.

Quoted 22 lines

And the version.h dependency is anyway not needed. kbuild guarantee the version.h is created when the commands for archprepare are executed.

So for sh I would expect the following is a better fix:

arch/sh/Makefile +2 -2
index e467a45..ed1c865 100644
@@ -172,8 +172,8 @@ include/asm-sh/.mach: $(wildcard include
 
 archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
 
-PHONY += maketools FORCE
-maketools:  include/linux/version.h FORCE
+PHONY += maketools
+maketools:  FORCE
 	$(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
 
 all: zImage
Quoted 2 lines

arm should have a similar fix - thats the only other archtecture that reference version.h in the arch specific kbuild (Makefile) files.

Yes, that looks better anyway.

Quoted 6 lines
Quoted 3 lines

Was this fixed in -rc4 and I should update the SuSE kernel to it (well, I'll do that anyway later today...), or is this something that you did not know about?

Have not seen the reports - may have overlookd them at lkml. Been on vacation a few days so ctrl-d was used to read most of my lkml mails.

I believe your patch fixes the problem we had -- the compilation of external modules with extra headers (created via "make prepare") outside the kernel source root. At least, I can build external alsa-driver modules now.

Of course, each package must be fixed to adapt somes changes in 2.6.18 (implicit inclusion of linux/config.h and linux/utsrelease.h)...

Thanks,

Takashi