You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. #
  2. # Makefile for Etherboot
  3. #
  4. # Most of the time you should edit Config
  5. #
  6. # Common options:
  7. # VERSION=v - Set the version string
  8. #
  9. # NS8390 options:
  10. # -DINCLUDE_NE - Include NE1000/NE2000 support
  11. # -DNE_SCAN=list - Probe for NE base address using list of
  12. # comma separated hex addresses
  13. # -DINCLUDE_3C503 - Include 3c503 support
  14. # -DT503_SHMEM - Use 3c503 shared memory mode (off by default)
  15. # -DINCLUDE_WD - Include Western Digital/SMC support
  16. # -DWD_DEFAULT_MEM- Default memory location for WD/SMC cards
  17. # -DCOMPEX_RL2000_FIX
  18. #
  19. # If you have a Compex RL2000 PCI 32-bit (11F6:1401),
  20. # and the bootrom hangs in "Probing...[NE*000/PCI]",
  21. # try enabling this fix... it worked for me :).
  22. # In the first packet write somehow it somehow doesn't
  23. # get back the expected data so it is stuck in a loop.
  24. # I didn't bother to investigate what or why because it works
  25. # when I interrupt the loop if it takes more then COMPEX_RL2000_TRIES.
  26. # The code will notify if it does a abort.
  27. # SomniOne - somnione@gmx.net
  28. #
  29. # 3C509 option:
  30. # -DINCLUDE_3C509 - Include 3c509 support
  31. #
  32. # 3C90X options:
  33. # -DINCLUDE_3C90X - Include 3c90x support
  34. # -DCFG_3C90X_PRESERVE_XCVR - Reset the transceiver type to the value it
  35. # had initially just before the loaded code is started.
  36. # -DCFG_3C90X_XCVR - Hardcode the tranceiver type Etherboot uses.
  37. # -DCFG_3C90X_BOOTROM_FIX - If you have a 3c905B with buggy ROM
  38. # interface, setting this option might "fix" it. Use
  39. # with caution and read the docs in 3c90x.txt!
  40. #
  41. # See the documentation file 3c90x.txt for more details.
  42. #
  43. # CS89X0 (optional) options:
  44. # -DINCLUDE_CS89X0- Include CS89x0 support
  45. # -DCS_SCAN=list - Probe for CS89x0 base address using list of
  46. # comma separated hex addresses; increasing the
  47. # address by one (0x300 -> 0x301) will force a
  48. # more aggressive probing algorithm. This might
  49. # be neccessary after a soft-reset of the NIC.
  50. #
  51. # LANCE options:
  52. # -DINCLUDE_NE2100- Include NE2100 support
  53. # -DINCLUDE_NI6510- Include NI6510 support
  54. #
  55. # SK_G16 options:
  56. # -DINCLUDE_SK_G16- Include SK_G16 support
  57. #
  58. # I82586 options:
  59. # -DINCLUDE_3C507 - Include 3c507 support
  60. # -DINCLUDE_NI5210- Include NI5210 support
  61. # -DINCLUDE_EXOS205-Include EXOS205 support
  62. #
  63. # SMC9000 options:
  64. # -DINCLUDE_SMC9000 - Include SMC9000 driver
  65. # -DSMC9000_SCAN=list - List of I/O addresses to probe
  66. #
  67. # TIARA (Fujitsu Etherstar) options:
  68. # -DINCLUDE_TIARA - Include Tiara support
  69. #
  70. # NI5010 options:
  71. # -DINCLUDE_NI5010 - Include NI5010 support
  72. #
  73. # TULIP options:
  74. # -DINCLUDE_TULIP - Include Tulip support
  75. # -DUSE_INTERNAL_BUFFER - receuve and transmit buffers within program
  76. # space, not below 0x10000, in case that region is used
  77. #
  78. # RTL8139 options:
  79. # -DINCLUDE_RTL8139 - Include RTL8139 support
  80. # -DUSE_INTERNAL_BUFFER - 8 kB receive buffer within program space,
  81. # not at 0x10000 - 8kB, in case that region is used
  82. #
  83. include Config
  84. GCC= gcc
  85. CPP= gcc -E
  86. VERSION= 4.6.12
  87. CFLAGS16+= -DVERSION=\"$(VERSION)\" -DRELOC=$(RELOCADDR)
  88. CFLAGS32+= -DVERSION=\"$(VERSION)\" -DRELOC=$(RELOCADDR) $(OLDGAS)
  89. LCONFIG+= -DRELOC=$(RELOCADDR)
  90. IDENT16= 'Etherboot/16 $(VERSION) (GPL) $(@F)'
  91. IDENT32= 'Etherboot/32 $(VERSION) (GPL) $(@F)'
  92. # Find out if we're using binutils 2.9.1 which uses a different syntax in some
  93. # places (most prominently in the opcode prefix area).
  94. OLDGAS:= $(shell $(AS) --version | grep -q '2\.9\.1' && echo -DGAS291)
  95. # Check the requested type of build (32, 16 or both families)
  96. ifeq ($(ETHERBOOT),16)
  97. BUILD_LIBS= $(BLIB16)
  98. BUILD_BINS= $(BINS16)
  99. endif
  100. ifeq ($(ETHERBOOT),32)
  101. BUILD_LIBS= $(BLIB32)
  102. BUILD_BINS= $(BINS32)
  103. endif
  104. ifeq ($(ETHERBOOT),both)
  105. BUILD_LIBS= $(BLIB16) $(BLIB32)
  106. BUILD_BINS= $(BINS16) $(BINS32)
  107. endif
  108. 3C503FLAGS= -DINCLUDE_3C503 # -DT503_SHMEM
  109. # Note that the suffix to MAKEROM_ is the (mixed case) basename of the ROM file
  110. MAKEROM_3c503= -3
  111. 3C507FLAGS= -DINCLUDE_3C507
  112. 3C509FLAGS= -DINCLUDE_3C509
  113. 3C529FLAGS= -DINCLUDE_3C529
  114. 3C595FLAGS= -DINCLUDE_3C595
  115. 3C90XFLAGS= -DINCLUDE_3C90X
  116. CS89X0FLAGS= -DINCLUDE_CS89X0
  117. EEPROFLAGS= -DINCLUDE_EEPRO
  118. EEPRO100FLAGS= -DINCLUDE_EEPRO100
  119. EPIC100FLAGS= -DINCLUDE_EPIC100
  120. EXOS205FLAGS= -DINCLUDE_EXOS205
  121. LANCEFLAGS= -DINCLUDE_LANCE # Lance/PCI!
  122. NE2100FLAGS= -DINCLUDE_NE2100
  123. NEFLAGS= -DINCLUDE_NE -DNE_SCAN=0x300,0x280,0x320,0x340,0x380
  124. NS8390FLAGS= -DINCLUDE_NS8390 # NE2000/PCI!
  125. NI5010FLAGS= -DINCLUDE_NI5010
  126. NI5210FLAGS= -DINCLUDE_NI5210
  127. NI6510FLAGS= -DINCLUDE_NI6510
  128. RTL8139FLAGS= -DINCLUDE_RTL8139
  129. SK_G16FLAGS= -DINCLUDE_SK_G16
  130. SMC9000FLAGS= -DINCLUDE_SMC9000
  131. TIARAFLAGS= -DINCLUDE_TIARA
  132. DEPCAFLAGS= -DINCLUDE_DEPCA # -DDEPCA_MODEL=DEPCA -DDEPCA_RAM_BASE=0xd0000
  133. TULIPFLAGS= -DINCLUDE_TULIP
  134. OTULIPFLAGS= -DINCLUDE_OTULIP
  135. VIA_RHINEFLAGS= -DINCLUDE_VIA_RHINE
  136. WDFLAGS= -DINCLUDE_WD -DWD_DEFAULT_MEM=0xCC000
  137. W89C840FLAGS= -DINCLUDE_W89C840
  138. # If you have not made any changes to the *.S files, AS86 need not be set.
  139. # (most people)
  140. # If you have made changes to the *.S files and you want to rebuild *loader.bin
  141. # and {floppy,com}load.bin and you have as86 from the ELKS Dev86 package (not
  142. # the one that normally comes with Linux) (not most people)
  143. #AS86= as86
  144. # If you have made changes to the *.S files and you want to rebuild *loader.bin
  145. # and {floppy,com}load.bin and you have nasm (not most people)
  146. #AS86= nasm
  147. # if your as has trouble with the data32 directive, uncomment this
  148. # but note that the premade start*.o will be larger than necessary because it
  149. # contains some routines which may not be used
  150. #AS_PSEUDOS= n
  151. SRCS= floppyload.S comload.S liloprefix.S loader.S start16.S start32.S serial.S startmpcc.S
  152. SRCS+= main.c pci.c osloader.c nfs.c misc.c ansiesc.c bootmenu.c config.c
  153. SRCS+= md5.c floppy.c
  154. # ROM loaders: LZ version (prefix Z), PCI header version (prefix P)
  155. ifndef AS86
  156. RLOADER= rloader.bin.pre
  157. PRLOADER= prloader.bin.pre
  158. RZLOADER= rzloader.bin.pre
  159. PRZLOADER= przloader.bin.pre
  160. FLOPPYLOAD= floppyload.bin.pre
  161. COMLOAD= comload.bin.pre
  162. LILOPREFIX= liloprefix.bin.pre
  163. else
  164. RLOADER= bin/rloader.bin
  165. PRLOADER= bin/prloader.bin
  166. RZLOADER= bin/rzloader.bin
  167. PRZLOADER= bin/przloader.bin
  168. FLOPPYLOAD= bin/floppyload.bin
  169. COMLOAD= bin/comload.bin
  170. LILOPREFIX= bin/liloprefix.bin
  171. endif
  172. ifeq ($(AS86),as86)
  173. LCPPFLAGS+= -DUSE_AS86
  174. LASFLAGS+= $(AS86FLAGS) -0
  175. LASBINARY:= -b
  176. endif
  177. ifeq ($(AS86),nasm)
  178. LCPPFLAGS+= -DUSE_NASM
  179. LASFLAGS+= $(NASMFLAGS) -fbin
  180. LASBINARY:= -o
  181. endif
  182. ifeq ($(AS_PSEUDOS),n)
  183. START16= start16.o.pre
  184. START32= start32.o.pre
  185. else
  186. START16= bin16/start16.o
  187. START32= bin32/startmpcc.o
  188. endif
  189. BOBJS16= bin16/main.o bin16/osloader.o bin16/misc.o bin16/bootmenu.o
  190. BOBJS16+= bin16/floppy.o bin16/timer.o
  191. BOBJS32= bin32/main.o bin32/osloader.o bin32/nfs.o bin32/misc.o
  192. BOBJS32+= bin32/ansiesc.o bin32/bootmenu.o bin32/md5.o bin32/floppy.o
  193. BOBJS32+= bin32/serial.o bin32/timer.o
  194. BLIB16= bin16/bootlib.a
  195. BLIB32= bin32/bootlib.a
  196. LIBS16= $(BLIB16) $(LIBC16)
  197. LIBS32= $(BLIB32) $(LIBC32) /usr/lib/gcc-lib/i386-redhat-linux/2.96/libgcc.a
  198. UTIL_LZHUF:= $(shell if [ -d ../contrib/compressor ]; then echo bin/lzhuf; fi)
  199. UTILS+= bin/makerom $(UTIL_LZHUF) bin/organon
  200. STDDEPS16= $(START16) $(BLIB16) $(UTILS)
  201. STDDEPS32= $(START32) $(BLIB32) $(UTILS)
  202. MAKEDEPS= Makefile Config Roms
  203. CHECKSIZE= { read d1; read d1 d2 d3 size d4; [ $$size -gt $(ROMLIMIT) ] &&\
  204. { $(RM) $@; echo "ERROR: code size exceeds limit!"; exit 1; }; exit 0; }
  205. # Make sure that the relocation address is acceptable for all ROM sizes.
  206. # Setting it to 0x98000 leaves about 29kB of space for the Etherboot program.
  207. # The check is done based running 'size' on the binary, not ROM size, but
  208. # roughly this means a ROM of 16kB or a partially used ROM of 32kB,
  209. # remembering to compressed ROM images into account.
  210. # You may also set RELOCADDR to 0x88000 to avoid using 0x98000
  211. # because of other drivers (e.g. Disk On Chip). In that case, you may
  212. # only load 512kB of OS, or load in memory above 1MB.
  213. # Don't forget to choose an assembler because the loaders have to be rebuilt.
  214. ifndef RELOCADDR
  215. RELOCADDR=0x98000
  216. #RELOCADDR=0xe0000
  217. endif
  218. # Evaluate ROMLIMIT only once - it is constant during the make run.
  219. # Note that the 3K safety margin below is for the 1K extended BIOS data area
  220. # and for the Etherboot runtime stack. Under normal situations, 2K of stack
  221. # are rarely needed. If you experience strange behaviour in functions that use
  222. # many local variables or that call functions that do, check for stack overrun!
  223. # Make sure that the normal case needs no perl interpreter - if someone uses a
  224. # different RELOCADDR, then he has perl installed anyways (the shell cannot
  225. # deal with hex numbers, as test/eval don't support non-decimal integers).
  226. ifeq ($(RELOCADDR),0x98000)
  227. ROMLIMIT=29696
  228. else
  229. ROMLIMIT:=$(shell perl -e 'print 0x10000 - 3072 - ($(RELOCADDR) & 0xFFFF), "\n";')
  230. endif
  231. # Start of targets
  232. all: $(UTILS) $(BUILD_LIBS) allbins
  233. include Roms
  234. # We need allbins because $(BINS16) and $(BINS32) are not defined until
  235. # the Makefile fragment "Roms" is read.
  236. allbins: $(BUILD_BINS)
  237. # Common files
  238. $(BLIB16): $(BOBJS16)
  239. $(AR16) rv $@ $(BOBJS16)
  240. $(RANLIB16) $@
  241. $(BLIB32): $(BOBJS32)
  242. $(AR32) rv $@ $(BOBJS32)
  243. $(RANLIB32) $@
  244. bin16/main.o: main.c etherboot.h osdep.h nic.h
  245. bin32/main.o: main.c etherboot.h osdep.h nic.h
  246. bin16/osloader.o: osloader.c etherboot.h osdep.h
  247. bin32/osloader.o: osloader.c etherboot.h osdep.h
  248. # NFS currently makes no sense for Etherboot/16
  249. bin32/nfs.o: nfs.c etherboot.h osdep.h nic.h
  250. bin16/misc.o: misc.c etherboot.h osdep.h
  251. bin32/misc.o: misc.c etherboot.h osdep.h
  252. # ANSIESC is not supported for Etherboot/16
  253. bin32/ansiesc.o: ansiesc.c etherboot.h osdep.h
  254. bin16/bootmenu.o: bootmenu.c etherboot.h osdep.h
  255. bin32/bootmenu.o: bootmenu.c etherboot.h osdep.h
  256. # Password support is not available for Etherboot/16
  257. bin32/md5.o: md5.c etherboot.h osdep.h
  258. bin16/floppy.o: floppy.c etherboot.h osdep.h
  259. bin32/floppy.o: floppy.c etherboot.h osdep.h
  260. bin16/timer.o: timer.c timer.h etherboot.h osdep.h
  261. bin32/timer.o: timer.c timer.h etherboot.h osdep.h
  262. bin32/inthw.o: inthw.c
  263. # PCI support code (common to all PCI drivers)
  264. bin32/pci.o: pci.c pci.h
  265. # Do not add driver specific dependencies here unless it's something the
  266. # genrules.pl script *can't* deal with, i.e. if it is not C code.
  267. # Prepended loaders
  268. #ifndef AS86
  269. #$(RLOADER) $(RZLOADER) $(PRLOADER) $(PRZLOADER): $(MAKEDEPS)
  270. # @if [ $(RELOCADDR) != 0x98000 ]; then echo Non-standard RELOCADDR, must assemble $@; exit 1; fi
  271. # $(TOUCH) $@
  272. #else
  273. #bin/rloader.s: loader.S $(MAKEDEPS)
  274. # $(CPP) $(LCPPFLAGS) $(LCONFIG) -o $@ $<
  275. #
  276. #bin/rzloader.s: loader.S $(MAKEDEPS)
  277. # $(CPP) $(LCPPFLAGS) $(LCONFIG) -DZLOADER -o $@ $<
  278. #
  279. #bin/prloader.s: loader.S $(MAKEDEPS)
  280. # $(CPP) $(LCPPFLAGS) $(LCONFIG) -DPCI_PNP_HEADER -o $@ $<
  281. #
  282. #bin/przloader.s: loader.S $(MAKEDEPS)
  283. # $(CPP) $(LCPPFLAGS) $(LCONFIG) -DPCI_PNP_HEADER -DZLOADER -o $@ $<
  284. #endif
  285. # Floppy loader
  286. ifdef AS86
  287. bin/floppyload.s: floppyload.S $(MAKEDEPS)
  288. $(CPP) $(LCPPFLAGS) -o $@ $<
  289. endif
  290. # COM loader
  291. ifdef AS86
  292. bin/comload.s: comload.S $(MAKEDEPS)
  293. $(CPP) $(LCPPFLAGS) -o $@ $<
  294. endif
  295. # LILO prefix:
  296. ifdef AS86
  297. bin/liloprefix.s: liloprefix.S $(MAKEDEPS)
  298. $(CPP) $(LCPPFLAGS) -o $@ $<
  299. endif
  300. # Utilities
  301. bin/makerom: makerom.c
  302. $(GCC) -O2 -o $@ makerom.c
  303. bin/organon: organon.c
  304. $(GCC) -o $@ organon.c
  305. bin/lzhuf: ../contrib/compressor/lzhuf.c
  306. $(GCC) -O2 -DENCODE -DDECODE -DMAIN -DVERBOSE -o $@ $<
  307. # Roms file
  308. Roms: NIC genrules.pl
  309. @chmod +x genrules.pl
  310. ./genrules.pl NIC > $@
  311. # Pattern Rules
  312. # general rules for compiling/assembling source files
  313. bin16/%.o: %.c $(MAKEDEPS)
  314. $(CC16) $(CFLAGS16) -o $@ -c $<
  315. bin32/%.o: %.c $(MAKEDEPS)
  316. $(CC32) $(CFLAGS32) -o $@ -c $<
  317. bin16/%.o: %.S $(MAKEDEPS)
  318. $(CC16) $(CFLAGS16) $(ASFLAGS16) -c -o $@ $<
  319. bin32/%.o: %.S $(MAKEDEPS)
  320. $(CPP) $(CFLAGS32) $< | $(AS) $(ASFLAGS32) -o $@
  321. # general rule for .bin (plain binary loader code), may be overridden
  322. ifdef AS86
  323. bin/%.bin: bin/%.s
  324. $(AS86) $(LASFLAGS) $(LASBINARY) $@ $<
  325. endif
  326. # general rule for .huf (compressed binary code), may be overridden
  327. %.huf: %.img
  328. bin/lzhuf e $< $@
  329. # general rules for normal/compressed ROM images, may be overridden
  330. bin16/%.rom: bin16/%.img $(RLOADER)
  331. cat $(RLOADER) $< > $@
  332. bin/makerom $(MAKEROM_$*) -i$(IDENT16) $@
  333. bin32/%.rom: bin32/%.img $(RLOADER)
  334. cat $(RLOADER) $< > $@
  335. bin/makerom $(MAKEROM_$*) -i$(IDENT32) $@
  336. bin16/%.lzrom: bin16/%.huf $(RZLOADER)
  337. cat $(RZLOADER) $< > $@
  338. bin/makerom $(MAKEROM_$*) -i$(IDENT16) $@
  339. bin32/%.lzrom: bin32/%.huf $(RZLOADER)
  340. cat $(RZLOADER) $< > $@
  341. bin/makerom $(MAKEROM_$*) -i$(IDENT32) $@
  342. # rules to write the .rom/.lzrom image onto a blank floppy
  343. # You must give the directory name, e.g. use bin32/rtl8139.lzfd0 as the target.
  344. %.fd0: %.rom $(FLOPPYLOAD)
  345. cat $(FLOPPYLOAD) $< > /dev/fd0
  346. %.lzfd0: %.lzrom $(FLOPPYLOAD)
  347. cat $(FLOPPYLOAD) $< > /dev/fd0
  348. # rules to generate a .com executable
  349. # You must give the directory name, e.g. use bin32/rtl8139.com as the target.
  350. %.com: %.lzrom $(COMLOAD)
  351. cat $(COMLOAD) $< > $@
  352. # rules to make a floppy image (padding to fill an even number of cylinders).
  353. # VMware reports floppy image read errors if it cannot read ahead 36 sectors,
  354. # probably because the floppyload.S code reads up to that number of sectors in
  355. # a single request. Not that 18k matters much these days...
  356. # You must give the directory name, e.g. use bin32/rtl8139.fdimg as the target.
  357. %.fdimg: %.rom $(FLOPPYLOAD)
  358. cat $(FLOPPYLOAD) $< > $@.x
  359. dd if=$@.x of=$@ bs=36k conv=sync 2> /dev/null
  360. $(RM) $@.x
  361. %.lzfdimg: %.lzrom $(FLOPPYLOAD)
  362. cat $(FLOPPYLOAD) $< > $@.x
  363. dd if=$@.x of=$@ bs=36k conv=sync 2> /dev/null
  364. $(RM) $@.x
  365. # rules to make a LILO-bootable image
  366. %.lilo: %.rom $(LILOPREFIX)
  367. cat $(LILOPREFIX) $< /dev/zero | head -c 64k > $@
  368. %.lzlilo: %.lzrom $(LILOPREFIX)
  369. cat $(LILOPREFIX) $< /dev/zero | head -c 64k > $@
  370. # Housekeeping
  371. # To make sure that this actually builds a start32.o.pre with all options set,
  372. # you have to make sure that -DFLOPPY -DANSIESC -DCONSOLE_DUAL are in CFLAGS32.
  373. precompiled: bin/rloader.bin bin/rzloader.bin bin/prloader.bin bin/przloader.bin bin/floppyload.bin bin/comload.bin bin16/start16.o bin32/start32.o bin/liloprefix.bin
  374. cp -p bin/rloader.bin rloader.bin.pre
  375. cp -p bin/rzloader.bin rzloader.bin.pre
  376. cp -p bin/prloader.bin prloader.bin.pre
  377. cp -p bin/przloader.bin przloader.bin.pre
  378. cp -p bin/floppyload.bin floppyload.bin.pre
  379. cp -p bin/comload.bin comload.bin.pre
  380. cp -p bin16/start16.o start16.o.pre
  381. cp -p bin32/start32.o start32.o.pre
  382. cp -p bin/liloprefix.bin liloprefix.bin.pre
  383. clean:
  384. $(RM) $(UTILS) bin/*.s bin/*.bin
  385. $(RM) $(BLIB16) $(BLIB32)
  386. $(RM) bin16/*.o bin32/*.o bin16/*.tmp bin32/*.tmp
  387. $(RM) bin16/*.img bin32/*.img bin16/*.huf bin32/*.huf
  388. $(RM) bin16/*.rom bin32/*.rom bin16/*.lzrom bin32/*.lzrom
  389. $(RM) bin16/*.com bin32/*.com
  390. $(RM) bin16/*.fdimg bin32/*.fdimg bin16/*.lzfdimg bin32/*.lzfdimg
  391. $(RM) bin16/*.lilo bin32/*.lilo bin16/*.lzlilo bin32/*.lzlilo
  392. $(RM) bin32/*.hex
  393. $(RM) bin32/*.asm
  394. $(RM) bin32/*.map
  395. tarball:
  396. (echo -n $(VERSION) ''; date -u +'%Y-%m-%d') > ../VERSION
  397. (cd ..; tar cf /tmp/mpccboot-$(VERSION).tar --exclude CVS mpccboot)
  398. bzip2 -9 < /tmp/mpccboot-$(VERSION).tar > /tmp/mpccboot-$(VERSION).tar.bz2
  399. gzip -9 < /tmp/mpccboot-$(VERSION).tar > /tmp/mpccboot-$(VERSION).tar.gz
  400. version:
  401. @echo $(VERSION)