| ## This is Architecture independant part of the makefile |
| |
| uses CONFIG_HAVE_OPTION_TABLE |
| uses CONFIG_AP_CODE_IN_CAR |
| uses CONFIG_ASSEMBLER_DEBUG |
| |
| makedefine CPP:= $(CC) -x assembler-with-cpp -DASSEMBLY -E |
| makedefine LIBGCC_FILE_NAME := $(shell $(CC) -print-libgcc-file-name) |
| makedefine GCC ?= $(CC) |
| makedefine GCC_INC_DIR := $(shell LC_ALL=C $(GCC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp") |
| |
| makedefine CPPFLAGS := -I$(TOP)/src/include -I$(TOP)/src/arch/$(CONFIG_ARCH)/include -I$(GCC_INC_DIR) $(CPUFLAGS) |
| makedefine CFLAGS = $(CONFIG_CPU_OPT) $(DISTRO_CFLAGS) $(CPPFLAGS) -Os -nostdinc -nostdlib -Wall -Wundef -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wno-trigraphs -Werror-implicit-function-declaration -Wstrict-aliasing -Wshadow -fno-common -ffreestanding -fno-builtin -fomit-frame-pointer |
| |
| if CONFIG_ASSEMBLER_DEBUG |
| makedefine DEBUG_CFLAGS := -g -dA -fverbose-asm |
| end |
| |
| makedefine HOSTCFLAGS:= -Os -Wall -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wno-trigraphs -Werror-implicit-function-declaration -Wstrict-aliasing -Wshadow |
| |
| makerule ldscript.ld |
| depends "ldoptions $(LDSUBSCRIPTS-1)" |
| action "echo 'INCLUDE ldoptions' > $@; for file in $(LDSUBSCRIPTS-1) ; do echo /\* $$file \*/ >> $@; cat $$file >> $@ ; done" |
| end |
| |
| #makerule cpuflags |
| # depends "Makefile.settings" |
| # action "perl -e 'print \"CPUFLAGS :=\n\"; foreach $$var (split(\" \", $$ENV{VARIABLES})) { if (exists($$ENV{$$var})) { print \"CPUFLAGS += -D$$var\" . (length($$ENV{$$var})?\"=\x27$$ENV{$$var}\x27\":\"\") .\"\n\"} else { print \"CPUFLAGS += -U$$var\n\"} }' > $@" |
| #end |
| |
| #makerule ldoptions |
| # depends "Makefile.settings" |
| # action "perl -e 'foreach $$var (split(\" \", $$ENV{VARIABLES})) { if ($$ENV{$$var} =~ m/^(0x[0-9a-fA-F]+|0[0-7]+|[0-9]+)$$/) { print \"$$var = $$ENV{$$var};\n\"; }}' > $@" |
| #end |
| |
| makerule coreboot.strip |
| depends "coreboot" |
| action "$(CONFIG_OBJCOPY) -O binary coreboot coreboot.strip" |
| end |
| |
| makerule coreboot.a |
| depends "$(OBJECTS)" |
| action "rm -f coreboot.a" |
| action "$(CONFIG_CROSS_COMPILE)ar cr coreboot.a $(OBJECTS)" |
| end |
| |
| |
| makerule coreboot_ram.o |
| depends "src/arch/$(CONFIG_ARCH)/lib/c_start.o $(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)" |
| action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ src/arch/$(CONFIG_ARCH)/lib/c_start.o $(DRIVER) -Wl,--wrap,__divdi3 -Wl,--wrap,__udivdi3 -Wl,--wrap,__moddi3 -Wl,--wrap,__umoddi3 -Wl,-\( coreboot.a $(LIBGCC_FILE_NAME) -Wl,-\)" |
| end |
| |
| makerule coreboot_ram |
| depends "coreboot_ram.o $(TOP)/src/config/coreboot_ram.ld ldoptions" |
| action "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/coreboot_ram.ld coreboot_ram.o" |
| action "$(CONFIG_CROSS_COMPILE)nm -n coreboot_ram | sort > coreboot_ram.map" |
| end |
| |
| ## |
| ## By default compress the part of coreboot that runs from RAM |
| ## |
| makedefine COREBOOT_RAM-$(CONFIG_COMPRESS):=coreboot_ram.nrv2b |
| makedefine COREBOOT_RAM-$(CONFIG_UNCOMPRESSED):=coreboot_ram.bin |
| |
| makerule coreboot_ram.bin |
| depends "coreboot_ram" |
| action "$(CONFIG_OBJCOPY) -O binary $< $@" |
| end |
| |
| makerule coreboot_ram.nrv2b |
| depends "coreboot_ram.bin nrv2b" |
| action "./nrv2b e $< $@" |
| end |
| |
| makerule coreboot_ram.rom |
| depends "$(COREBOOT_RAM-1)" |
| action "cp $(COREBOOT_RAM-1) coreboot_ram.rom" |
| end |
| |
| makedefine COREBOOT_APC:= |
| |
| if CONFIG_AP_CODE_IN_CAR |
| #for ap code in cache |
| |
| makerule coreboot_apc.a |
| depends "apc_auto.o" |
| action "rm -f coreboot_apc.a" |
| action "$(CONFIG_CROSS_COMPILE)ar cr coreboot_apc.a apc_auto.o" |
| end |
| |
| makerule coreboot_apc.o |
| depends "src/arch/$(CONFIG_ARCH)/lib/c_start.o coreboot_apc.a" |
| action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^" |
| end |
| |
| makerule coreboot_apc |
| depends "coreboot_apc.o $(TOP)/src/config/coreboot_apc.ld ldoptions" |
| action "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/coreboot_apc.ld coreboot_apc.o" |
| action "$(CONFIG_CROSS_COMPILE)nm -n coreboot_apc | sort > coreboot_apc.map" |
| end |
| |
| ## |
| ## By default compress the part of coreboot that runs from cache as ram |
| ## |
| makedefine COREBOOT_APC-$(CONFIG_COMPRESS):=coreboot_apc.nrv2b |
| makedefine COREBOOT_APC-$(CONFIG_UNCOMPRESSED):=coreboot_apc.bin |
| |
| makerule coreboot_apc.bin |
| depends "coreboot_apc" |
| action "$(CONFIG_OBJCOPY) -O binary $< $@" |
| end |
| |
| makerule coreboot_apc.nrv2b |
| depends "coreboot_apc.bin nrv2b" |
| action "./nrv2b e $< $@" |
| end |
| |
| makerule coreboot_apc.rom |
| depends "$(COREBOOT_APC-1)" |
| action "cp $(COREBOOT_APC-1) coreboot_apc.rom" |
| end |
| |
| makedefine COREBOOT_APC:=coreboot_apc.rom |
| |
| end |
| |
| makedefine COREBOOT_RAM_ROM:=coreboot_ram.rom |
| |
| makerule coreboot |
| depends "crt0.o $(INIT-OBJECTS) $(COREBOOT_APC) $(COREBOOT_RAM_ROM) ldscript.ld" |
| action "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T ldscript.ld crt0.o $(INIT-OBJECTS)" |
| action "$(CONFIG_CROSS_COMPILE)nm -n coreboot | sort > coreboot.map" |
| action "$(CONFIG_CROSS_COMPILE)objdump -dS coreboot > coreboot.disasm" |
| end |
| |
| # the buildrom tool |
| makerule buildrom |
| depends "$(TOP)/util/buildrom/buildrom.c" |
| action "$(HOSTCC) -o $@ $<" |
| end |
| |
| # Force crt0.s (which has build time version code in it to rebuild every time) |
| makedefine .PHONY : crt0.s |
| makerule crt0.s |
| depends "crt0.S $(CRT0_INCLUDES)" |
| action "$(CPP) $(CPPFLAGS) -I. -I$(TOP)/src $< > $@.new && mv $@.new $@" |
| end |
| |
| # generate an assembly listing via -a switch. |
| makerule crt0.o |
| depends "crt0.s" |
| action "$(CC) -Wa,-acdlns -c $(CONFIG_CPU_OPT) -o $@ $< >crt0.disasm" |
| end |
| |
| makerule etags |
| depends "$(SOURCES)" |
| action "etags $(SOURCES)" |
| end |
| makerule tags |
| depends "$(SOURCES)" |
| action "ctags $(SOURCES)" |
| end |
| makerule corebootDoc.config |
| depends "$(TOP)/src/config/corebootDoc.config" |
| action "cat $(TOP)/src/config/corebootDoc.config > corebootDoc.config" |
| action "echo 'INPUT=$(SOURCES)' >> corebootDoc.config" |
| end |
| makerule documentation |
| depends "corebootDoc.config" |
| action "doxygen corebootDoc.config" |
| end |
| |
| # Yes, the rule doesn't seem to make sense, but multiple images could try to |
| # create a romcc binary at the same time, clobbering each other. |
| # Our makefile architecture won't allow us to easily have the romcc target |
| # in the main makefile, so keep it here and move the race condition winner |
| # in place. That way, romcc may get compiled twice, but the binary will always |
| # be in a correct and valid state if it exists because the move is atomic. |
| makerule ../romcc |
| depends "$(TOP)/util/romcc/romcc.c" |
| action "$(HOSTCC) -g $(HOSTCFLAGS) $< -o romcc.tmpfile" |
| action "mv romcc.tmpfile $@" |
| end |
| |
| makerule build_opt_tbl |
| depends "$(TOP)/util/options/build_opt_tbl.c $(TOP)/src/include/pc80/mc146818rtc.h $(TOP)/src/include/boot/coreboot_tables.h Makefile.settings Makefile" |
| action "$(HOSTCC) $(HOSTCFLAGS) $(CPUFLAGS) $< -o $@" |
| end |
| |
| makerule option_table.h option_table.c |
| depends "build_opt_tbl $(CONFIG_MAINBOARD)/cmos.layout" |
| action "./build_opt_tbl --config $(CONFIG_MAINBOARD)/cmos.layout --header option_table.h --option option_table.c" |
| end |
| |
| if CONFIG_HAVE_OPTION_TABLE |
| object ./option_table.o |
| end |
| |
| makerule clean |
| action "rm -f $(OBJECTS)" |
| action "rm -f $(DRIVER)" |
| action "rm -f coreboot.* *~" |
| action "rm -f coreboot" |
| action "rm -f ldscript.ld" |
| action "rm -f a.out *.s *.l *.o *.E *.inc" |
| action "rm -f TAGS tags romcc*" |
| action "rm -f docipl buildrom* chips.c *chip.c coreboot_apc* coreboot_ram* coreboot_pay*" |
| action "rm -f build_opt_tbl* nrv2b* option_table.c option_table.h crt0.S crt0.disasm" |
| action "rm -f smm smm.elf smm.map smm_bin.c" |
| action "rm -f dsdt.aml dsdt.c" |
| action "rm -f payload" |
| end |
| |
| # do standard config files that the user need not specify |
| # for now, this is just 'lib', but it may be more later. |
| dir /lib |
| dir /console |
| dir /stream |
| dir /devices |
| dir /pc80 |
| dir /boot |