1 ARCH_FORMAT= elf32-i386
3 # For debugging, don't delete intermediates
6 LDSCRIPT= arch/i386/core/etherboot.lds
7 PLDSCRIPT= arch/i386/core/etherboot.prefix.lds
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; }
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
21 SRCS+= arch/i386/prefix/floppyprefix.S
22 SRCS+= arch/i386/prefix/unhuf.S
23 SRCS+= arch/i386/prefix/unnrv2b.S
24 SRCS+= arch/i386/firmware/pcbios/bios.c
25 SRCS+= arch/i386/firmware/pcbios/console.c
26 SRCS+= arch/i386/firmware/pcbios/memsizes.c
27 SRCS+= arch/i386/firmware/pcbios/basemem.c
28 SRCS+= arch/i386/firmware/pcbios/hidemem.c
29 SRCS+= arch/i386/firmware/pcbios/e820mangler.S
30 SRCS+= arch/i386/prefix/liloprefix.S
31 SRCS+= arch/i386/prefix/elfprefix.S
32 SRCS+= arch/i386/prefix/lmelf_prefix.S
33 SRCS+= arch/i386/prefix/elf_dprefix.S
34 SRCS+= arch/i386/prefix/lmelf_dprefix.S
35 SRCS+= arch/i386/prefix/comprefix.S
36 SRCS+= arch/i386/prefix/exeprefix.S
37 SRCS+= arch/i386/prefix/pxeprefix.S
38 SRCS+= arch/i386/prefix/romprefix.S
40 SRCS+= arch/i386/core/init.S
41 SRCS+= arch/i386/core/start32.S
42 SRCS+= arch/i386/core/pci_io.c
43 SRCS+= arch/i386/core/i386_timer.c
44 SRCS+= arch/i386/core/elf.c
45 SRCS+= arch/i386/core/cpu.c
46 SRCS+= arch/i386/core/video_subr.c
47 SRCS+= arch/i386/core/pic8259.c
48 SRCS+= arch/i386/core/hooks.c
49 SRCS+= arch/i386/core/callbacks.c
50 SRCS+= arch/i386/core/realmode.c
51 SRCS+= arch/i386/core/realmode_asm.S
52 SRCS+= arch/i386/core/pxe_callbacks.c
54 # ROM loaders: ISA and PCI versions
55 ISAPREFIX= $(BIN)/isaprefix.o
56 ISAENTRY= $(BIN)/isaprefix.entry.o
57 ISAEXIT= $(BIN)/isaprefix.exit.o
58 PCIPREFIX= $(BIN)/pciprefix.o
59 PCIENTRY= $(BIN)/pciprefix.entry.o
60 PCIEXIT= $(BIN)/pciprefix.exit.o
61 # Variables xxx_ROMTYPE are defined by genrules.pl. ROMENTRY and
62 # ROMEXIT will evaluate to give the correct objects to use.
63 TARGETBASE=$(patsubst $(BIN)/%,%,$(firstword $(subst ., ,$@)))
64 ROMCARD=$(firstword $(subst --, ,$(TARGETBASE)))
65 ROMTYPE=$(firstword $(ROMTYPE_$(ROMCARD)) ISA)
66 romENTRY=$($(ROMTYPE)ENTRY)
67 romEXIT=$($(ROMTYPE)EXIT)
69 # Target type for generic prf rules
70 TARGETTYPE=$(patsubst .%,%, $(suffix $(basename $@)))
71 TARGETENTRY=$($(TARGETTYPE)ENTRY)
72 TARGETEXIT=$($(TARGETTYPE)EXIT)
74 # Other real-mode entry loaders
75 dskPREFIX= $(BIN)/floppyprefix.o
76 dskENTRY= $(BIN)/floppyprefix.entry.o
77 dskEXIT= $(BIN)/floppyprefix.exit.o
78 comPREFIX= $(BIN)/comprefix.o
79 comENTRY= $(BIN)/comprefix.entry.o
80 comEXIT= $(BIN)/comprefix.exit.o
81 exePREFIX= $(BIN)/exeprefix.o
82 exeENTRY= $(BIN)/exeprefix.entry.o
83 exeEXIT= $(BIN)/exeprefix.exit.o
84 liloPREFIX= $(BIN)/liloprefix.o
85 liloENTRY= $(BIN)/liloprefix.entry.o
86 liloEXIT= $(BIN)/liloprefix.exit.o
87 bImagePREFIX= $(BIN)/bImageprefix.o
88 bImageENTRY= $(BIN)/bImageprefix.entry.o
89 bImageEXIT= $(BIN)/bImageprefix.exit.o
90 pxePREFIX= $(BIN)/pxeprefix.o
91 pxeENTRY= $(BIN)/pxeprefix.entry.o
92 pxeEXIT= $(BIN)/pxeprefix.exit.o
93 rawPREFIX= $(BIN)/nullprefix.o
94 rawENTRY= $(BIN)/nullprefix.entry.o
95 rawEXIT= $(BIN)/nullprefix.exit.o
97 # Protected mode entry loaders
98 elfPREFIX= $(BIN)/elfprefix.o
99 elfENTRY= $(BIN)/elfprefix.entry.o
100 elfEXIT= $(BIN)/elfprefix.exit.o
101 lmelfPREFIX= $(BIN)/lmelf_prefix.o
102 lmelfENTRY= $(BIN)/lmelf_prefix.entry.o
103 lmelfEXIT= $(BIN)/lmelf_prefix.exit.o
104 elfdPREFIX= $(BIN)/elf_dprefix.o
105 elfdENTRY= $(BIN)/elf_dprefix.entry.o
106 elfdEXIT= $(BIN)/elf_dprefix.exit.o
107 lmelfdPREFIX= $(BIN)/lmelf_dprefix.o
108 lmelfdENTRY= $(BIN)/lmelf_dprefix.entry.o
109 lmelfdEXIT= $(BIN)/lmelf_dprefix.exit.o
117 allzdsks: $(EB_ZDSKS)
118 alllilos: $(EB_LILOS)
119 allzlilos: $(EB_ZLILOS)
120 allbImages: $(EB_BIMAGES)
121 allbzImages: $(EB_BZIMAGES)
123 allzpxes: $(EB_ZPXES)
125 allzelfs: $(EB_ZELFS)
126 alllmelfs: $(EB_LMELFS)
127 allzlmelfs: $(EB_ZLMELFS)
128 allelfds: $(EB_ELFDS)
129 allzelfds: $(EB_ZELFDS)
130 alllmelfds: $(EB_LMELFDS)
131 allzlmelfds: $(EB_ZLMELFDS)
135 alllisos: $(EB_LISOS)
137 BOBJS+= $(BIN)/pci_io.o $(BIN)/i386_timer.o
138 BOBJS+= $(BIN)/elf.o $(BIN)/cpu.o $(BIN)/video_subr.o
139 BOBJS+= $(BIN)/pic8259.o $(BIN)/hooks.o
143 $(ISAPREFIX): arch/i386/prefix/romprefix.S $(MAKEDEPS)
144 $(CPP) $(CFLAGS) $(LCONFIG) -Ui386 -D ASSEMBLY $< \
145 | $(AS) $(ASFLAGS) -o $@
147 $(PCIPREFIX): arch/i386/prefix/romprefix.S $(MAKEDEPS)
148 $(CPP) -DPCI_PNP_HEADER $(CFLAGS) $(LCONFIG) -Ui386 -D ASSEMBLY $< \
149 | $(AS) $(ASFLAGS) -o $@
152 $(BIN)/%prefix.entry.o: $(BIN)/%prefix.o $(MAKEDEPS)
153 $(OBJCOPY) -R .text16 $< $@
155 $(BIN)/%prefix.exit.o: $(BIN)/%prefix.o $(MAKEDEPS)
156 $(OBJCOPY) -R .prefix $< $@
158 # Generic prefix objects
159 PREFIXOBJS = $(BIN)/init.o
160 ZPREFIXOBJS = $(BIN)/init.o $(BIN)/unnrv2b.o
163 $(BIN)/nrv2b: util/nrv2b.c
164 $(HOST_CC) -O2 -DENCODE -DDECODE -DMAIN -DVERBOSE -DNDEBUG -DBITSIZE=32 -DENDIAN=0 -o $@ $<
166 ZFILELEN = perl util/zfilelen.pl
170 # General for compiling/assembly source files
172 $(BIN)/%.o: arch/i386/core/%.c $(MAKEDEPS)
173 $(CC) $(CFLAGS) -o $@ -c $<
175 $(BIN)/%.o: arch/i386/core/%.S $(MAKEDEPS)
176 $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
178 $(BIN)/%.o: arch/i386/firmware/pcbios/%.c $(MAKEDEPS)
179 $(CC) $(CFLAGS) -o $@ -c $<
181 $(BIN)/%.o: arch/i386/firmware/pcbios/%.S $(MAKEDEPS)
182 $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
184 $(BIN)/%.o: arch/i386/prefix/%.S $(MAKEDEPS)
185 $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
187 # general rule for 16bit .o, may be overridden
188 $(BIN)/%.o: $(BIN)/%.s
189 $(AS) $(ASFLAGS) -o $@ $<
191 # general rule for .bin (plain binary loader code), may be overridden
192 $(BIN)/%.bin: $(BIN)/%.o
193 $(OBJCOPY) -O binary $< $@
195 # general rule for .z (compressed binary code), may be overridden
196 # rule for .z is in top level Makefile
197 # Give the directory name, e.g. use $(BIN)/rtl8139.com as the target.
199 $(BIN)/%.zo: $(BIN)/%.zbin arch/i386/core/prefixzdata.lds $(MAKEDEPS)
200 $(LD) -T arch/i386/core/prefixzdata.lds -b binary $< -o $@
202 $(BIN)/%.uo: $(BIN)/%.bin arch/i386/core/prefixudata.lds $(MAKEDEPS)
203 $(LD) -T arch/i386/core/prefixudata.lds -b binary $< -o $@
205 # Intermediate prf rules
207 %.prf: %.rt $(PREFIXOBJS) %.rt1.uo %.rt2.uo $(MAKEDEPS)
208 $(MAKE) $(TARGETENTRY)
209 $(LD) $(LDFLAGS) -T $(PLDSCRIPT) $(TARGETENTRY) -R $(subst $(MAKEDEPS),,$^) -o $@
211 %.zprf: %.rt $(ZPREFIXOBJS) %.rt1.uo %.rt2.zo $(MAKEDEPS)
212 $(MAKE) $(TARGETENTRY)
213 $(LD) $(LDFLAGS) -T $(PLDSCRIPT) $(TARGETENTRY) -R $(subst $(MAKEDEPS),,$^) -o $@
215 # general rules for normal/compressed ROM images, may be overridden
218 $(BIN)/%.rom.rt: $(BIN)/%.rt.o $(ISAENTRY) $(PCIENTRY) $(ISAEXIT) $(PCIEXIT) $(LDSCRIPT) $(MAKEDEPS)
219 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(romEXIT) $<
220 @$(SIZE) $@ | $(CHECKSIZE)
222 $(BIN)/%.rom: $(BIN)/%.rom.prf
223 $(OBJCOPY) -O binary $< $@
224 $(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_$(ROMCARD)) $(MAKEROM_ID_$(ROMCARD)) -i$(IDENT) $@
226 $(BIN)/%.zrom: $(BIN)/%.rom.zprf
227 $(OBJCOPY) -O binary $< $@
228 $(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_$(ROMCARD)) $(MAKEROM_ID_$(ROMCARD)) -i$(IDENT) $@
230 # general rules for ELF images
232 $(BIN)/%.elf.rt: $(BIN)/%.rt.o $(elfENTRY) $(elfEXIT) $(LDSCRIPT) $(MAKEDEPS)
233 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(elfEXIT) $<
235 $(BIN)/%.elf: $(BIN)/%.elf.prf
236 $(OBJCOPY) -O binary $< $@
238 $(BIN)/%.zelf: $(BIN)/%.elf.zprf
239 $(OBJCOPY) -O binary $< $@
241 # general rules for Long Mode ELF images
242 SUFFIXES += lmelf zlmelf
243 $(BIN)/%.lmelf.rt: $(BIN)/%.rt.o $(lmelfENTRY) $(lmelfEXIT) $(LDSCRIPT) $(MAKEDEPS)
244 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(lmelfEXIT) $<
246 $(BIN)/%.lmelf: $(BIN)/%.lmelf.prf
247 $(OBJCOPY) -O binary $< $@
249 $(BIN)/%.zlmelf: $(BIN)/%.lmelf.zprf
250 $(OBJCOPY) -O binary $< $@
252 # general rules for ELF dynamic images
253 SUFFIXES += elfd zelfd
254 $(BIN)/%.elfd.rt: $(BIN)/%.rt.o $(elfdENTRY) $(elfdEXIT) $(LDSCRIPT) $(MAKEDEPS)
255 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(elfdEXIT) $<
257 $(BIN)/%.elfd: $(BIN)/%.elfd.prf
258 $(OBJCOPY) -O binary $< $@
260 $(BIN)/%.zelfd: $(BIN)/%.elfd.zprf
261 $(OBJCOPY) -O binary $< $@
263 # general rules for Long Mode ELF dynamic images
264 SUFFIXES += lmelfd zlmelfd
265 $(BIN)/%.lmelfd.rt: $(BIN)/%.rt.o $(lmelfdENTRY) $(lmelfdEXIT) $(LDSCRIPT) $(MAKEDEPS)
266 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $(lmelfdEXIT) $<
268 $(BIN)/%.lmelfd: $(BIN)/%.lmelfd.prf
269 $(OBJCOPY) -O binary $< $@
271 $(BIN)/%.zlmelfd: $(BIN)/%.lmelfd.zprf
272 $(OBJCOPY) -O binary $< $@
274 # rules to generate a DOS loadable .com executable
276 $(BIN)/%.com.rt: $(BIN)/%.rt.o $(comENTRY) $(comEXIT) $(LDSCRIPT) $(MAKEDEPS)
277 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(comEXIT)
279 $(BIN)/%.com: $(BIN)/%.com.zprf
280 $(OBJCOPY) -O binary $< $@
282 # rules to generate a DOS loadable .exe executable
284 $(BIN)/%.exe.rt: $(BIN)/%.rt.o $(exeENTRY) $(exeEXIT) $(LDSCRIPT) $(MAKEDEPS)
285 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(exeEXIT)
286 @$(SIZE) $@ | $(CHECKSIZE)
288 $(BIN)/%.exe: $(BIN)/%.exe.prf
289 $(OBJCOPY) -O binary $< $@
291 # rules to make a LILO loadable image
292 SUFFIXES += lilo zlilo
294 $(BIN)/%.lilo.rt: $(BIN)/%.rt.o $(liloENTRY) $(liloEXIT) $(LDSCRIPT) $(MAKEDEPS)
295 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(liloEXIT)
296 @$(SIZE) $@ | $(CHECKSIZE)
298 $(BIN)/%.lilo: $(BIN)/%.lilo.prf
299 $(OBJCOPY) -O binary $< $@
301 $(BIN)/%.zlilo: $(BIN)/%.lilo.zprf
302 $(OBJCOPY) -O binary $< $@
304 # rules to make big linux boot protocol image
305 SUFFIXES += bImage bzImage
307 $(BIN)/%.bImage.rt: $(BIN)/%.rt.o $(bImageENTRY) $(bImageEXIT) $(LDSCRIPT) $(MAKEDEPS)
308 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(bImageEXIT)
310 $(BIN)/%.bImage: $(BIN)/%.bImage.prf
311 $(OBJCOPY) -O binary $< $@
313 $(BIN)/%.bzImage: $(BIN)/%.bImage.zprf
314 $(OBJCOPY) -O binary $< $@
317 # rules to generate a PXE loadable image
320 $(BIN)/%.pxe.rt: $(BIN)/%.rt.o $(pxeENTRY) $(pxeEXIT) $(LDSCRIPT) $(MAKEDEPS)
321 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(pxeEXIT)
322 @$(SIZE) $@ | $(CHECKSIZE)
324 $(BIN)/%.pxe: $(BIN)/%.pxe.prf
325 $(OBJCOPY) -O binary $< $@
327 $(BIN)/%.zpxe: $(BIN)/%.pxe.zprf
328 $(OBJCOPY) -O binary $< $@
330 # rules to generate the .dsk/.zdsk floppy images
333 $(BIN)/%.dsk.rt: $(BIN)/%.rt.o $(dskENTRY) $(dskEXIT) $(LDSCRIPT) $(MAKEDEPS)
334 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(dskEXIT)
335 @$(SIZE) $@ | $(CHECKSIZE)
337 $(BIN)/%.dsk: $(BIN)/%.dsk.prf
338 $(OBJCOPY) -O binary $< $@
340 $(BIN)/%.zdsk: $(BIN)/%.dsk.zprf
341 $(OBJCOPY) -O binary $< $@
343 # rules to write the .dsk/.zdsk image onto a blank floppy
346 dd if=$< bs=512 conv=sync of=/dev/fd0
350 dd if=$< bs=512 conv=sync of=/dev/fd0
353 # rules to create raw executable images
355 $(BIN)/%.raw.rt: $(BIN)/%.rt.o $(rawENTRY) $(rawEXIT) $(LDSCRIPT) $(MAKEDEPS)
356 $(LD) $(LDFLAGS) -T $(LDSCRIPT) -o $@ $< $(rawEXIT)
358 $(BIN)/%.raw: $(BIN)/%.raw.prf
359 $(OBJCOPY) -O binary $< $@
361 $(BIN)/%.zraw: $(BIN)/%.raw.zprf
362 $(OBJCOPY) -O binary $< $@
364 # rule to make a non-emulation ISO boot image
366 %.iso: util/geniso %.zlilo
367 ISOLINUX_BIN=${ISOLINUX_BIN} bash util/geniso $*.iso $*.zlilo
369 # rule to make a floppy emulation ISO boot image
371 %.liso: util/genliso %.zlilo
372 bash util/genliso $*.liso $*.zlilo