5.4.1 updates, hd booting
[etherboot.git] / src / arch / i386 / Makefile
1 ARCH_FORMAT=    elf32-i386
2
3 # For debugging, don't delete intermediates
4 #.SECONDARY:
5
6 LDSCRIPT=       arch/i386/core/etherboot.lds
7 PLDSCRIPT=      arch/i386/core/etherboot.prefix.lds
8
9 LCONFIG+=       -Ui386
10
11 ROMLIMIT=       524288
12 CHECKSIZE=      { read d1; read d1 d2 d3 size d4; [ $$size -gt $(ROMLIMIT) ] &&\
13         { $(RM) $@; echo "ERROR: code size exceeds limit!"; exit 1; }; exit 0; }
14
15 START=  $(BIN)/start32.o $(BIN)/linuxbios.o \
16         $(BIN)/bios.o $(BIN)/console.o $(BIN)/memsizes.o $(BIN)/basemem.o \
17         $(BIN)/hidemem.o $(BIN)/e820mangler.o \
18         $(BIN)/realmode.o $(BIN)/realmode_asm.o \
19         $(BIN)/callbacks.o $(BIN)/pxe_callbacks.o
20
21 SRCS+=  arch/i386/prefix/hdprefix.S
22 SRCS+=  arch/i386/prefix/floppyprefix.S
23 SRCS+=  arch/i386/prefix/unhuf.S
24 SRCS+=  arch/i386/prefix/unnrv2b.S
25 SRCS+=  arch/i386/firmware/pcbios/bios.c
26 SRCS+=  arch/i386/firmware/pcbios/console.c
27 SRCS+=  arch/i386/firmware/pcbios/memsizes.c
28 SRCS+=  arch/i386/firmware/pcbios/basemem.c
29 SRCS+=  arch/i386/firmware/pcbios/hidemem.c
30 SRCS+=  arch/i386/firmware/pcbios/e820mangler.S
31 SRCS+=  arch/i386/prefix/liloprefix.S
32 SRCS+=  arch/i386/prefix/elfprefix.S
33 SRCS+=  arch/i386/prefix/lmelf_prefix.S
34 SRCS+=  arch/i386/prefix/elf_dprefix.S
35 SRCS+=  arch/i386/prefix/lmelf_dprefix.S
36 SRCS+=  arch/i386/prefix/comprefix.S
37 SRCS+=  arch/i386/prefix/exeprefix.S
38 SRCS+=  arch/i386/prefix/pxeprefix.S
39 SRCS+=  arch/i386/prefix/romprefix.S
40
41 SRCS+=  arch/i386/core/init.S
42 SRCS+=  arch/i386/core/start32.S
43 SRCS+=  arch/i386/core/pci_io.c
44 SRCS+=  arch/i386/core/i386_timer.c
45 SRCS+=  arch/i386/core/elf.c
46 SRCS+=  arch/i386/core/cpu.c
47 SRCS+=  arch/i386/core/video_subr.c
48 SRCS+=  arch/i386/core/pic8259.c
49 SRCS+=  arch/i386/core/hooks.c
50 SRCS+=  arch/i386/core/callbacks.c
51 SRCS+=  arch/i386/core/realmode.c
52 SRCS+=  arch/i386/core/realmode_asm.S
53 SRCS+=  arch/i386/core/pxe_callbacks.c
54
55 # ROM loaders: ISA and PCI versions
56 ISAPREFIX=      $(BIN)/isaprefix.o
57 ISAENTRY=       $(BIN)/isaprefix.entry.o
58 ISAEXIT=        $(BIN)/isaprefix.exit.o
59 PCIPREFIX=      $(BIN)/pciprefix.o
60 PCIENTRY=       $(BIN)/pciprefix.entry.o
61 PCIEXIT=        $(BIN)/pciprefix.exit.o
62 # Variables xxx_ROMTYPE are defined by genrules.pl.  ROMENTRY and
63 # ROMEXIT will evaluate to give the correct objects to use.
64 TARGETBASE=$(patsubst $(BIN)/%,%,$(firstword $(subst ., ,$@)))
65 ROMCARD=$(firstword $(subst --, ,$(TARGETBASE)))
66 ROMTYPE=$(firstword $(ROMTYPE_$(ROMCARD)) ISA)
67 romENTRY=$($(ROMTYPE)ENTRY)
68 romEXIT=$($(ROMTYPE)EXIT)
69
70 # Target type for generic prf rules
71 TARGETTYPE=$(patsubst .%,%, $(suffix $(basename $@)))
72 TARGETENTRY=$($(TARGETTYPE)ENTRY)
73 TARGETEXIT=$($(TARGETTYPE)EXIT)
74
75 # Other real-mode entry loaders
76 hdPREFIX=       $(BIN)/hdprefix.o
77 hdENTRY=        $(BIN)/hdprefix.entry.o
78 hdEXIT=         $(BIN)/hdprefix.exit.o
79 dskPREFIX=      $(BIN)/floppyprefix.o
80 dskENTRY=       $(BIN)/floppyprefix.entry.o
81 dskEXIT=        $(BIN)/floppyprefix.exit.o
82 comPREFIX=      $(BIN)/comprefix.o
83 comENTRY=       $(BIN)/comprefix.entry.o
84 comEXIT=        $(BIN)/comprefix.exit.o
85 exePREFIX=      $(BIN)/exeprefix.o
86 exeENTRY=       $(BIN)/exeprefix.entry.o
87 exeEXIT=        $(BIN)/exeprefix.exit.o
88 liloPREFIX=     $(BIN)/liloprefix.o
89 liloENTRY=      $(BIN)/liloprefix.entry.o
90 liloEXIT=       $(BIN)/liloprefix.exit.o
91 bImagePREFIX=   $(BIN)/bImageprefix.o
92 bImageENTRY=    $(BIN)/bImageprefix.entry.o
93 bImageEXIT=     $(BIN)/bImageprefix.exit.o
94 pxePREFIX=      $(BIN)/pxeprefix.o
95 pxeENTRY=       $(BIN)/pxeprefix.entry.o
96 pxeEXIT=        $(BIN)/pxeprefix.exit.o
97 rawPREFIX=      $(BIN)/nullprefix.o
98 rawENTRY=       $(BIN)/nullprefix.entry.o
99 rawEXIT=        $(BIN)/nullprefix.exit.o
100
101 # Protected mode entry loaders
102 elfPREFIX=      $(BIN)/elfprefix.o
103 elfENTRY=       $(BIN)/elfprefix.entry.o
104 elfEXIT=        $(BIN)/elfprefix.exit.o
105 lmelfPREFIX=    $(BIN)/lmelf_prefix.o
106 lmelfENTRY=     $(BIN)/lmelf_prefix.entry.o
107 lmelfEXIT=      $(BIN)/lmelf_prefix.exit.o
108 elfdPREFIX=     $(BIN)/elf_dprefix.o
109 elfdENTRY=      $(BIN)/elf_dprefix.entry.o
110 elfdEXIT=       $(BIN)/elf_dprefix.exit.o
111 lmelfdPREFIX=   $(BIN)/lmelf_dprefix.o
112 lmelfdENTRY=    $(BIN)/lmelf_dprefix.entry.o
113 lmelfdEXIT=     $(BIN)/lmelf_dprefix.exit.o
114
115 include         $(BIN)/Roms
116
117 all:            $(ROMS)
118 allroms:        $(ROMS)
119 allzroms:       $(ROMS)
120 alldsks:        $(EB_DSKS)
121 allzdsks:       $(EB_ZDSKS)
122 alllilos:       $(EB_LILOS)
123 allzlilos:      $(EB_ZLILOS)
124 allbImages:     $(EB_BIMAGES)
125 allbzImages:    $(EB_BZIMAGES)
126 allpxes:        $(EB_PXES)
127 allzpxes:       $(EB_ZPXES)
128 allelfs:        $(EB_ELFS)
129 allzelfs:       $(EB_ZELFS)
130 alllmelfs:      $(EB_LMELFS)
131 allzlmelfs:     $(EB_ZLMELFS)
132 allelfds:       $(EB_ELFDS)
133 allzelfds:      $(EB_ZELFDS)
134 alllmelfds:     $(EB_LMELFDS)
135 allzlmelfds:    $(EB_ZLMELFDS)
136 allcoms:        $(EB_COMS)
137 allexes:        $(EB_EXES)
138 allisos:        $(EB_ISOS)
139 alllisos:       $(EB_LISOS)
140
141 BOBJS+=         $(BIN)/pci_io.o $(BIN)/i386_timer.o
142 BOBJS+=         $(BIN)/elf.o $(BIN)/cpu.o $(BIN)/video_subr.o
143 BOBJS+=         $(BIN)/pic8259.o $(BIN)/hooks.o
144
145 # ROM loaders
146
147 $(ISAPREFIX):   arch/i386/prefix/romprefix.S $(MAKEDEPS)
148         $(CPP) $(CFLAGS) $(LCONFIG) -Ui386 -D ASSEMBLY $< \
149                 | $(AS) $(ASFLAGS) -o $@ 
150
151 $(PCIPREFIX):   arch/i386/prefix/romprefix.S $(MAKEDEPS)
152         $(CPP) -DPCI_PNP_HEADER $(CFLAGS) $(LCONFIG) -Ui386 -D ASSEMBLY $< \
153                 | $(AS) $(ASFLAGS) -o $@ 
154
155 # Prefix splitters
156 $(BIN)/%prefix.entry.o: $(BIN)/%prefix.o $(MAKEDEPS)
157         $(OBJCOPY) -R .text16 $< $@
158
159 $(BIN)/%prefix.exit.o: $(BIN)/%prefix.o $(MAKEDEPS)
160         $(OBJCOPY) -R .prefix $< $@
161
162 # Generic prefix objects
163 PREFIXOBJS = $(BIN)/init.o
164 ZPREFIXOBJS = $(BIN)/init.o $(BIN)/unnrv2b.o
165
166 # Utilities
167 $(BIN)/nrv2b:   util/nrv2b.c
168         $(HOST_CC) -O2 -DENCODE -DDECODE -DMAIN -DVERBOSE -DNDEBUG -DBITSIZE=32 -DENDIAN=0 -o $@ $<
169
170 ZFILELEN = perl util/zfilelen.pl
171
172 # Pattern Rules
173
174 # General for compiling/assembly source files
175
176 $(BIN)/%.o:     arch/i386/core/%.c $(MAKEDEPS)
177         $(CC) $(CFLAGS) -o $@ -c $<
178
179 $(BIN)/%.o:     arch/i386/core/%.S $(MAKEDEPS)
180         $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
181
182 $(BIN)/%.o:     arch/i386/firmware/pcbios/%.c $(MAKEDEPS)
183         $(CC) $(CFLAGS) -o $@ -c $<
184
185 $(BIN)/%.o:     arch/i386/firmware/pcbios/%.S $(MAKEDEPS)
186         $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
187
188 $(BIN)/%.o:     arch/i386/prefix/%.S $(MAKEDEPS)
189         $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
190
191 # general rule for 16bit .o, may be overridden
192 $(BIN)/%.o:     $(BIN)/%.s
193         $(AS) $(ASFLAGS) -o $@ $<
194
195 # general rule for .bin (plain binary loader code), may be overridden
196 $(BIN)/%.bin:   $(BIN)/%.o
197         $(OBJCOPY) -O binary $< $@
198
199 # general rule for .z (compressed binary code), may be overridden
200 # rule for .z is in top level Makefile
201 # Give the directory name, e.g. use $(BIN)/rtl8139.com as the target.
202
203 $(BIN)/%.zo:    $(BIN)/%.zbin arch/i386/core/prefixzdata.lds $(MAKEDEPS)
204         $(LD) -T arch/i386/core/prefixzdata.lds -b binary $< -o $@
205
206 $(BIN)/%.uo:    $(BIN)/%.bin arch/i386/core/prefixudata.lds $(MAKEDEPS)
207         $(LD) -T arch/i386/core/prefixudata.lds -b binary $< -o $@
208
209 # Intermediate prf rules
210
211 %.prf:  %.rt $(PREFIXOBJS) %.rt1.uo %.rt2.uo $(MAKEDEPS)
212         $(MAKE) $(TARGETENTRY)
213         $(LD) $(LDFLAGS) -T $(PLDSCRIPT) $(TARGETENTRY) -R $(subst $(MAKEDEPS),,$^)  -o $@ 
214
215 %.zprf:  %.rt $(ZPREFIXOBJS) %.rt1.uo %.rt2.zo $(MAKEDEPS)
216         $(MAKE) $(TARGETENTRY)
217         $(LD) $(LDFLAGS) -T $(PLDSCRIPT) $(TARGETENTRY) -R $(subst $(MAKEDEPS),,$^)  -o $@ 
218
219 # general rules for normal/compressed ROM images, may be overridden
220 SUFFIXES +=     rom zrom
221
222 $(BIN)/%.rom.rt: $(BIN)/%.rt.o  $(ISAENTRY) $(PCIENTRY) $(ISAEXIT) $(PCIEXIT) $(LDSCRIPT) $(MAKEDEPS)
223         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(romEXIT) $<
224         @$(SIZE) $@ | $(CHECKSIZE)
225
226 $(BIN)/%.rom: $(BIN)/%.rom.prf
227         $(OBJCOPY) -O binary $< $@
228         $(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_$(ROMCARD)) $(MAKEROM_ID_$(ROMCARD)) -i$(IDENT) $@
229
230 $(BIN)/%.zrom: $(BIN)/%.rom.zprf
231         $(OBJCOPY) -O binary $< $@
232         $(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_$(ROMCARD)) $(MAKEROM_ID_$(ROMCARD)) -i$(IDENT) $@
233
234 # general rules for ELF images
235 SUFFIXES +=     elf zelf
236 $(BIN)/%.elf.rt:  $(BIN)/%.rt.o $(elfENTRY) $(elfEXIT) $(LDSCRIPT) $(MAKEDEPS)
237         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(elfEXIT)  $< 
238
239 $(BIN)/%.elf: $(BIN)/%.elf.prf
240         $(OBJCOPY) -O binary $< $@
241
242 $(BIN)/%.zelf: $(BIN)/%.elf.zprf 
243         $(OBJCOPY) -O binary $< $@
244
245 # general rules for Long Mode ELF images
246 SUFFIXES +=     lmelf zlmelf
247 $(BIN)/%.lmelf.rt: $(BIN)/%.rt.o $(lmelfENTRY) $(lmelfEXIT) $(LDSCRIPT) $(MAKEDEPS)
248         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(lmelfEXIT) $<
249
250 $(BIN)/%.lmelf: $(BIN)/%.lmelf.prf
251         $(OBJCOPY) -O binary $< $@
252
253 $(BIN)/%.zlmelf: $(BIN)/%.lmelf.zprf
254         $(OBJCOPY) -O binary $< $@
255
256 # general rules for ELF dynamic images
257 SUFFIXES +=     elfd zelfd
258 $(BIN)/%.elfd.rt: $(BIN)/%.rt.o $(elfdENTRY) $(elfdEXIT) $(LDSCRIPT) $(MAKEDEPS)
259         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(elfdEXIT) $<
260
261 $(BIN)/%.elfd: $(BIN)/%.elfd.prf
262         $(OBJCOPY) -O binary $< $@
263
264 $(BIN)/%.zelfd: $(BIN)/%.elfd.zprf
265         $(OBJCOPY) -O binary $< $@
266
267 # general rules for Long Mode ELF dynamic images
268 SUFFIXES +=     lmelfd zlmelfd
269 $(BIN)/%.lmelfd.rt: $(BIN)/%.rt.o $(lmelfdENTRY) $(lmelfdEXIT) $(LDSCRIPT) $(MAKEDEPS)
270         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(lmelfdEXIT) $<
271
272 $(BIN)/%.lmelfd: $(BIN)/%.lmelfd.prf
273         $(OBJCOPY) -O binary $< $@
274
275 $(BIN)/%.zlmelfd: $(BIN)/%.lmelfd.zprf
276         $(OBJCOPY) -O binary $< $@
277
278 # rules to generate a DOS loadable .com executable
279 SUFFIXES +=     com
280 $(BIN)/%.com.rt: $(BIN)/%.rt.o $(comENTRY) $(comEXIT) $(LDSCRIPT) $(MAKEDEPS)
281         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(comEXIT)
282
283 $(BIN)/%.com: $(BIN)/%.com.zprf
284         $(OBJCOPY) -O binary $< $@
285
286 # rules to generate a DOS loadable .exe executable
287 SUFFIXES +=     exe
288 $(BIN)/%.exe.rt: $(BIN)/%.rt.o $(exeENTRY) $(exeEXIT) $(LDSCRIPT) $(MAKEDEPS)
289         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(exeEXIT)
290         @$(SIZE) $@ | $(CHECKSIZE)
291
292 $(BIN)/%.exe: $(BIN)/%.exe.prf
293         $(OBJCOPY) -O binary $< $@
294
295 # rules to make a LILO loadable image
296 SUFFIXES +=     lilo zlilo
297
298 $(BIN)/%.lilo.rt: $(BIN)/%.rt.o $(liloENTRY) $(liloEXIT) $(LDSCRIPT) $(MAKEDEPS)
299         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(liloEXIT)
300         @$(SIZE) $@ | $(CHECKSIZE)
301
302 $(BIN)/%.lilo: $(BIN)/%.lilo.prf
303         $(OBJCOPY) -O binary $< $@
304
305 $(BIN)/%.zlilo: $(BIN)/%.lilo.zprf
306         $(OBJCOPY) -O binary $< $@
307
308 # rules to make big linux boot protocol image
309 SUFFIXES +=     bImage bzImage
310
311 $(BIN)/%.bImage.rt: $(BIN)/%.rt.o $(bImageENTRY) $(bImageEXIT) $(LDSCRIPT) $(MAKEDEPS)
312         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(bImageEXIT)
313
314 $(BIN)/%.bImage: $(BIN)/%.bImage.prf
315         $(OBJCOPY) -O binary $< $@
316
317 $(BIN)/%.bzImage: $(BIN)/%.bImage.zprf
318         $(OBJCOPY) -O binary $< $@
319
320
321 # rules to generate a PXE loadable image
322 SUFFIXES +=     pxe zpxe
323
324 $(BIN)/%.pxe.rt: $(BIN)/%.rt.o $(pxeENTRY) $(pxeEXIT) $(LDSCRIPT) $(MAKEDEPS)
325         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(pxeEXIT)
326         @$(SIZE) $@ | $(CHECKSIZE)
327
328 $(BIN)/%.pxe: $(BIN)/%.pxe.prf
329         $(OBJCOPY) -O binary $< $@
330
331 $(BIN)/%.zpxe: $(BIN)/%.pxe.zprf
332         $(OBJCOPY) -O binary $< $@
333
334 # rules to generate the .dsk/.zdsk floppy images
335 SUFFIXES +=     dsk zdsk
336
337 $(BIN)/%.dsk.rt: $(BIN)/%.rt.o $(dskENTRY) $(dskEXIT) $(LDSCRIPT) $(MAKEDEPS)
338         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(dskEXIT)
339         @$(SIZE) $@ | $(CHECKSIZE)
340
341 $(BIN)/%.dsk: $(BIN)/%.dsk.prf
342         $(OBJCOPY) -O binary $< $@
343
344 $(BIN)/%.zdsk: $(BIN)/%.dsk.zprf
345         $(OBJCOPY) -O binary $< $@
346
347 # rules to generate the .hd/.zhd harddisk images
348 SUFFIXES +=     hd zhd
349
350 $(BIN)/%.hd.rt: $(BIN)/%.rt.o $(hdENTRY) $(hdEXIT) $(LDSCRIPT) $(MAKEDEPS)
351         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(hdEXIT)
352         @$(SIZE) $@ | $(CHECKSIZE)
353
354 $(BIN)/%.hd: $(BIN)/%.hd.prf
355         $(OBJCOPY) -O binary $< $@
356
357 $(BIN)/%.zhd: $(BIN)/%.hd.zprf
358         $(OBJCOPY) -O binary $< $@
359
360 # rules to write the .dsk/.zdsk image onto a blank floppy
361 SUFFIXES +=     fd0 zfd0
362 %.fd0:  %.dsk
363         dd if=$< bs=512 conv=sync of=/dev/fd0
364         sync
365
366 %.zfd0: %.zdsk
367         dd if=$< bs=512 conv=sync of=/dev/fd0
368         sync
369
370 # rules to create raw executable images
371 SUFFIXES +=     raw zraw
372 $(BIN)/%.raw.rt: $(BIN)/%.rt.o $(rawENTRY) $(rawEXIT) $(LDSCRIPT) $(MAKEDEPS)
373         $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(rawEXIT)
374
375 $(BIN)/%.raw: $(BIN)/%.raw.prf
376         $(OBJCOPY) -O binary $< $@
377
378 $(BIN)/%.zraw: $(BIN)/%.raw.zprf
379         $(OBJCOPY) -O binary $< $@
380
381 # rule to make a non-emulation ISO boot image
382 SUFFIXES +=     iso
383 %.iso:  util/geniso %.zlilo
384         ISOLINUX_BIN=${ISOLINUX_BIN} bash util/geniso $*.iso $*.zlilo
385
386 # rule to make a floppy emulation ISO boot image
387 SUFFIXES +=     liso
388 %.liso: util/genliso %.zlilo
389         bash util/genliso $*.liso $*.zlilo
390