--- 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
--- 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
--- 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()