This, ladies and gentlement, is commit #4000.
[coreboot.git] / src / config / Config.lb
1 ## This is Architecture independant part of the makefile
2
3 uses HAVE_OPTION_TABLE
4 uses CONFIG_AP_CODE_IN_CAR
5 uses ASSEMBLER_DEBUG
6
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")
11
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
14
15 if ASSEMBLER_DEBUG
16 makedefine DEBUG_CFLAGS := -g -dA -fverbose-asm
17 end
18
19 makedefine HOSTCFLAGS:= -Os -Wall
20
21 makerule ldscript.ld   
22         depends "ldoptions $(LDSUBSCRIPTS-1)" 
23         action  "echo '/*ldoptions*/' > $@; cat ldoptions >> $@ ; for file in $(LDSUBSCRIPTS-1) ; do echo /\* $$file \*/ >> $@; cat $$file >> $@ ; done"
24 end
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
36 makerule coreboot.strip  
37         depends "coreboot" 
38         action  "$(OBJCOPY) -O binary coreboot coreboot.strip"
39 end
40
41 makerule coreboot.a
42         depends "$(OBJECTS)"
43         action  "rm -f coreboot.a"
44         action  "$(CROSS_COMPILE)ar cr coreboot.a $(OBJECTS)"
45 end
46
47
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 $@ $^"
51 end
52
53 makerule 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  "$(CROSS_COMPILE)nm -n coreboot_ram | sort > coreboot_ram.map"
57 end
58
59 ##
60 ## By default compress the part of coreboot that runs from RAM
61 ##
62 makedefine COREBOOT_RAM-$(CONFIG_COMPRESS):=coreboot_ram.nrv2b
63 makedefine COREBOOT_RAM-$(CONFIG_UNCOMPRESSED):=coreboot_ram.bin
64
65 makerule coreboot_ram.bin 
66         depends "coreboot_ram" 
67         action  "$(OBJCOPY) -O binary $< $@"
68 end
69
70 makerule coreboot_ram.nrv2b 
71         depends "coreboot_ram.bin nrv2b" 
72         action  "./nrv2b e $< $@"
73 end
74
75 makerule coreboot_ram.rom
76         depends "$(COREBOOT_RAM-1)" 
77         action  "cp $(COREBOOT_RAM-1) coreboot_ram.rom"
78 end
79
80 makedefine COREBOOT_APC:=
81
82 if 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  "$(CROSS_COMPILE)ar cr coreboot_apc.a apc_auto.o"
89         end
90
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 $@ $^"
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  "$(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  "$(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
125 end
126
127 makedefine COREBOOT_RAM_ROM:=coreboot_ram.rom
128
129 makerule 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  "$(CROSS_COMPILE)nm -n coreboot | sort > coreboot.map"
133         action  "$(CROSS_COMPILE)objdump -dS coreboot > coreboot.disasm"        
134 end
135
136 # the buildrom tool
137 makerule buildrom 
138         depends "$(TOP)/util/buildrom/buildrom.c" 
139         action  "$(HOSTCC) -o $@ $<"
140 end
141
142 # Force crt0.s (which has build time version code in it to rebuild every time)
143 makedefine .PHONY : crt0.s
144 makerule crt0.s   
145         depends "crt0.S $(CRT0_INCLUDES)" 
146         action  "$(CPP) $(CPPFLAGS) -I. -I$(TOP)/src  $< > $@.new && mv $@.new $@"
147 end
148
149 # generate an assembly listing via -a switch.
150 makerule crt0.o  
151         depends "crt0.s" 
152         action  "$(CC) -Wa,-acdlns -c $(CPU_OPT) -o $@ $< >crt0.disasm"
153 end
154
155 makerule etags   
156         depends "$(SOURCES)" 
157         action  "etags $(SOURCES)"
158 end
159 makerule tags   
160         depends "$(SOURCES)" 
161         action  "ctags $(SOURCES)"
162 end
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"
167 end
168 makerule documentation   
169         depends "corebootDoc.config"
170         action  "doxygen corebootDoc.config"
171 end
172
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.
179 makerule ../romcc   
180         depends "$(TOP)/util/romcc/romcc.c" 
181         action  "$(HOSTCC) -g $(HOSTCFLAGS) $< -o romcc.tmpfile"
182         action  "mv romcc.tmpfile $@"
183 end
184
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 $@" 
188 end
189
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"
193 end
194
195 if HAVE_OPTION_TABLE
196 object ./option_table.o 
197 end
198
199 makerule clean 
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"
212 end
213
214 # do standard config files that the user need not specify
215 # for now, this is just 'lib', but it may be more later. 
216 dir /lib
217 dir /console
218 dir /stream
219 dir /devices
220 dir /pc80
221 dir /boot