summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Georgi patrick.georgi <Patrick Georgi patrick.georgi@coresystems.de>2010-03-16 12:01:13 +0000
committerPatrick Georgi <patrick.georgi@coresystems.de>2010-03-16 12:01:13 +0000
commitc5f773d7f4f04e6bde3f23613d53e198da805e56 (patch)
tree3742d7cc50888d66bc798c17873a5d3e8a9c6f89
parent1b2831c63c1facee8f5be3962b4cc84a7ebd0f57 (diff)
Various changes to the buildsystem:
- Single instance of the CC build rule in Makefile, instantiated as necessary - Remove manual static.o and option_table.o rules, they're now covered by those instances of the CC build rule - Normalize object file paths, so it can be $(obj)/option_table.o instead of $(obj)/arch/i386/../../option_table.o now - Add -pipe to compiler flags. It might be detrimental on rare scenarios (building with extremly high disk bandwidth, eg. RAM disk), but it significantly helps on win32 (which seems to cache less aggressively than most unix-alikes) - Silence stderr on hostname and domainname invocations (cosmetic fix for cygwin) - Test for -Wa,--divide functionality of the target compiler (taken from abuild). It might be possible to remove most patches in crossgcc with that. - Report build of failover.inc and romstage.inc Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de Acked-by: Peter Stuge <peter@stuge.se> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5224 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--Makefile98
-rw-r--r--src/arch/i386/Makefile.inc5
-rw-r--r--util/xcompile/xcompile1
3 files changed, 37 insertions, 67 deletions
diff --git a/Makefile b/Makefile
index 3c97f0ed0a..acf6408a23 100644
--- a/Makefile
+++ b/Makefile
@@ -142,14 +142,6 @@ $(obj)/mainboard/$(MAINBOARDDIR)/static.c: $(src)/mainboard/$(MAINBOARDDIR)/devi
mkdir -p $(obj)/mainboard/$(MAINBOARDDIR)
(cd $(obj)/mainboard/$(MAINBOARDDIR) ; PYTHONPATH=$(top)/util/sconfig export PYTHONPATH; python config.py $(MAINBOARDDIR) $(top) $(obj)/mainboard/$(MAINBOARDDIR))
-$(obj)/mainboard/$(MAINBOARDDIR)/static.o: $(obj)/mainboard/$(MAINBOARDDIR)/static.c
- @printf " CC $(subst $(obj)/,,$(@))\n"
- $(CC) $(CFLAGS) -c -o $@ $<
-
-$(obj)/arch/i386/../../option_table.o: $(obj)/arch/i386/../../option_table.c
- @printf " CC $(subst $(obj)/,,$(@))\n"
- $(CC) $(CFLAGS) -c -o $@ $<
-
objs:=$(obj)/mainboard/$(MAINBOARDDIR)/static.o
initobjs:=
drivers:=
@@ -168,11 +160,11 @@ includemakefiles= \
$(if $(strip $(3)), \
$(foreach type,$(2), \
$(eval $(type)s+= \
- $$(patsubst util/%, \
+ $$(abspath $$(patsubst util/%, \
$(obj)/util/%, \
$$(patsubst src/%, \
$(obj)/%, \
- $$(addprefix $(dir $(1)),$$($(type)-y))))))) \
+ $$(addprefix $(dir $(1)),$$($(type)-y)))))))) \
$(eval subdirs+=$$(subst $(PWD)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
# For each path in $(subdirs) call includemakefiles, passing $(1) as $(3)
@@ -213,61 +205,35 @@ $(obj)/$(1)%.o: src/$(1)%.asl
$(CC) $$(CFLAGS) $$(if $$(subst dsdt,,$$(basename $$(notdir $$@))), -DAmlCode=AmlCode_$$(basename $$(notdir $$@))) -c -o $$@ $$(basename $$@).c
endef
-define objs_c_template
-$(obj)/$(1)%.o: $(1)%.c $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) $$(CFLAGS) -c -o $$@ $$<
-
-$(obj)/$(1)%.o: src/$(1)%.c $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) $$(CFLAGS) -c -o $$@ $$<
+# macro to define template macros that are used by use_template macro
+define create_cc_template
+# $1 obj class (objs, initobjs, ...)
+# $2 source suffix (c, S)
+# $3 .o infix ("" ".initobj", ...)
+# $4 additional compiler flags
+de$(EMPTY)fine $(1)_$(2)_template
+$(obj)/$$(1)%$(3).o: $$(1)%.$(2) $(obj)/config.h
+ printf " CC $$$$(subst $$$$(obj)/,,$$$$(@))\n"
+ $(CC) $(4) $$$$(CFLAGS) -c -o $$$$@ $$$$<
+
+$(obj)/$$(1)%$(3).o: src/$$(1)%.$(2) $(obj)/config.h
+ printf " CC $$$$(subst $$$$(obj)/,,$$$$(@))\n"
+ $(CC) $(4) $$$$(CFLAGS) -c -o $$$$@ $$$$<
+
+$(obj)/$$(1)%$(3).o: obj/$$(1)%.$(2) $(obj)/config.h
+ printf " CC $$$$(subst $$$$(obj)/,,$$$$(@))\n"
+ $(CC) $(4) $$$$(CFLAGS) -c -o $$$$@ $$$$<
+en$(EMPTY)def
endef
-define objs_S_template
-$(obj)/$(1)%.o: $(1)%.S $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -DASSEMBLY $$(CFLAGS) -c -o $$@ $$<
-
-$(obj)/$(1)%.o: src/$(1)%.S $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -DASSEMBLY $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define initobjs_c_template
-$(obj)/$(1)%.initobj.o: src/$(1)%.c $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define initobjs_S_template
-$(obj)/$(1)%.initobj.o: src/$(1)%.S $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -DASSEMBLY $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define drivers_c_template
-$(obj)/$(1)%.driver.o: src/$(1)%.c $(obj)/config.h
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define drivers_S_template
-$(obj)/$(1)%.driver.o: src/$(1)%.S
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -DASSEMBLY $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define smmobjs_c_template
-$(obj)/$(1)%.smmobj.o: src/$(1)%.c
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define smmobjs_S_template
-$(obj)/$(1)%.smmobj.o: src/$(1)%.S
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) $$(CFLAGS) -c -o $$@ $$<
-endef
+$(eval $(call create_cc_template,objs,c))
+$(eval $(call create_cc_template,objs,S,,-DASSEMBLY))
+$(eval $(call create_cc_template,initobjs,c,.initobj))
+$(eval $(call create_cc_template,initobjs,S,.initobj,-DASSEMBLY))
+$(eval $(call create_cc_template,drivers,c,.driver))
+$(eval $(call create_cc_template,drivers,S,.driver,-DASSEMBLY))
+$(eval $(call create_cc_template,smmobjs,c,.smmobj))
+$(eval $(call create_cc_template,smmobjs,S,.smmobj))
usetemplate=$(foreach d,$(sort $(dir $($(1)))),$(eval $(call $(1)_$(2)_template,$(subst $(obj)/,,$(d)))))
usetemplate=$(foreach d,$(sort $(dir $($(1)))),$(eval $(call $(1)_$(2)_template,$(subst $(obj)/,,$(d)))))
@@ -298,7 +264,7 @@ INCLUDES := -I$(top)/src -I$(top)/src/include -I$(obj) -I$(top)/src/arch/$(ARCHD
INCLUDES += -I$(top)/util/x86emu/include
INCLUDES += -include $(obj)/config.h
-CFLAGS = $(INCLUDES) -Os -nostdinc
+CFLAGS = $(INCLUDES) -Os -nostdinc -pipe
CFLAGS += -nostdlib -Wall -Wundef -Wstrict-prototypes -Wmissing-prototypes
CFLAGS += -Wwrite-strings -Wredundant-decls -Wno-trigraphs
CFLAGS += -Wstrict-aliasing -Wshadow
@@ -337,8 +303,8 @@ $(obj)/build.h: .xcompile
printf "#define COREBOOT_LINKER \"$(shell LANG= $(LD) --version | head -n1)\"\n" >> $(obj)/build.ht
printf "#define COREBOOT_COMPILE_TIME \"`LANG= date +%T`\"\n" >> $(obj)/build.ht
printf "#define COREBOOT_COMPILE_BY \"$(subst \,@,$(shell PATH=$$PATH:/usr/ucb whoami))\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_HOST \"$(shell hostname -s)\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_DOMAIN \"$(shell test `uname -s` = "Linux" && dnsdomainname || domainname)\"\n" >> $(obj)/build.ht
+ printf "#define COREBOOT_COMPILE_HOST \"$(shell hostname -s 2>/dev/null)\"\n" >> $(obj)/build.ht
+ printf "#define COREBOOT_COMPILE_DOMAIN \"$(shell test `uname -s` = "Linux" && dnsdomainname || domainname 2>/dev/null)\"\n" >> $(obj)/build.ht
printf "#endif\n" >> $(obj)/build.ht
mv $(obj)/build.ht $(obj)/build.h
diff --git a/src/arch/i386/Makefile.inc b/src/arch/i386/Makefile.inc
index 3134ef9cd0..49a9a509fb 100644
--- a/src/arch/i386/Makefile.inc
+++ b/src/arch/i386/Makefile.inc
@@ -42,7 +42,7 @@ endif
#######################################################################
# i386 specific tools
-$(obj)/option_table.h $(obj)/option_table.c $(obj)/arch/i386/../../option_table.c: $(obj)/build_opt_tbl $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout
+$(obj)/option_table.h $(obj)/option_table.c: $(obj)/build_opt_tbl $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout
@printf " OPTION $(subst $(obj)/,,$(@))\n"
$(obj)/build_opt_tbl --config $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout --header $(obj)/option_table.h --option $(obj)/option_table.c
@@ -183,9 +183,11 @@ ifeq ($(CONFIG_ROMCC),y)
ROMCCFLAGS ?= -mcpu=p2 -O2
$(obj)/mainboard/$(MAINBOARDDIR)/failover.inc: $(obj)/romcc $(src)/arch/i386/lib/failover.c
+ printf " ROMCC failover.inc\n"
$(obj)/romcc $(ROMCCFLAGS) --label-prefix=failover $(INCLUDES) $(src)/arch/i386/lib/failover.c -o $@
$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/romcc $(OPTION_TABLE_H) $(obj)/build.h
+ printf " ROMCC romstage.inc\n"
$(obj)/romcc $(ROMCCFLAGS) -include $(obj)/build.h $(INCLUDES) $< -o $@
else
@@ -194,6 +196,7 @@ $(obj)/mainboard/$(MAINBOARDDIR)/ap_romstage.o: $(src)/mainboard/$(MAINBOARDDIR)
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S $(src)/mainboard/$(MAINBOARDDIR)/ap_romstage.c -o $@
$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(OPTION_TABLE_H) $(obj)/build.h
+ printf " GEN romstage.inc\n"
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -include $(obj)/build.h -I$(src) -I. -c -S $< -o $@.tmp1
sed -e 's/\.rodata/.rom.data/g' -e 's/\.text/.section .rom.text/g' $@.tmp1 > $@.tmp
mv $@.tmp $@
diff --git a/util/xcompile/xcompile b/util/xcompile/xcompile
index 65e6e704f7..1ab739b3c0 100644
--- a/util/xcompile/xcompile
+++ b/util/xcompile/xcompile
@@ -75,6 +75,7 @@ if [ "$GCCPREFIX" = "invalid" ]; then
fi
CC="${GCCPREFIX}gcc"
+testcc "$CC" "$CFLAGS-Wa,--divide " && CFLAGS="$CFLAGS-Wa,--divide "
testcc "$CC" "$CFLAGS-fno-stack-protector " && CFLAGS="$CFLAGS-fno-stack-protector "
testcc "$CC" "$CFLAGS-Wl,--build-id=none " && CFLAGS="$CFLAGS-Wl,--build-id=none "