# HG changeset patch # User Mathieu Lacage # Date 1305669762 -7200 # Node ID 532107bb1271d955c235c04f6121e012f337eac7 # Parent 31a9a363c2d33716ed4820ad25642b3f0ddf1ff3 support objdir != srcdir diff -r 31a9a363c2d3 -r 532107bb1271 Makefile --- a/Makefile Tue Feb 01 13:31:43 2011 +0100 +++ b/Makefile Wed May 18 00:02:42 2011 +0200 @@ -1,7 +1,9 @@ -INSTALL_DIR=objdir +SRCDIR=$(dir $(firstword $(MAKEFILE_LIST))) +INSTALL_DIR=/usr +KCONFIG_CONFIG?=config +VPATH=$(SRCDIR) KERNEL_DIR=net-next-2.6 KERNEL_VERSION=fed66381d65a35198639f564365e61a7f256bf79 -KERNEL_DOWNLOAD=git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git SIM_SRC=\ fs.c random.c sim.c softirq.c time.c \ @@ -23,16 +25,16 @@ SIM_OBJ=$(addprefix sim/,$(addsuffix .o,$(basename $(SIM_SRC)))) CFLAGS+= \ $(opt_$(OPT)) -g3 -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs \ - -fno-inline -iwithprefix $(KERNEL_DIR)/include -DKBUILD_BASENAME=\"clnt\" \ + -fno-inline -iwithprefix $(SRCDIR)$(KERNEL_DIR)/include -DKBUILD_BASENAME=\"clnt\" \ -fno-strict-aliasing -fno-common -fno-delete-null-pointer-checks \ -fno-stack-protector \ -DKBUILD_MODNAME=\"nsc\" -DMODVERSIONS -DEXPORT_SYMTAB \ - -include sim/include/generated/autoconf.h \ + -include autoconf.h \ -U__FreeBSD__ -D__linux__=1 -Dlinux=1 -D__linux=1 \ - -Isim/include -I$(KERNEL_DIR)/include \ - $(PIC_CFLAGS) -D_DEBUG + -I$(SRCDIR)sim/include -I$(SRCDIR)$(KERNEL_DIR)/include \ + $(PIC_CFLAGS) -D_DEBUG -I$(PWD) -include processor.mk +include $(SRCDIR)processor.mk ifeq ($(PROCESSOR_SIZE),64) CFLAGS+= -DCONFIG_64BIT @@ -43,11 +45,11 @@ modules:= all-obj-for-clean:= -all: install +all: library modules -include objs.mk -AUTOCONF=sim/include/generated/autoconf.h +AUTOCONF=autoconf.h # note: the directory order below matters to ensure that we match the kernel order dirs=kernel mm crypto lib drivers/base drivers/net net empty:= @@ -66,17 +68,20 @@ rwsem-spinlock.o scatterlist.o ratelimit.o hexdump.o dec_and_lock.o \ div64.o -objs.mk: Makefile.print $(KERNEL_DIR)/kernel/timeconst.h .download.ts +objs.mk: Makefile.print timeconst.h -for i in 1; do \ $(foreach d,$(dirs), \ - $(MAKE) -s -f Makefile.print srcdir=$(KERNEL_DIR)/$(d) \ - config=$(KERNEL_DIR)/.config to_keep=$(subst $(space),$(colon),$($(d)_to_keep)) print;) \ + $(MAKE) -s -f $< srcdir=$(SRCDIR)$(KERNEL_DIR)/$(d) \ + objdir=$(KERNEL_DIR)/$(d) \ + config=$(PWD)/$(KCONFIG_CONFIG) \ + to_keep=$(subst $(space),$(colon),$($(d)_to_keep)) print;) \ done > $@ --include $(KERNEL_DIR)/.config -$(AUTOCONF): ./generate-autoconf.py $(KERNEL_DIR)/.config - cat $(KERNEL_DIR)/.config | ./generate-autoconf.py > $@ -$(KERNEL_DIR)/kernel/timeconst.h: $(KERNEL_DIR)/.config - perl $(KERNEL_DIR)/kernel/timeconst.pl $(CONFIG_HZ) > $@ +$(KCONFIG_CONFIG): + make -C $(SRCDIR)$(KERNEL_DIR) ARCH=sim KCONFIG_CONFIG=$(PWD)/$(KCONFIG_CONFIG) defconfig +$(AUTOCONF): generate-autoconf.py $(KCONFIG_CONFIG) + $^ > $@ +timeconst.h: $(KCONFIG_CONFIG) + perl $(SRCDIR)$(KERNEL_DIR)/kernel/timeconst.pl $(shell grep CONFIG_HZ= $(KCONFIG_CONFIG) | sed -e 's/CONFIG_HZ=\(\w\)/\1/g') > $@ linker.lds: ./generate-linker-script.py ld -shared --verbose | ./$^ > $@ @@ -84,37 +89,41 @@ OBJS=$(SIM_OBJ) $(foreach builtin,$(KERNEL_BUILTIN),$(if $($(builtin)),$($(builtin)))) %/builtin.o: - if test "$($@)"; then for f in $($@); do $(AR) Tcru $@ $$f; done; else $(AR) Tcru $@; fi + mkdir -p $(dir $@); if test -n "$($@)"; then for f in $($@); do $(AR) Tcru $@ $$f; done; else $(AR) Tcru $@; fi %.ko:%.o $(CC) -shared -o $@ -nostdlib $^ +%.o:%.c + mkdir -p $(dir $@) + $(CC) $(CFLAGS) -c $^ -o $@ library: $(KERNEL_LIB) modules: $(modules) -install: library modules +install: modules library mkdir -p $(INSTALL_DIR) - cp $(KERNEL_LIB) $(INSTALL_DIR) + mkdir -p $(INSTALL_DIR)/lib + mkdir -p $(INSTALL_DIR)/include + mkdir -p $(INSTALL_DIR)/include/sim + mkdir -p $(INSTALL_DIR)/lib/$(KERNEL_DIR) + cp $(KERNEL_LIB) $(INSTALL_DIR)/lib for mod in $(modules); do \ TMP=`dirname $$mod |sed -e 's;^[^/]\+/;;'`; \ - mkdir -p $(INSTALL_DIR)/$$TMP; \ - cp $$mod $(INSTALL_DIR)/$$TMP/`basename $$mod`; \ + mkdir -p $(INSTALL_DIR)/lib/$(KERNEL_DIR)/$$TMP; \ + cp $$mod $(INSTALL_DIR)/lib/$(KERNEL_DIR)/$$TMP/`basename $$mod`; \ done for h in sim-init.h sim-types.h sim.h; do \ - cp sim/include/$$h $(INSTALL_DIR)/$$h; \ + cp sim/include/$$h $(INSTALL_DIR)/include/sim/$$h; \ done install-dir: -setup: .download.ts .patch.ts $(KERNEL_DIR)/arch/sim +setup: .patch.ts $(KERNEL_DIR)/arch/sim $(KERNEL_DIR)/arch/sim: if test ! -L $@; then ln -s $(PWD)/sim $(KERNEL_DIR)/arch/sim; fi .patch.ts: kernel.patch CWD=`pwd` && cd $(KERNEL_DIR) && patch -p1 < $$CWD/kernel.patch && cd $$CWD && touch .patch.ts unpatch: CWD=`pwd` && cd $(KERNEL_DIR) && git reset --hard $(KERNEL_VERSION) && cd $$CWD && rm -f .patch.ts -.download.ts: - git clone $(KERNEL_DOWNLOAD) $(KERNEL_DIR) && pushd $(KERNEL_DIR) && git reset --hard \ - $(KERNEL_VERSION) && popd && touch .download.ts ALL_OBJS=$(OBJS) $(KERNEL_LIB) $(modules) $(all-obj-for-clean) clean: @for f in $(foreach m,$(modules),$($(m))); do rm -f $$f; done diff -r 31a9a363c2d3 -r 532107bb1271 Makefile.print --- a/Makefile.print Tue Feb 01 13:31:43 2011 +0100 +++ b/Makefile.print Wed May 18 00:02:42 2011 +0200 @@ -1,4 +1,4 @@ -# inherit $(srcdir) $(config) $(to_keep) from command-line +# inherit $(objdir) $(config) $(srcdir) $(to_keep) from command-line include $(config) include $(srcdir)/Makefile @@ -20,15 +20,15 @@ print: $(final-obj-m) $(subdirs) @if test $(if $(final-obj-y),1); then \ - echo -n $(srcdir)/builtin.o; echo -n "="; echo $(addprefix $(srcdir)/,$(final-obj-y)); \ - echo -n $(srcdir)/builtin.o; echo -n ": "; echo $(addprefix $(srcdir)/,$(final-obj-y)); \ - echo -n "all-obj-for-clean+="; echo $(addprefix $(srcdir)/,$(final-obj-y)) $(srcdir)/builtin.o; \ + echo -n $(objdir)/builtin.o; echo -n "="; echo $(addprefix $(objdir)/,$(final-obj-y)); \ + echo -n $(objdir)/builtin.o; echo -n ": "; echo $(addprefix $(objdir)/,$(final-obj-y)); \ + echo -n "all-obj-for-clean+="; echo $(addprefix $(objdir)/,$(final-obj-y)) $(objdir)/builtin.o; \ fi $(final-obj-m): - @echo -n "modules+="; echo $(addprefix $(srcdir)/,$(@:.o=.ko)) - @echo -n $(addprefix $(srcdir)/,$(@:.o=.ko)); echo -n ": " - @echo $(addprefix $(srcdir)/,$(if $($(@:.o=-objs)),$($(@:.o=-objs)),$@)) - @echo -n $(addprefix $(srcdir)/,$(@:.o=.ko)); echo -n "=" - @echo $(addprefix $(srcdir)/,$(if $($(@:.o=-objs)),$($(@:.o=-objs)),$@)) + @echo -n "modules+="; echo $(addprefix $(objdir)/,$(@:.o=.ko)) + @echo -n $(addprefix $(objdir)/,$(@:.o=.ko)); echo -n ": " + @echo $(addprefix $(objdir)/,$(if $($(@:.o=-objs)),$($(@:.o=-objs)),$@)) + @echo -n $(addprefix $(objdir)/,$(@:.o=.ko)); echo -n "=" + @echo $(addprefix $(objdir)/,$(if $($(@:.o=-objs)),$($(@:.o=-objs)),$@)) $(subdirs): - @$(MAKE) -s -f Makefile.print srcdir=$(srcdir)/$@ config=$(config) to_keep=$(to_keep) print 2>/dev/null + @$(MAKE) -s -f $(firstword $(MAKEFILE_LIST)) objdir=$(objdir)/$@ config=$(config) srcdir=$(srcdir)/$@ to_keep=$(to_keep) print 2>/dev/null diff -r 31a9a363c2d3 -r 532107bb1271 generate-autoconf.py --- a/generate-autoconf.py Tue Feb 01 13:31:43 2011 +0100 +++ b/generate-autoconf.py Wed May 18 00:02:42 2011 +0200 @@ -18,4 +18,6 @@ writing.write('#define ' + left + ' ' + right + '\n') import sys -autoconf_header (sys.stdin, sys.stdout) +f = open(sys.argv[1], 'r') +autoconf_header (f, sys.stdout) +f.close()