1 ## This is Architecture independant part of the makefile
4 uses CONFIG_AP_CODE_IN_CAR
7 makedefine CPP:= $(CC) -x assembler-with-cpp -DASSEMBLY -E
8 makedefine LIBGCC_FILE_NAME := $(shell $(CC) -print-libgcc-file-name)
9 makedefine GCC ?= $(CC)
10 makedefine GCC_INC_DIR := $(shell LC_ALL=C $(GCC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp")
12 makedefine CPPFLAGS := -I$(TOP)/src/include -I$(TOP)/src/arch/$(ARCH)/include -I$(GCC_INC_DIR) $(CPUFLAGS)
13 makedefine CFLAGS := $(CPU_OPT) $(DISTRO_CFLAGS) $(CPPFLAGS) -Os -nostdinc -nostdlib -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -Werror-implicit-function-declaration -Wstrict-aliasing -Wshadow -fno-common -ffreestanding -fno-builtin -fomit-frame-pointer
16 makedefine DEBUG_CFLAGS := -g -dA -fverbose-asm
19 makedefine HOSTCFLAGS:= -Os -Wall
22 depends "ldoptions $(LDSUBSCRIPTS-1)"
23 action "echo '/*ldoptions*/' > $@; cat ldoptions >> $@ ; for file in $(LDSUBSCRIPTS-1) ; do echo /\* $$file \*/ >> $@; cat $$file >> $@ ; done"
27 # depends "Makefile.settings"
28 # 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\"} }' > $@"
32 # depends "Makefile.settings"
33 # 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\"; }}' > $@"
36 makerule coreboot.strip
38 action "$(OBJCOPY) -O binary coreboot coreboot.strip"
43 action "rm -f coreboot.a"
44 action "$(CROSS_COMPILE)ar cr coreboot.a $(OBJECTS)"
48 makerule coreboot_ram.o
49 depends "src/arch/$(ARCH)/lib/c_start.o $(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)"
50 action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
54 depends "coreboot_ram.o $(TOP)/src/config/coreboot_ram.ld ldoptions"
55 action "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/coreboot_ram.ld coreboot_ram.o"
56 action "$(CROSS_COMPILE)nm -n coreboot_ram | sort > coreboot_ram.map"
60 ## By default compress the part of coreboot that runs from RAM
62 makedefine COREBOOT_RAM-$(CONFIG_COMPRESS):=coreboot_ram.nrv2b
63 makedefine COREBOOT_RAM-$(CONFIG_UNCOMPRESSED):=coreboot_ram.bin
65 makerule coreboot_ram.bin
66 depends "coreboot_ram"
67 action "$(OBJCOPY) -O binary $< $@"
70 makerule coreboot_ram.nrv2b
71 depends "coreboot_ram.bin nrv2b"
72 action "./nrv2b e $< $@"
75 makerule coreboot_ram.rom
76 depends "$(COREBOOT_RAM-1)"
77 action "cp $(COREBOOT_RAM-1) coreboot_ram.rom"
80 makedefine COREBOOT_APC:=
82 if CONFIG_AP_CODE_IN_CAR
85 makerule coreboot_apc.a
87 action "rm -f coreboot_apc.a"
88 action "$(CROSS_COMPILE)ar cr coreboot_apc.a apc_auto.o"
91 makerule coreboot_apc.o
92 depends "src/arch/$(ARCH)/lib/c_start.o coreboot_apc.a $(LIBGCC_FILE_NAME)"
93 action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
97 depends "coreboot_apc.o $(TOP)/src/config/coreboot_apc.ld ldoptions"
98 action "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/coreboot_apc.ld coreboot_apc.o"
99 action "$(CROSS_COMPILE)nm -n coreboot_apc | sort > coreboot_apc.map"
103 ## By default compress the part of coreboot that runs from cache as ram
105 makedefine COREBOOT_APC-$(CONFIG_COMPRESS):=coreboot_apc.nrv2b
106 makedefine COREBOOT_APC-$(CONFIG_UNCOMPRESSED):=coreboot_apc.bin
108 makerule coreboot_apc.bin
109 depends "coreboot_apc"
110 action "$(OBJCOPY) -O binary $< $@"
113 makerule coreboot_apc.nrv2b
114 depends "coreboot_apc.bin nrv2b"
115 action "./nrv2b e $< $@"
118 makerule coreboot_apc.rom
119 depends "$(COREBOOT_APC-1)"
120 action "cp $(COREBOOT_APC-1) coreboot_apc.rom"
123 makedefine COREBOOT_APC:=coreboot_apc.rom
127 makedefine COREBOOT_RAM_ROM:=coreboot_ram.rom
130 depends "crt0.o $(INIT-OBJECTS) $(COREBOOT_APC) $(COREBOOT_RAM_ROM) ldscript.ld"
131 action "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T ldscript.ld crt0.o $(INIT-OBJECTS)"
132 action "$(CROSS_COMPILE)nm -n coreboot | sort > coreboot.map"
133 action "$(CROSS_COMPILE)objdump -dS coreboot > coreboot.disasm"
138 depends "$(TOP)/util/buildrom/buildrom.c"
139 action "$(HOSTCC) -o $@ $<"
142 # Force crt0.s (which has build time version code in it to rebuild every time)
143 makedefine .PHONY : crt0.s
145 depends "crt0.S $(CRT0_INCLUDES)"
146 action "$(CPP) $(CPPFLAGS) -I. -I$(TOP)/src $< > $@.new && mv $@.new $@"
149 # generate an assembly listing via -a switch.
152 action "$(CC) -Wa,-acdlns -c $(CPU_OPT) -o $@ $< >crt0.disasm"
157 action "etags $(SOURCES)"
161 action "ctags $(SOURCES)"
163 makerule corebootDoc.config
164 depends "$(TOP)/src/config/corebootDoc.config"
165 action "cat $(TOP)/src/config/corebootDoc.config > corebootDoc.config"
166 action "echo 'INPUT=$(SOURCES)' >> corebootDoc.config"
168 makerule documentation
169 depends "corebootDoc.config"
170 action "doxygen corebootDoc.config"
173 # Yes, the rule doesn't seem to make sense, but multiple images could try to
174 # create a romcc binary at the same time, clobbering each other.
175 # Our makefile architecture won't allow us to easily have the romcc target
176 # in the main makefile, so keep it here and move the race condition winner
177 # in place. That way, romcc may get compiled twice, but the binary will always
178 # be in a correct and valid state if it exists because the move is atomic.
180 depends "$(TOP)/util/romcc/romcc.c"
181 action "$(HOSTCC) -g $(HOSTCFLAGS) $< -o romcc.tmpfile"
182 action "mv romcc.tmpfile $@"
185 makerule build_opt_tbl
186 depends "$(TOP)/util/options/build_opt_tbl.c $(TOP)/src/include/pc80/mc146818rtc.h $(TOP)/src/include/boot/coreboot_tables.h Makefile.settings Makefile"
187 action "$(HOSTCC) $(HOSTCFLAGS) $(CPUFLAGS) $< -o $@"
190 makerule option_table.h option_table.c
191 depends "build_opt_tbl $(MAINBOARD)/cmos.layout"
192 action "./build_opt_tbl --config $(MAINBOARD)/cmos.layout --header option_table.h --option option_table.c"
196 object ./option_table.o
200 action "rm -f $(OBJECTS)"
201 action "rm -f $(DRIVER)"
202 action "rm -f coreboot.* *~"
203 action "rm -f coreboot"
204 action "rm -f ldscript.ld"
205 action "rm -f a.out *.s *.l *.o *.E *.inc"
206 action "rm -f TAGS tags romcc*"
207 action "rm -f docipl buildrom* chips.c *chip.c coreboot_apc* coreboot_ram* coreboot_pay*"
208 action "rm -f build_opt_tbl* nrv2b* option_table.c option_table.h crt0.S crt0.disasm"
209 action "rm -f smm smm.elf smm.map smm_bin.c"
210 action "rm -f dsdt.aml dsdt.c"
211 action "rm -f payload"
214 # do standard config files that the user need not specify
215 # for now, this is just 'lib', but it may be more later.