1## This is Architecture independant part of the makefile 2 3uses CONFIG_HAVE_OPTION_TABLE 4uses CONFIG_AP_CODE_IN_CAR 5uses CONFIG_ASSEMBLER_DEBUG 6 7makedefine CPP:= $(CC) -x assembler-with-cpp -DASSEMBLY -E 8makedefine LIBGCC_FILE_NAME := $(shell $(CC) -print-libgcc-file-name) 9makedefine GCC ?= $(CC) 10makedefine GCC_INC_DIR := $(shell LC_ALL=C $(GCC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp") 11 12makedefine CPPFLAGS := -I$(TOP)/src/include -I$(TOP)/src/arch/$(CONFIG_ARCH)/include -I$(GCC_INC_DIR) $(CPUFLAGS) 13makedefine 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 14 15if CONFIG_ASSEMBLER_DEBUG 16makedefine DEBUG_CFLAGS := -g -dA -fverbose-asm 17end 18 19makedefine HOSTCFLAGS:= -Os -Wall -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wno-trigraphs -Werror-implicit-function-declaration -Wstrict-aliasing -Wshadow 20 21makerule ldscript.ld 22 depends "ldoptions $(LDSUBSCRIPTS-1)" 23 action "echo 'INCLUDE ldoptions' > $@; for file in $(LDSUBSCRIPTS-1) ; do echo /\* $$file \*/ >> $@; cat $$file >> $@ ; done" 24end 25 26#makerule cpuflags 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\"} }' > $@" 29#end 30 31#makerule ldoptions 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\"; }}' > $@" 34#end 35 36makerule coreboot.rom 37 depends "coreboot" 38 action "$(CONFIG_OBJCOPY) -O binary coreboot coreboot.rom" 39end 40 41makerule coreboot.a 42 depends "$(OBJECTS)" 43 action "rm -f coreboot.a" 44 action "$(CONFIG_CROSS_COMPILE)ar cr coreboot.a $(OBJECTS)" 45end 46 47 48makerule coreboot_ram.o 49 depends "src/arch/$(CONFIG_ARCH)/lib/c_start.o $(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)" 50 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,-\)" 51end 52 53makerule coreboot_ram 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 "$(CONFIG_CROSS_COMPILE)nm -n coreboot_ram | sort > coreboot_ram.map" 57end 58 59## 60## By default compress the part of coreboot that runs from RAM 61## 62makedefine COREBOOT_RAM-$(CONFIG_COMPRESS):=coreboot_ram.nrv2b 63makedefine COREBOOT_RAM-$(CONFIG_UNCOMPRESSED):=coreboot_ram.bin 64 65makerule coreboot_ram.bin 66 depends "coreboot_ram" 67 action "$(CONFIG_OBJCOPY) -O binary $< $@" 68end 69 70makerule coreboot_ram.nrv2b 71 depends "coreboot_ram.bin nrv2b" 72 action "./nrv2b e $< $@" 73end 74 75makerule coreboot_ram.rom 76 depends "$(COREBOOT_RAM-1)" 77 action "cp $(COREBOOT_RAM-1) coreboot_ram.rom" 78end 79 80makedefine COREBOOT_APC:= 81 82if CONFIG_AP_CODE_IN_CAR 83 #for ap code in cache 84 85 makerule coreboot_apc.a 86 depends "apc_auto.o" 87 action "rm -f coreboot_apc.a" 88 action "$(CONFIG_CROSS_COMPILE)ar cr coreboot_apc.a apc_auto.o" 89 end 90 91 makerule coreboot_apc.o 92 depends "src/arch/$(CONFIG_ARCH)/lib/c_start.o coreboot_apc.a" 93 action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^" 94 end 95 96 makerule coreboot_apc 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 "$(CONFIG_CROSS_COMPILE)nm -n coreboot_apc | sort > coreboot_apc.map" 100 end 101 102 ## 103 ## By default compress the part of coreboot that runs from cache as ram 104 ## 105 makedefine COREBOOT_APC-$(CONFIG_COMPRESS):=coreboot_apc.nrv2b 106 makedefine COREBOOT_APC-$(CONFIG_UNCOMPRESSED):=coreboot_apc.bin 107 108 makerule coreboot_apc.bin 109 depends "coreboot_apc" 110 action "$(CONFIG_OBJCOPY) -O binary $< $@" 111 end 112 113 makerule coreboot_apc.nrv2b 114 depends "coreboot_apc.bin nrv2b" 115 action "./nrv2b e $< $@" 116 end 117 118 makerule coreboot_apc.rom 119 depends "$(COREBOOT_APC-1)" 120 action "cp $(COREBOOT_APC-1) coreboot_apc.rom" 121 end 122 123 makedefine COREBOOT_APC:=coreboot_apc.rom 124 125end 126 127makedefine COREBOOT_RAM_ROM:=coreboot_ram.rom 128 129makerule coreboot 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 "$(CONFIG_CROSS_COMPILE)nm -n coreboot | sort > coreboot.map" 133 action "$(CONFIG_CROSS_COMPILE)objdump -dS coreboot > coreboot.disasm" 134end 135 136# Force crt0.s (which has build time version code in it to rebuild every time) 137makedefine .PHONY : crt0.s 138makerule crt0.s 139 depends "crt0.S $(CRT0_INCLUDES)" 140 action "$(CPP) $(CPPFLAGS) -I. -I$(TOP)/src $< > $@.new && mv $@.new $@" 141end 142 143# generate an assembly listing via -a switch. 144makerule crt0.o 145 depends "crt0.s" 146 action "$(CC) -Wa,-acdlns -c $(CONFIG_CPU_OPT) -o $@ $< >crt0.disasm" 147end 148 149makerule etags 150 depends "$(SOURCES)" 151 action "etags $(SOURCES)" 152end 153makerule tags 154 depends "$(SOURCES)" 155 action "ctags $(SOURCES)" 156end 157makerule corebootDoc.config 158 depends "$(TOP)/src/config/corebootDoc.config" 159 action "cat $(TOP)/src/config/corebootDoc.config > corebootDoc.config" 160 action "echo 'INPUT=$(SOURCES)' >> corebootDoc.config" 161end 162makerule documentation 163 depends "corebootDoc.config" 164 action "doxygen corebootDoc.config" 165end 166 167# Yes, the rule doesn't seem to make sense, but multiple images could try to 168# create a romcc binary at the same time, clobbering each other. 169# Our makefile architecture won't allow us to easily have the romcc target 170# in the main makefile, so keep it here and move the race condition winner 171# in place. That way, romcc may get compiled twice, but the binary will always 172# be in a correct and valid state if it exists because the move is atomic. 173makerule ../romcc 174 depends "$(TOP)/util/romcc/romcc.c" 175 action "$(HOSTCC) -g $(HOSTCFLAGS) $< -o romcc.tmpfile" 176 action "mv romcc.tmpfile $@" 177end 178 179makerule build_opt_tbl 180 depends "$(TOP)/util/options/build_opt_tbl.c $(TOP)/src/include/pc80/mc146818rtc.h $(TOP)/src/include/boot/coreboot_tables.h Makefile.settings Makefile" 181 action "$(HOSTCC) $(HOSTCFLAGS) $(CPUFLAGS) $< -o $@" 182end 183 184makerule option_table.h option_table.c 185 depends "build_opt_tbl $(CONFIG_MAINBOARD)/cmos.layout" 186 action "./build_opt_tbl --config $(CONFIG_MAINBOARD)/cmos.layout --header option_table.h --option option_table.c" 187end 188 189if CONFIG_HAVE_OPTION_TABLE 190object ./option_table.o 191end 192 193makerule clean 194 action "rm -f $(OBJECTS)" 195 action "rm -f $(DRIVER)" 196 action "rm -f coreboot.* *~" 197 action "rm -f coreboot" 198 action "rm -f ldscript.ld" 199 action "rm -f a.out *.s *.l *.o *.E *.inc" 200 action "rm -f TAGS tags romcc*" 201 action "rm -f docipl chips.c *chip.c coreboot_apc* coreboot_ram* coreboot_pay*" 202 action "rm -f build_opt_tbl* nrv2b* option_table.c option_table.h crt0.S crt0.disasm" 203 action "rm -f smm smm.elf smm.map smm_bin.c" 204 action "rm -f dsdt.aml dsdt.c" 205 action "rm -f payload" 206end 207 208# do standard config files that the user need not specify 209# for now, this is just 'lib', but it may be more later. 210dir /lib 211dir /console 212dir /devices 213dir /pc80 214dir /boot 215

