選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Makefile 11KB

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