kbuild: Separate build directory

From: Sam Ravnborg (sam@ravnborg.org)
Date: Fri Dec 27 2002 - 08:59:53 EST


I have updated the patch to support separate build directory to
kernel 2.5.53.
o Roman Zippel has updated and merged to chenges to kconfig,
  therefore this patch is rather small.
o Also introduced comments from Kai with respect to -I option
  handling for gcc.
o Introduced a Makefile for arch/i386/boot/tools to force the directory
  to be created by kbuild.
  Has the side-effect that host-progs := .../... now adhere to
  normal kbuild rules, where a Makefile is always present.
  Furthermore allow host-progs to be used for composite objects in
  subdirectories now.
o Updated ppc and X86_64 to use a Makefile for their tools.
  ppc actually had a non-used Makefile.

A new script 'kbuild' is located in the top-level directory
of the kernel srctree. To try out this patch just do

cd ~/build
../path/to/kernel/src/kbuild

This will locate all generated files, including
the kernel configuration, in ~/build.

One obvious usage for this is when you have several configs.
One config in each build directory, and all src stored in a central place.

This patch has been tested with i386 and defconfig.

Kai, please apply and forward to Linus.

        Sam

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================

ChangeSet@1.954, 2002-12-27 14:42:40+01:00, sam@mars.ravnborg.org
  kbuild: Support for separate build directory
  
  See usage description in the kbuild script located in the top-level kernel src directory.
  Utilising the VPATH feature of make, support for separate build directory is introduced.
  The -I options to gcc is preprocessed to point both to the kernel src and to the
  objtree where generated files lives.
  the top-level Makefile is modified to locate values for srctree and objtree from the file
  kbuild.config (if present) - this file is generated by the kbuild script.
  
  The kbuild scripts obtains the location of the kernel src tree from it's own
  location, and therefore cannot be moved somewhere else.
  
  Based on concept by Kai Germaschewski, which has also made the preparations throughout the makefiles.

ChangeSet@1.953, 2002-12-25 21:15:27+01:00, sam@mars.ravnborg.org
  kbuild: X86_64+ppc, Makefile for tools
  
  Added (X86_64) and corrected (ppc) makefile for tools in arch specific directory.
  This makes all architectures compatible with change in semantic of host-progs.

ChangeSet@1.952, 2002-12-25 21:08:40+01:00, sam@mars.ravnborg.org
  kbuild: host-progs specifying a subdirectory now assumes a Makefile
  
  When including subdirectories in a host-progs line for example:
  host-progs := tools/build
  then adhere to nomal behaviour, and use a makefile present in that directory.
  Add makefile for build executable for i386

 Makefile | 27 ++++++++++++++++-------
 arch/ppc/boot/utils/Makefile | 15 ++-----------
 arch/x86_64/boot/tools/Makefile | 4 +++
 kbuild | 46 ++++++++++++++++++++++++++++++++++++++++
 scripts/Makefile.build | 30 +++++++++++++++++---------
 5 files changed, 92 insertions(+), 30 deletions(-)

diff -Nru a/Makefile b/Makefile
--- a/Makefile Fri Dec 27 14:45:32 2002
+++ b/Makefile Fri Dec 27 14:45:32 2002
@@ -136,13 +136,19 @@
 export quiet Q KBUILD_VERBOSE
 
 # Paths to obj / src tree
-
-src := .
-obj := .
+ifneq ($(wildcard kbuild.config),)
+include kbuild.config
+src := $(srctree)
+obj := .
+VPATH := $(srctree)
+else
+src := .
+obj := .
 srctree := .
 objtree := .
+endif
 
-export srctree objtree
+export srctree objtree VPATH
 
 # Make variables (CC, etc...)
 
@@ -313,7 +319,7 @@
         set -e
         $(if $(filter .tmp_kallsyms%,$^),,
           echo ' Generating build number'
- . scripts/mkversion > .tmp_version
+ . $(src)/scripts/mkversion > .tmp_version
           mv -f .tmp_version .version
           $(Q)$(MAKE) -f scripts/Makefile.build obj=init
         )
@@ -329,7 +335,7 @@
 ifdef CONFIG_SMP
 define rule_vmlinux
         $(rule_vmlinux_no_percpu)
- $(AWK) -f scripts/per-cpu-check.awk < System.map
+ $(AWK) -f $(srctree)/scripts/per-cpu-check.awk < System.map
 endef
 else
 define rule_vmlinux
@@ -426,7 +432,11 @@
 
 include/asm:
         @echo ' Making asm->asm-$(ARCH) symlink'
+ifeq ($(srctree),$(objtree))
         @ln -s asm-$(ARCH) $@
+else
+ @ln -s $(src)/include/asm-$(ARCH) $@
+endif
 
 # Split autoconf.h into include/linux/config/*
 
@@ -451,6 +461,7 @@
 uts_len := 64
 
 include/linux/version.h: Makefile
+ @mkdir -p $(dir $@)
         @if expr length "$(KERNELRELEASE)" \> $(uts_len) >/dev/null ; then \
           echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
           exit 1; \
@@ -619,7 +630,7 @@
         tar -cvz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
         rm $(KERNELPATH) ; \
         cd $(TOPDIR) ; \
- . scripts/mkversion > .version ; \
+ $(CONFIG_SHELL) $(srctree)/scripts/mkversion > .version ; \
         rpm -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
         rm $(TOPDIR)/../$(KERNELPATH).tar.gz
 
@@ -706,7 +717,7 @@
         include/asm \
         .hdepend include/linux/modversions.h \
         tags TAGS kernel.spec \
- .tmp*
+ .tmp* kbuild.config
 
 # Directories removed with 'make mrproper'
 MRPROPER_DIRS += \
diff -Nru a/arch/ppc/boot/utils/Makefile b/arch/ppc/boot/utils/Makefile
--- a/arch/ppc/boot/utils/Makefile Fri Dec 27 14:45:32 2002
+++ b/arch/ppc/boot/utils/Makefile Fri Dec 27 14:45:32 2002
@@ -5,16 +5,7 @@
 # License. See the file "COPYING" in the main directory of this archive
 # for more details.
 
-HOSTCFLAGS += -I$(TOPDIR)/arch/$(ARCH)/boot/include
+host-progs := addnote hack-coff mkprep mknote mkbugboot mktree \
+ addSystemMap addRamdDisk
 
-all: FORCE
-
-# Simple programs with 1 file and no extra CFLAGS
-UTILS = addnote hack-coff mkprep mknote mkbugboot mktree \
- addSystemMap addRamdDisk
-
-$(UTILS):
- $(HOSTCC) $(HOSTCFLAGS) -o $@ $@.c
-
-clean:
- rm -f $(UTILS)
+build-targets := $(host-progs)
diff -Nru a/arch/x86_64/boot/tools/Makefile b/arch/x86_64/boot/tools/Makefile
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/arch/x86_64/boot/tools/Makefile Fri Dec 27 14:45:32 2002
@@ -0,0 +1,4 @@
+# Makefile for X86_64 tools
+
+host-progs := build
+build-targets := $(host-progs)
diff -Nru a/kbuild b/kbuild
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/kbuild Fri Dec 27 14:45:32 2002
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# This script is used to build a kernel from a directory
+# separate from the kernel src tree.
+# The location of this script is assumed to be the root of
+# the kernel src tree. Do not copy it elsewhere.
+# Usage: kbuild [Usual options provided to make]
+
+# kbuild prints out SRCTREE and OBJTREE when started, and then makes
+# symlinks of relevant files from the kernelsrc.
+
+# Files we do not care about in the kernel src tree
+RCS_FIND_IGNORE=" -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS "
+
+# Obtain absolute paths for SRCTREE and OBJTREE
+OBJTREE=$PWD
+cd `dirname $0`
+SRCTREE=$PWD
+cd $OBJTREE
+echo OBJTREE=$OBJTREE
+echo SRCTREE=$SRCTREE
+
+# If kbuild is executed from the root of the kernel src tree just call make
+if [ "$SRCTREE" == "$OBJTREE" ]; then
+ rm -f kbuild.config
+ make $*
+else
+ # A directory separate from kernel src tree
+ # Test if make has been executed in kernel src tree already
+ if [ -f $SRCTREE/.config -o -d $SRCTREE/include/asm ]; then
+ echo '$SRCTREE contains generated files, please run "make mrproper" in the SRCTREE'
+ else
+ # Symlink relevant files
+ for a in `cd $SRCTREE; \
+ find \( $RCS_FIND_IGNORE \) -prune -false -o -name Makefile\*`; do
+ if [ ! -d `dirname $a` ]; then
+ mkdir -p `dirname $a`
+ fi
+ ln -fs $SRCTREE/$a $a
+ done
+ ( echo "srctree := $SRCTREE";
+ echo "objtree := $OBJTREE";
+ ) > kbuild.config
+ make $*
+ fi
+fi
diff -Nru a/scripts/Makefile.build b/scripts/Makefile.build
--- a/scripts/Makefile.build Fri Dec 27 14:45:32 2002
+++ b/scripts/Makefile.build Fri Dec 27 14:45:32 2002
@@ -86,26 +86,36 @@
 $(multi-objs-y:.o=.s) : modname = $(modname-multi)
 $(multi-objs-y:.o=.lst) : modname = $(modname-multi)
 
+# With separate build tree, gcc -I option needs to be preprocessed.
+# This allows .h files to be located both in objtree and in srctree.
+# Additional -I options added to support generated .c and .h files
+ifeq ($(srctree),$(objtree))
+flags = $($(1))
+else
+flags = -I$(obj) -I$(srctree)/$(obj) $(foreach o,$($(1)),$(o) \
+ $(if $(filter -I%,$(o)),$(patsubst -I%,-I$(srctree)/%,$(o))))
+endif
+
 quiet_cmd_cc_s_c = CC $(quiet_modtag) $@
-cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
+cmd_cc_s_c = $(CC) $(call flags,c_flags) -S -o $@ $<
 
 %.s: %.c FORCE
         $(call if_changed_dep,cc_s_c)
 
 quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
-cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $<
+cmd_cc_i_c = $(CPP) $(call flags,c_flags) -o $@ $<
 
 %.i: %.c FORCE
         $(call if_changed_dep,cc_i_c)
 
 quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
-cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
+cmd_cc_o_c = $(CC) $(call flags,c_flags) -c -o $@ $<
 
 %.o: %.c FORCE
         $(call if_changed_dep,cc_o_c)
 
 quiet_cmd_cc_lst_c = MKLST $@
- cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
+ cmd_cc_lst_c = $(CC) $(call flags,c_flags) -g -c -o $*.o $< && \
                      $(CONFIG_SHELL) $(src)/scripts/makelst $*.o \
                                      System.map $(OBJDUMP) > $@
 
@@ -121,13 +131,13 @@
 $(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
 
 quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
-cmd_as_s_S = $(CPP) $(a_flags) -o $@ $<
+cmd_as_s_S = $(CPP) $(call flags,a_flags) -o $@ $<
 
 %.s: %.S FORCE
         $(call if_changed_dep,as_s_S)
 
 quiet_cmd_as_o_S = AS $(quiet_modtag) $@
-cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+cmd_as_o_S = $(CC) $(call flags,a_flags) -c -o $@ $<
 
 %.o: %.S FORCE
         $(call if_changed_dep,as_o_S)
@@ -226,7 +236,7 @@
 # Create executable from a single .c file
 # host-csingle -> Executable
 quiet_cmd_host-csingle = HOSTCC $@
- cmd_host-csingle = $(HOSTCC) $(hostc_flags) $(HOST_LOADLIBES) -o $@ $<
+ cmd_host-csingle = $(HOSTCC) $(call flags,hostc_flags) $(HOST_LOADLIBES) -o $@ $<
 $(host-csingle): %: %.c FORCE
         $(call if_changed_dep,host-csingle)
 
@@ -242,7 +252,7 @@
 # Create .o file from a single .c file
 # host-cobjs -> .o
 quiet_cmd_host-cobjs = HOSTCC $@
- cmd_host-cobjs = $(HOSTCC) $(hostc_flags) -c -o $@ $<
+ cmd_host-cobjs = $(HOSTCC) $(call flags,hostc_flags) -c -o $@ $<
 $(host-cobjs): %.o: %.c FORCE
         $(call if_changed_dep,host-cobjs)
 
@@ -258,14 +268,14 @@
 
 # Create .o file from a single .cc (C++) file
 quiet_cmd_host-cxxobjs = HOSTCXX $@
- cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
+ cmd_host-cxxobjs = $(HOSTCXX) $(call flags,hostcxx_flags) -c -o $@ $<
 $(host-cxxobjs): %.o: %.cc FORCE
         $(call if_changed_dep,host-cxxobjs)
 
 # Compile .c file, create position independent .o file
 # host-cshobjs -> .o
 quiet_cmd_host-cshobjs = HOSTCC -fPIC $@
- cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
+ cmd_host-cshobjs = $(HOSTCC) $(call flags,hostc_flags) -fPIC -c -o $@ $<
 $(host-cshobjs): %.o: %.c FORCE
         $(call if_changed_dep,host-cshobjs)
 

===================================================================

This BitKeeper patch contains the following changesets:
1.952..1.954
## Wrapped with gzip_uu ##

begin 664 bkpatch10561
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
8L_]P(KD`QGK((3'"7H#V#YG-K5[S,@``
`
end
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Dec 31 2002 - 22:00:10 EST