From sam@ravnborg.org Thu Mar 6 12:59:38 2008 Date: Thu, 6 Mar 2008 22:00:05 +0100 From: Sam Ravnborg To: Christoph Lameter Cc: Andrew Morton , ak@suse.de, Mel Gorman , apw@shadowen.org, KAMEZAWA Hiroyuki , KOSAKI Motohiro , Rik van Riel , linux-mm@kvack.org Subject: Re: [patch 2/8] Kbuild: Create a way to create preprocessor constants from C expressions On Thu, Mar 06, 2008 at 12:20:17PM -0800, Christoph Lameter wrote: > On Wed, 5 Mar 2008, Andrew Morton wrote: > > > > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > > > +++ linux-2.6/include/linux/bounds.h 2008-02-29 19:29:50.000000000 -0800 > > > @@ -0,0 +1,10 @@ > > > +#ifndef __LINUX_BOUNDS_H__ > > > +#define __LINUX_BOUNDS_H__ > > > +/* > > > + * DO NOT MODIFY. > > > + * > > > + * This file was generated by Kbuild > > > + * > > > + */ > > > + > > > +#endif > > > > a) I'm not sure that we should check in a file which is supposed to get > > overwritten at build-time. > > Well but it needs to be present in order to generate it. If the > definitions are not present then the new values of the constants cannot be > determined. A .config determined the value of these. Ehh - the file above is empty. I do not understand why we need an empty file to be present??? > > > b) Is this `make O=' friendly? > > These are just symbol definitions. Should be handled the > same way as arch/x86/*/asm-offsets.* stuff > > > c) > > make mrproper > > make allmodconfig > > make > > > > In file included from include/linux/mm.h:192, > > from include/linux/suspend.h:11, > > from arch/x86/kernel/asm-offsets_64.c:12, > > from arch/x86/kernel/asm-offsets.c:4: > > include/linux/page-flags.h:10:26: error: linux/bounds.h: No such file or directory > So asm-offset need bounds.h. We better tell make so - updated patch below. Sam diff --git a/Kbuild b/Kbuild index 1570d24..2a52057 100644 --- a/Kbuild +++ b/Kbuild @@ -1,19 +1,54 @@ # # Kbuild for top-level directory of the kernel # This file takes care of the following: -# 1) Generate asm-offsets.h -# 2) Check for missing system calls +# 1) Generate bounds.h +# 2) Generate asm-offsets.h (may need bounds.h) +# 3) Check for missing system calls ##### -# 1) Generate asm-offsets.h +# 1) Generate bounds.h + +bounds-file := include/linux/bounds.h + +always := $(bounds-file) +targets := $(bounds-file) kernel/bounds.s + +quiet_cmd_bounds = GEN $@ +define cmd_bounds + (set -e; \ + echo "#ifndef __LINUX_BOUNDS_H__"; \ + echo "#define __LINUX_BOUNDS_H__"; \ + echo "/*"; \ + echo " * DO NOT MODIFY."; \ + echo " *"; \ + echo " * This file was generated by Kbuild"; \ + echo " *"; \ + echo " */"; \ + echo ""; \ + sed -ne $(sed-y) $<; \ + echo ""; \ + echo "#endif" ) > $@ +endef + +# We use internal kbuild rules to avoid the "is up to date" message from make +kernel/bounds.s: kernel/bounds.c FORCE + $(Q)mkdir -p $(dir $@) + $(call if_changed_dep,cc_s_c) + +$(obj)/$(bounds-file): kernel/bounds.s Kbuild + $(Q)mkdir -p $(dir $@) + $(call cmd,bounds) + +##### +# 2) Generate asm-offsets.h # offsets-file := include/asm-$(SRCARCH)/asm-offsets.h -always := $(offsets-file) -targets := $(offsets-file) +always += $(offsets-file) +targets += $(offsets-file) targets += arch/$(SRCARCH)/kernel/asm-offsets.s -clean-files := $(addprefix $(objtree)/,$(targets)) + # Default sed regexp - multiline due to syntax constraints define sed-y @@ -40,7 +75,8 @@ define cmd_offsets endef # We use internal kbuild rules to avoid the "is up to date" message from make -arch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c FORCE +arch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \ + $(obj)/$(bounds-file) FORCE $(Q)mkdir -p $(dir $@) $(call if_changed_dep,cc_s_c) @@ -49,7 +85,7 @@ $(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s Kbuild $(call cmd,offsets) ##### -# 2) Check for missing system calls +# 3) Check for missing system calls # quiet_cmd_syscalls = CALL $< @@ -58,3 +94,7 @@ quiet_cmd_syscalls = CALL $< PHONY += missing-syscalls missing-syscalls: scripts/checksyscalls.sh FORCE $(call cmd,syscalls) + +# Delete all targets during make clean +clean-files := $(addprefix $(objtree)/,$(targets)) +