From 12213f870debe1b7efc27e32bba753307252adbe Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Sun, 11 Mar 2007 16:48:33 +0000 Subject: [PATCH] This patch drives the idea of a hierarchical structure below $(obj) a bit further. It is only tested with my Kconfig build dir fixes applied. Not sure how pretty this is. All the mkdirs increase build time by 0.2s, so it looks a lot more nasty than it actually is. If wishes, we can create the whole directory structure below build in the "prepare" target. It's not faster, but more limited to one place. The next step could be to spread out *_LIB_OBJ to lib/Makefile. in which case it is nice that you can just write object.o instead of $(obj)/object.o or $(obj)/lib/object.o ... The top level modules (initram, stage0, stage2, ..) are still in $(obj). So are the northbridge and southbridge object files - These require some more cleanup anyways, as they're defined in the mainboard Makefile. Signed-off-by: Stefan Reinauer Acked-by: Uwe Hermann git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@242 f3766cd6-281f-0410-b1cd-43a5c92072e9 --- arch/x86/Makefile | 50 ++++++++++++++++----------- console/Makefile | 3 +- device/Makefile | 7 ++-- lib/Makefile | 3 +- mainboard/emulation/qemu-x86/Makefile | 17 ++++----- util/dtc/Makefile | 32 +++++++---------- 6 files changed, 59 insertions(+), 53 deletions(-) diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 2ff87af963..a80e40ec9a 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -60,19 +60,21 @@ $(obj)/linuxbios.bootblock: $(obj)/linuxbios.vpd $(obj)/stage0.init # initram module and the various stages and payload files. # -STAGE0_CONSOLE_OBJ = $(obj)/vtxprintf.o $(obj)/vsprintf.o $(obj)/console.o -STAGE0_LIB_OBJ = $(obj)/uart8250.o $(obj)/mem.o $(obj)/elfboot.o \ - $(obj)/lar.o -STAGE0_ARCH_X86_OBJ = $(obj)/cachemain.o $(obj)/serial.o $(obj)/archelfboot.o - +STAGE0_CONSOLE_OBJ = vtxprintf.o vsprintf.o console.o +STAGE0_LIB_OBJ = uart8250.o mem.o elfboot.o lar.o +STAGE0_ARCH_X86_OBJ = cachemain.o serial.o archelfboot.o ifeq ($(CONFIG_CAR_TYPE_I586),y) - STAGE0_CAR_OBJ = $(obj)/stage0_i586.o + STAGE0_CAR_OBJ = stage0_i586.o else - STAGE0_CAR_OBJ = $(obj)/stage0_i586.o + STAGE0_CAR_OBJ = stage0_i586.o endif -STAGE0_OBJ := $(STAGE0_CONSOLE_OBJ) $(STAGE0_LIB_OBJ) $(STAGE0_ARCH_X86_OBJ) $(STAGE0_CAR_OBJ) + +STAGE0_OBJ := $(patsubst %,$(obj)/console/%,$(STAGE0_CONSOLE_OBJ)) \ + $(patsubst %,$(obj)/lib/%,$(STAGE0_LIB_OBJ)) \ + $(patsubst %,$(obj)/arch/x86/%,$(STAGE0_ARCH_X86_OBJ)) \ + $(patsubst %,$(obj)/arch/x86/%,$(STAGE0_CAR_OBJ)) $(obj)/stage0.init: $(STAGE0_OBJ) $(Q)printf "Building stage0.init... " @@ -99,14 +101,20 @@ $(obj)/stage0.init: $(STAGE0_OBJ) # TODO: This should be compressed with the default compressor. # -STAGE2_LIB_OBJ = $(obj)/stage2.o $(obj)/clog2.o $(obj)/mem.o $(obj)/malloc.o \ - $(obj)/tables.o $(obj)/delay.o $(obj)/compute_ip_checksum.o -STAGE2_ARCH_X86_OBJ = $(obj)/archtables.o $(obj)/linuxbios_table.o $(obj)/udelay_io.o -STAGE2_ARCH_X86_OBJ += $(obj)/pci_ops_auto.o $(obj)/pci_ops_conf1.o $(obj)/pci_ops_conf2.o -STAGE2_DYNAMIC_OBJ = $(obj)/statictree.o +STAGE2_LIB_OBJ = stage2.o clog2.o mem.o malloc.o tables.o delay.o compute_ip_checksum.o -STAGE2_OBJ := $(STAGE2_LIB_OBJ) $(STAGE2_DEVICE_OBJ) $(STAGE2_ARCH_X86_OBJ) -STAGE2_OBJ += $(STAGE2_MAINBOARD_OBJ) $(STAGE2_DYNAMIC_OBJ) $(STAGE2_CHIPSET_OBJ) +STAGE2_ARCH_X86_OBJ = archtables.o linuxbios_table.o udelay_io.o +STAGE2_ARCH_X86_OBJ += pci_ops_auto.o pci_ops_conf1.o pci_ops_conf2.o + +STAGE2_DYNAMIC_OBJ = statictree.o + +STAGE2_OBJ := $(patsubst %,$(obj)/lib/%,$(STAGE2_LIB_OBJ)) \ + $(patsubst %,$(obj)/arch/x86/%,$(STAGE2_ARCH_X86_OBJ)) \ + $(patsubst %,$(obj)/device/%,$(STAGE2_DEVICE_OBJ)) \ + $(patsubst %,$(obj)/mainboard/$(MAINBOARDDIR)/%,$(STAGE2_MAINBOARD_OBJ)) \ + $(patsubst %,$(obj)/mainboard/$(MAINBOARDDIR)/%,$(STAGE2_DYNAMIC_OBJ)) \ + +STAGE2_OBJ += $(STAGE2_CHIPSET_OBJ) $(obj)/linuxbios.stage2: $(obj)/stage0.init $(STAGE2_OBJ) $(Q)printf "Building linuxbios.stage2... " @@ -133,17 +141,19 @@ payload: # Build rules. # -$(obj)/%.o: $(src)/arch/x86/%.c +$(obj)/arch/x86/%.o: $(src)/arch/x86/%.c + $(Q)mkdir -p $(obj)/arch/x86 $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ -$(obj)/%.o: $(src)/mainboard/$(MAINBOARDDIR)/%.c +$(obj)/mainboard/$(MAINBOARDDIR)/%.o: $(src)/mainboard/$(MAINBOARDDIR)/%.c + $(Q)mkdir -p $(obj)/mainboard/$(MAINBOARDDIR) $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ # Building asm stub. -$(obj)/stage0%.o: $(src)/arch/x86/stage0%.S +$(obj)/arch/x86/stage0%.o: $(src)/arch/x86/stage0%.S $(Q)$(CC) -E $(LINUXBIOSINCLUDE) $< \ - -o $(obj)/stage0_asm.s -DBOOTBLK=0x1f00 -DRESRVED=0xf0 \ + -o $(obj)/arch/x86/stage0_asm.s -DBOOTBLK=0x1f00 -DRESRVED=0xf0 \ -DDATE=\"`date +%Y/%m/%d`\" - $(Q)$(AS) $(obj)/stage0_asm.s -o $@ + $(Q)$(AS) $(obj)/arch/x86/stage0_asm.s -o $@ endif diff --git a/console/Makefile b/console/Makefile index 038132b155..73720542d4 100644 --- a/console/Makefile +++ b/console/Makefile @@ -19,6 +19,7 @@ ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ## -$(obj)/%.o: $(src)/console/%.c +$(obj)/console/%.o: $(src)/console/%.c + $(Q)mkdir -p $(obj)/console $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ diff --git a/device/Makefile b/device/Makefile index e921d65b3b..d0d185671f 100644 --- a/device/Makefile +++ b/device/Makefile @@ -19,8 +19,9 @@ ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ## -$(obj)/%.o: $(src)/device/%.c +$(obj)/device/%.o: $(src)/device/%.c + $(Q)mkdir -p $(obj)/device $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ -STAGE2_DEVICE_OBJ = $(obj)/device.o $(obj)/device_util.o \ - $(obj)/root_device.o $(obj)/pci_device.o $(obj)/pci_ops.o +STAGE2_DEVICE_OBJ = device.o device_util.o \ + root_device.o pci_device.o pci_ops.o diff --git a/lib/Makefile b/lib/Makefile index 69d86df1e0..905f3c7be5 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -35,6 +35,7 @@ endif lzma: $(Q)printf "Building lzma... skipped\n" -$(obj)/%.o: $(src)/lib/%.c +$(obj)/lib/%.o: $(src)/lib/%.c + $(Q)mkdir -p $(obj)/lib $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ diff --git a/mainboard/emulation/qemu-x86/Makefile b/mainboard/emulation/qemu-x86/Makefile index fa646d6c2b..e20b2cd27c 100644 --- a/mainboard/emulation/qemu-x86/Makefile +++ b/mainboard/emulation/qemu-x86/Makefile @@ -37,10 +37,11 @@ $(obj)/linuxbios.vpd: # directory and is built from what was auto.c in v2. # -$(obj)/linuxbios.initram: $(obj)/stage0.init $(obj)/stage0.o $(obj)/initram.o +$(obj)/linuxbios.initram: $(obj)/stage0.init $(obj)/stage0.o $(obj)/mainboard/$(MAINBOARDDIR)/initram.o $(Q)printf "Building linuxbios.initram... " $(Q)# initram links against stage0 - $(Q)$(LD) -R $(obj)/stage0.o -Ttext 0x80000 $(obj)/initram.o \ + $(Q)$(LD) -R $(obj)/stage0.o -Ttext 0x80000 \ + $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \ --entry=main -o $(obj)/linuxbios.initram.o $(Q)objcopy -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram @@ -50,15 +51,15 @@ $(obj)/linuxbios.initram: $(obj)/stage0.init $(obj)/stage0.o $(obj)/initram.o # Miscellaneous important targets. # -$(obj)/mainboard.o: $(obj)/statictree.o +$(obj)/mainboard/$(MAINBOARDDIR)/mainboard.o: $(obj)/mainboard/$(MAINBOARDDIR)/statictree.o -$(obj)/statictree.o: $(obj)/statictree.c - $(Q)$(CC) $(CFLAGS) $(LINUXBIOSINCLUDE) -c -o $(obj)/statictree.o $(obj)/statictree.c +$(obj)/mainboard/$(MAINBOARDDIR)/statictree.o: $(obj)/mainboard/$(MAINBOARDDIR)/statictree.c + $(Q)$(CC) $(CFLAGS) $(LINUXBIOSINCLUDE) -c -o $@ $< -$(obj)/statictree.c: mainboard/$(MAINBOARDDIR)/dts $(obj)/util/dtc/dtc - $(Q)$(obj)/util/dtc/dtc -O lb mainboard/$(MAINBOARDDIR)/dts >$(obj)/statictree.c +$(obj)/mainboard/$(MAINBOARDDIR)/statictree.c: $(src)/mainboard/$(MAINBOARDDIR)/dts $(obj)/util/dtc/dtc + $(Q)$(obj)/util/dtc/dtc -O lb mainboard/$(MAINBOARDDIR)/dts > $@ -STAGE2_MAINBOARD_OBJ = $(obj)/mainboard.o +STAGE2_MAINBOARD_OBJ = mainboard.o STAGE2_CHIPSET_OBJ = # chipset diff --git a/util/dtc/Makefile b/util/dtc/Makefile index 55046d674f..a3cd695bc9 100644 --- a/util/dtc/Makefile +++ b/util/dtc/Makefile @@ -12,36 +12,28 @@ DEPFILES = $(DTC_OBJS:.o=.d) #all: $(TARGETS) -$(obj)/util/dtc/dtc: $(patsubst %,$(obj)/%,$(DTC_OBJS)) +$(obj)/util/dtc/dtc: $(patsubst %,$(obj)/util/dtc/%,$(DTC_OBJS)) $(Q)mkdir -p $(obj)/util/dtc/ $(Q)$(HOSTCC) -o $@ $^ ftdump: ftdump.o $(Q)$(HOSTCC) -o $@ $^ -$(obj)/dtc-parser.tab.c $(obj)/dtc-parser.tab.h $(obj)/dtc-parser.output: $(src)/util/dtc/dtc-parser.y - $(Q)cd $(obj); $(BISON) -d $< &> $(obj)/dtc.bison.out +$(obj)/util/dtc/dtc-parser.tab.c $(obj)/util/dtc/dtc-parser.tab.h $(obj)/util/dtc/dtc-parser.output: $(src)/util/dtc/dtc-parser.y + $(Q)cd $(obj)/util/dtc; $(BISON) -d $< &> $(obj)/util/dtc/dtc.bison.out -$(obj)/lex.yy.c: $(src)/util/dtc/dtc-lexer.l - $(Q)cd $(obj); $(LEX) $< +$(obj)/util/dtc/lex.yy.c: $(src)/util/dtc/dtc-lexer.l + $(Q)cd $(obj)/util/dtc; $(LEX) $< -$(obj)/dtc.o: $(src)/util/dtc/dtc.c - $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ -c $< -$(obj)/livetree.o: $(src)/util/dtc/livetree.c - $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ -c $< -$(obj)/flattree.o: $(src)/util/dtc/flattree.c - $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ -c $< -$(obj)/data.o: $(src)/util/dtc/data.c - $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ -c $< -$(obj)/treesource.o: $(src)/util/dtc/treesource.c - $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ -c $< -$(obj)/fstree.o: $(src)/util/dtc/fstree.c - $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ -c $< -$(obj)/dtc-parser.tab.o: $(obj)/dtc-parser.tab.c - $(Q)$(HOSTCC) -I$(src)/util/dtc $(HOSTCFLAGS) -o $@ -c $< -$(obj)/lex.yy.o: $(obj)/lex.yy.c $(obj)/dtc-parser.tab.h +$(obj)/util/dtc/%.o: $(src)/util/dtc/%.c + $(Q)mkdir -p $(obj)/util/dtc/ $(Q)$(HOSTCC) -I$(src)/util/dtc $(HOSTCFLAGS) -o $@ -c $< +$(obj)/util/dtc/dtc-parser.tab.o: $(obj)/util/dtc/dtc-parser.tab.c + $(Q)$(HOSTCC) -I$(src)/util/dtc $(HOSTCFLAGS) -o $@ -c $< + +$(obj)/util/dtc/lex.yy.o: $(obj)/util/dtc/lex.yy.c $(obj)/util/dtc/dtc-parser.tab.h + $(Q)$(HOSTCC) -I$(src)/util/dtc $(HOSTCFLAGS) -o $@ -c $< ifdef DTC_DEBUG