[release] Update version post release to 5.4.4+
[etherboot.git] / src / Makefile.main
1 #
2 # Makefile for Etherboot
3 #
4 # Most of the time you should edit Config
5 #
6 # Common options:
7 #       VERSION_*=v     - Set the major and minor version numbers
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 #       -DWD_790_PIO    - Read/write to WD/SMC 790 cards in PIO mode (default
18 #                         is to use shared memory) Try this if you get "Bogus
19 #                         packet, ignoring" messages, common on ISA/PCI hybrid
20 #                         systems.
21 #       -DCOMPEX_RL2000_FIX
22 #
23 #       If you have a Compex RL2000 PCI 32-bit (11F6:1401),
24 #       and the bootrom hangs in "Probing...[NE*000/PCI]",
25 #       try enabling this fix... it worked for me :).
26 #       In the first packet write somehow it somehow doesn't
27 #       get back the expected data so it is stuck in a loop.
28 #       I didn't bother to investigate what or why because it works
29 #       when I interrupt the loop if it takes more then COMPEX_RL2000_TRIES.
30 #       The code will notify if it does a abort.
31 #       SomniOne - somnione@gmx.net
32 #
33 # 3C509 option:
34 #       -DINCLUDE_3C509 - Include 3c509 support
35 #
36 # 3C90X options:
37 #       -DINCLUDE_3C90X - Include 3c90x support
38 #
39 #       Warning Warning Warning
40 #       If you use any of the XCVR options below, please do not complain about
41 #       the behaviour with Linux drivers to the kernel developers. You are
42 #       on your own if you do this. Please read 3c90x.txt to understand
43 #       what they do. If you don't understand them, ask for help on the
44 #       Etherboot mailing list. And please document what you did to the NIC
45 #       on the NIC so that people after you won't get nasty surprises.
46 #
47 #       -DCFG_3C90X_PRESERVE_XCVR - Reset the transceiver type to the value it
48 #                         had initially just before the loaded code is started.
49 #       -DCFG_3C90X_XCVR - Hardcode the tranceiver type Etherboot uses.
50 #       -DCFG_3C90X_BOOTROM_FIX - If you have a 3c905B with buggy ROM
51 #                         interface, setting this option might "fix" it.  Use
52 #                         with caution and read the docs in 3c90x.txt!
53 #
54 #       See the documentation file 3c90x.txt for more details.
55 #
56 # CS89X0 (optional) options:
57 #       -DINCLUDE_CS89X0- Include CS89x0 support
58 #       -DCS_SCAN=list  - Probe for CS89x0 base address using list of
59 #                         comma separated hex addresses; increasing the
60 #                         address by one (0x300 -> 0x301) will force a
61 #                         more aggressive probing algorithm. This might
62 #                         be neccessary after a soft-reset of the NIC.
63 #
64 # LANCE options:
65 #       -DINCLUDE_NE2100- Include NE2100 support
66 #       -DINCLUDE_NI6510- Include NI6510 support
67 #
68 # SK_G16 options:
69 #       -DINCLUDE_SK_G16- Include SK_G16 support
70 #
71 # I82586 options:
72 #       -DINCLUDE_3C507 - Include 3c507 support
73 #       -DINCLUDE_NI5210- Include NI5210 support
74 #       -DINCLUDE_EXOS205-Include EXOS205 support
75 #
76 # SMC9000 options:
77 #       -DINCLUDE_SMC9000   - Include SMC9000 driver
78 #       -DSMC9000_SCAN=list - List of I/O addresses to probe
79 #
80 # TIARA (Fujitsu Etherstar) options:
81 #       -DINCLUDE_TIARA - Include Tiara support
82 #
83 # NI5010 options:
84 #       -DINCLUDE_NI5010 - Include NI5010 support
85 #
86 # TULIP options:
87 #       -DINCLUDE_TULIP - Include Tulip support
88 #
89 # RTL8139 options:
90 #       -DINCLUDE_RTL8139 - Include RTL8139 support
91 #
92 # SIS900 options:
93 #       -DINCLUDE_SIS900 - Include SIS900 support
94 #
95 # NATSEMI options:
96 #       -DINCLUDE_NATSEMI - Include NATSEMI support
97 #
98
99 SRCS:=
100 BOBJS:=
101
102 MAKEROM=        $(PERL) ./util/makerom.pl
103 VERSION_MAJOR=  5
104 VERSION_MINOR=  4
105 VERSION_PATCH=  4
106 EXTRAVERSION=   +
107 VERSION=        $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)$(EXTRAVERSION)
108 MM_VERSION=     $(VERSION_MAJOR).$(VERSION_MINOR)
109 CFLAGS+=        -DVERSION_MAJOR=$(VERSION_MAJOR) \
110                 -DVERSION_MINOR=$(VERSION_MINOR) \
111                 -DVERSION=\"$(VERSION)\" $(OLDGAS) \
112                 -I include -I arch/$(ARCH)/include \
113                 -DARCH=$(ARCH)
114 FILO=filo
115 FILO_PROGRAM_NAME = FILO
116 FILO_PROGRAM_VERSION = 0.4.1
117 FILO_BUILD_INFO = ($(shell whoami)@$(shell hostname)) $(shell LANG=C date)
118
119 GCCINCDIR = $(shell $(CC) -print-search-dirs | head -n 1 | cut -d' ' -f2)include
120
121 IDENT=          '$(@F) $(VERSION) (GPL) etherboot.org'
122
123 # Find out if we're using binutils 2.9.1 which uses a different syntax in some
124 # places (most prominently in the opcode prefix area).
125 OLDGAS:=        $(shell $(AS) --version | grep -q '2\.9\.1' && echo -DGAS291)
126
127 BUILD_LIBS=     $(BLIB)
128 BUILD_IMGS=     $(IMGS)
129
130 3C503FLAGS=     -DINCLUDE_3C503 # -DT503_SHMEM
131 # Note that the suffix to MAKEROM_ is the (mixed case) basename of the ROM file
132 MAKEROM_3c503=  -3
133 3C507FLAGS=     -DINCLUDE_3C507
134 3C509FLAGS=     -DINCLUDE_3C509
135 3C529FLAGS=     -DINCLUDE_3C529
136 3C595FLAGS=     -DINCLUDE_3C595
137 3C90XFLAGS=     -DINCLUDE_3C90X
138 CS89X0FLAGS=    -DINCLUDE_CS89X0
139 EEPROFLAGS=     -DINCLUDE_EEPRO
140 EEPRO100FLAGS=  -DINCLUDE_EEPRO100
141 E1000FLAGS=     -DINCLUDE_E1000
142 EPIC100FLAGS=   -DINCLUDE_EPIC100
143 EXOS205FLAGS=   -DINCLUDE_EXOS205
144 LANCEFLAGS=     -DINCLUDE_LANCE         # Lance/PCI!
145 MYRI10GEFLAGS=  -DINCLUDE_MYRI10GE
146 NE2100FLAGS=    -DINCLUDE_NE2100
147 NEFLAGS=        -DINCLUDE_NE -DNE_SCAN=0x300,0x280,0x320,0x340,0x380
148 NS8390FLAGS=    -DINCLUDE_NS8390        # NE2000/PCI!
149 NI5010FLAGS=    -DINCLUDE_NI5010
150 NI5210FLAGS=    -DINCLUDE_NI5210
151 NI6510FLAGS=    -DINCLUDE_NI6510
152 RTL8139FLAGS=   -DINCLUDE_RTL8139
153 SK_G16FLAGS=    -DINCLUDE_SK_G16
154 SIS900FLAGS=    -DINCLUDE_SIS900
155 NATSEMIFLAGS=   -DINCLUDE_NATSEMI
156 SMC9000FLAGS=   -DINCLUDE_SMC9000
157 SUNDANCEFLAGS=  -DINCLUDE_SUNDANCE
158 TLANFLAGS=      -DINCLUDE_TLAN
159 TIARAFLAGS=     -DINCLUDE_TIARA
160 DEPCAFLAGS=     -DINCLUDE_DEPCA # -DDEPCA_MODEL=DEPCA -DDEPCA_RAM_BASE=0xd0000
161 TULIPFLAGS=     -DINCLUDE_TULIP
162 OTULIPFLAGS=    -DINCLUDE_OTULIP
163 VIA_RHINEFLAGS= -DINCLUDE_VIA_RHINE
164 WDFLAGS=        -DINCLUDE_WD -DWD_DEFAULT_MEM=0xCC000
165 W89C840FLAGS=   -DINCLUDE_W89C840
166
167 SRCS+=  core/serial.c
168
169 SRCS+=  core/btext.c core/pc_kbd.c
170
171 SRCS+=  core/main.c core/pci.c core/osloader.c core/nfs.c
172 SRCS+=  core/misc.c core/config.c core/isa_probe.c core/pci_probe.c
173 SRCS+=  core/relocate.c core/heap.c
174 SRCS+=  drivers/disk/floppy.c core/nic.c core/disk.c core/timer.c
175 SRCS+=  core/proto_eth_slow.c core/proto_fsp.c
176 SRCS+=  core/proto_slam.c core/proto_tftm.c core/proto_http.c
177 SRCS+=  core/isapnp.c
178 SRCS+=  core/pcmcia.c core/i82365.c
179 SRCS+=  core/pxe_export.c core/dns_resolver.c
180
181 FILO_SRCS+=     $(FILO)/drivers/ide_x.c  
182 FILO_SRCS+=     $(FILO)/fs/blockdev.c $(FILO)/fs/eltorito.c $(FILO)/fs/fsys_ext2fs.c $(FILO)/fs/fsys_fat.c $(FILO)/fs/fsys_iso9660.c
183 FILO_SRCS+=     $(FILO)/fs/fsys_reiserfs.c $(FILO)/fs/vfs.c $(FILO)/fs/fsys_jfs.c $(FILO)/fs/fsys_minix.c $(FILO)/fs/fsys_xfs.c  
184 FILO_SRCS+=     $(FILO)/main/elfload.c $(FILO)/main/elfnote.c $(FILO)/main/filo_x.c $(FILO)/main/lib.c $(FILO)/main/linuxbios_x.c 
185 FILO_SRCS+=     $(FILO)/main/pci_x.c $(FILO)/main/malloc_x.c $(FILO)/main/printf_x.c $(FILO)/main/console_x.c 
186 FILO_SRCS+=     $(FILO)/$(ARCH)/context.c $(FILO)/$(ARCH)/linux_load.c $(FILO)/$(ARCH)/segment.c $(FILO)/$(ARCH)/sys_info.c 
187 FILO_SRCS+=     $(FILO)/$(ARCH)/switch.S $(FILO)/usb/debug_x.c $(FILO)/usb/scsi_cmds.c $(FILO)/usb/uhci.c $(FILO)/usb/usb.c 
188 FILO_SRCS+=     $(FILO)/usb/ohci.c $(FILO)/usb/usb_scsi_low.c  $(FILO)/usb/usb_x.c
189
190
191 BOBJS+=         $(BIN)/main.o $(BIN)/osloader.o $(BIN)/nfs.o $(BIN)/misc.o
192 BOBJS+=         $(BIN)/proto_slam.o $(BIN)/proto_tftm.o $(BIN)/proto_http.o
193 BOBJS+=         $(BIN)/floppy.o $(BIN)/proto_fsp.o
194 BOBJS+=         $(BIN)/serial.o $(BIN)/timer.o  $(BIN)/relocate.o $(BIN)/heap.o
195 BOBJS+=         $(BIN)/btext.o $(BIN)/pc_kbd.o
196 BOBJS+=         $(BIN)/nic.o $(BIN)/disk.o
197 BOBJS+=         $(BIN)/isapnp.o
198 BOBJS+=         $(BIN)/pci.o $(BIN)/isa_probe.o $(BIN)/pci_probe.o
199 BOBJS+=         $(BIN)/vsprintf.o $(BIN)/string.o
200 BOBJS+=         $(BIN)/pcmcia.o $(BIN)/i82365.o
201 BOBJS+=         $(BIN)/pxe_export.o $(BIN)/dns_resolver.o
202
203 FILO_OBJS+=             $(BIN)/ide_x.o $(BIN)/pci_x.o
204 FILO_OBJS+=             $(BIN)/blockdev.o $(BIN)/eltorito.o $(BIN)/fsys_ext2fs.o $(BIN)/fsys_fat.o $(BIN)/fsys_iso9660.o $(BIN)/fsys_reiserfs.o $(BIN)/vfs.o
205 FILO_OBJS+=             $(BIN)/fsys_jfs.o $(BIN)/fsys_minix.o $(BIN)/fsys_xfs.o  
206 FILO_OBJS+=             $(BIN)/elfload.o  $(BIN)/elfnote.o  $(BIN)/filo_x.o $(BIN)/lib.o $(BIN)/linuxbios_x.o $(BIN)/malloc_x.o $(BIN)/printf_x.o $(BIN)/console_x.o   
207 FILO_OBJS+=             $(BIN)/context.o  $(BIN)/linux_load.o  $(BIN)/segment.o  $(BIN)/sys_info.o $(BIN)/switch.o
208 FILO_OBJS+=             $(BIN)/debug_x.o  $(BIN)/scsi_cmds.o $(BIN)/uhci.o $(BIN)/usb.o $(BIN)/ohci.o $(BIN)/usb_scsi_low.o $(BIN)/usb_x.o
209
210 BLIB=           $(BIN)/bootlib.a 
211 FILOLIB=        $(BIN)/filolib.a
212 LIBS=           $(BLIB)
213 ifdef   INCLUDE_FILO
214 LIBS+=          $(FILOLIB)
215 endif
216 UTILS+=         $(BIN)/nrv2b
217 STDDEPS=        $(START) $(UTILS)
218 # MAKEDEPS is the one target that is depended by all ROMs, so we check gcc here
219 # If you are confident that gcc 2.96 works for you, you can remove the lines
220 # that check gcc in the toolcheck rule
221 MAKEDEPS+=      Makefile Makefile.main Config genrules.pl Families
222 MAKEDEPS+=      $(BIN)/toolcheck
223 MAKEDEPS+=      arch/$(ARCH)/Makefile arch/$(ARCH)/Config
224
225 # Start of targets
226
227 .PHONY: noargs
228 noargs: $(BIN)/toolcheck
229         @echo '===================================================='
230         @echo 'No target specified. To specify a target, do: '
231         @echo
232         @echo '    $(MAKE) bin/<rom-name>.<output-format> '
233         @echo
234         @echo 'where <output-format> is one of {zdsk, zhd, zrom, iso, liso, zlilo, zpxe, elf, com}'
235         @echo
236         @echo 'or: '
237         @echo
238         @echo '    $(MAKE) all<output-format>s'
239         @echo
240         @echo 'to generate all possible images of format <output-format>'
241         @echo
242         @echo 'For example, '
243         @echo
244         @echo '    make allzroms '
245         @echo
246         @echo 'will generate all possible .zrom (rom burnable) images, and'
247         @echo
248         @echo '    make allzdsks'
249         @echo
250         @echo 'will generate all possible .zdsk (bootable floppy) images, or'
251         @echo
252         @echo '===================================================='
253         @exit 1
254
255 $(BIN)/toolcheck:       Makefile Config
256         @if $(CC) -v 2>&1 | grep -is 'gcc version 2\.96' > /dev/null; \
257         then \
258                 echo 'gcc 2.96 is unsuitable for compiling Etherboot'; \
259                 echo 'Use gcc 2.95 or gcc 3.x instead'; \
260                 exit 1; \
261         else \
262                 touch $(BIN)/toolcheck; \
263         fi; \
264         if [ `perl -e 'use bytes; print chr(255)' | wc -c` = 2 ]; \
265         then \
266                 echo 'Your Perl version has a Unicode handling bug'; \
267                 echo 'To workaround, execute this before compiling Etherboot:'; \
268                 echo 'export LANG=$${LANG%.UTF-8}'; \
269                 exit 1; \
270         fi
271
272 include         arch/$(ARCH)/Makefile
273
274 # Common files
275
276 $(BLIB):        $(BOBJS)
277         $(AR) r $@ $(BOBJS)
278         $(RANLIB) $@
279
280 $(FILOLIB):     $(FILO_OBJS)
281         $(AR) r $@ $(FILO_OBJS)
282         $(RANLIB) $@
283
284 # LinuxBIOS support code
285 $(BIN)/linuxbios.o:     firmware/linuxbios/linuxbios.c include/etherboot.h include/dev.h firmware/linuxbios/linuxbios_tables.h
286
287 # Do not add driver specific dependencies here unless it's something the
288 # genrules.pl script *can't* deal with, i.e. if it is not C code.
289
290 $(FILO)/config.h: $(FILO)/Config
291         /bin/echo -e '/* GENERATED FILE, DO NOT EDIT */\n' >$@
292         sed -e 's/#.*//' -e '/=/!d' -e 's/\([^[:space:]]*\)[[:space:]]*=[[:space:]]*\(.*\).*/#define \1 \2/' -e 's/^#define \([^ ]*\) 0$$/#undef \1/' $^ >>$@
293
294 filo_version: $(FILO)/main/version.h
295
296 $(FILO)/main/version.h: FORCE
297         echo '#define PROGRAM_NAME "$(FILO_PROGRAM_NAME)"' > $@
298         echo '#define PROGRAM_VERSION "$(FILO_PROGRAM_VERSION) $(FILO_BUILD_INFO)"' >> $@
299
300 FORCE:
301
302
303 # Utilities
304
305 $(BIN)/lzhuf:   util/lzhuf.c
306         $(HOST_CC) -O2 -DENCODE -DDECODE -DMAIN -DVERBOSE -o $@ $<
307
308 # Roms file
309 # Builds almost silently because this rule is triggered for just about
310 # every modification to sources.
311
312 $(BIN)/Roms $(BIN)/NIC: genrules.pl Families $(SRCS)
313         @mkdir -p $(@D)
314         @echo Scanning for ROMs and dependencies...
315         @$(PERL) ./genrules.pl Families $(BIN)/NIC $(ARCH) $(SRCS) > $(BIN)/Roms
316
317 # Pattern Rules
318
319 # general rules for compiling/assembling source files
320 $(BIN)/%.o:     core/%.c $(MAKEDEPS)
321         $(CC) $(CFLAGS) -o $@ -c $<
322
323 $(BIN)/%.s:     core/%.c $(MAKEDEPS)
324         $(CC) $(CFLAGS) -S -o $@ -c $<
325
326 $(BIN)/%.o:     drivers/disk/%.c $(MAKEDEPS)
327         $(CC) $(CFLAGS) -o $@ -c $<
328
329 $(BIN)/%.o:     drivers/net/%.c $(MAKEDEPS)
330         $(CC) $(CFLAGS) -o $@ -c $<
331
332 $(BIN)/%.o:     firmware/linuxbios/%.c $(MAKEDEPS)
333         $(CC) $(CFLAGS) -o $@ -c $<
334
335 $(BIN)/%.o:     $(FILO)/drivers/%.c $(MAKEDEPS) $(FILO)/config.h
336         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
337
338 $(BIN)/%.o:     $(FILO)/fs/%.c $(MAKEDEPS) $(FILO)/config.h
339         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
340
341 $(BIN)/%.o:     $(FILO)/$(ARCH)/%.c $(MAKEDEPS) $(FILO)/config.h
342         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
343
344 $(BIN)/%.o:     $(FILO)/$(ARCH)/%.S $(MAKEDEPS) $(FILO)/config.h
345         $(CPP) $(CFLAGS) -Ui386 -D ASSEMBLY $< | $(AS) $(ASFLAGS) -o $@
346
347 $(BIN)/%.o:     $(FILO)/main/%.c $(MAKEDEPS) $(FILO)/config.h filo_version
348         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
349
350 $(BIN)/%.o:     $(FILO)/usb/%.c $(MAKEDEPS) $(FILO)/config.h
351         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
352
353 # Rule for the super etherboot image.
354 $(BIN)/etherboot.o: $(DOBJS)
355         $(LD) $(LDFLAGS) -r $(DOBJS) -o $@
356
357 $(BIN)/etherboot-pci.o: $(PCIOBJS)
358         $(LD) $(LDFLAGS) -r $(PCIOBJS) -o $@
359
360 # General rules for generating runtime (rt) files
361 $(BIN)/%.rt.o:  $(BIN)/%.o $(START) $(BIN)/config.o $(LIBS) $(STDDEPS) $(MAKEDEPS)
362         $(LD) $(LDFLAGS) -r $(START) $(BIN)/config.o $< $(LIBS) -o $@
363
364 #   Rule for $(BIN)/%.FORMAT.rt is architecture and target-format specific
365
366 $(BIN)/%.rt.bin: $(BIN)/%.rt $(MAKEDEPS)
367         $(OBJCOPY) -O binary -R .prefix $< $@
368
369 $(BIN)/%.rt1.bin: $(BIN)/%.rt $(MAKEDEPS)
370         $(OBJCOPY) -O binary -j .text.nocompress $< $@
371
372 $(BIN)/%.rt2.bin: $(BIN)/%.rt $(MAKEDEPS)
373         $(OBJCOPY) -O binary -R .prefix -R .text.nocompress $< $@
374
375 # Rules for generating prefix binary files
376
377 #   Rule for $(BIN)/%.FORMAT.prf is architecture and target-format specific
378 $(BIN)/%.prf.bin: $(BIN)/%.prf $(MAKEDEPS)
379         $(OBJCOPY) -j .prefix -O binary $< $@
380
381 # general rule for .z (compressed binary code), may be overridden
382 $(BIN)/%.zbin: $(BIN)/%.bin $(BIN)/nrv2b $(MAKEDEPS)
383         $(BIN)/nrv2b e $< $@
384
385 # Housekeeping
386
387 clean:
388         $(RM) $(BIN)/*
389         $(RM) $(FILO)/config.h $(FILO)/main/version.h
390
391 ../index.html:  ../index.xhtml
392         (cd ..; m4 -P -DHOSTSITE=SOURCEFORGE index.xhtml > index.html)
393
394 ../index-berlios.html:  ../index.xhtml
395         (cd ..; m4 -P -DHOSTSITE=BERLIOS index.xhtml > index-berlios.html)
396
397 tarball : ../VERSION
398         /bin/echo $(VERSION) $(shell date -u +\'%Y-%m-%d\') > ../VERSION
399         $(RM) -r /tmp/$(USER)/etherboot-$(VERSION)
400         mkdir -p /tmp/$(USER)/etherboot-$(VERSION)
401         cp -rP .. /tmp/$(USER)/etherboot-$(VERSION)
402         ( cd /tmp/$(USER)/etherboot-$(VERSION)/src ; $(MAKE) clean )
403         ( cd /tmp/$(USER); tar cf /tmp/$(USER)/etherboot-$(VERSION).tar --exclude ".git*" --exclude "#*" \
404           --exclude "*~" etherboot-$(VERSION) )
405         bzip2 -9 < /tmp/$(USER)/etherboot-$(VERSION).tar > /tmp/$(USER)/etherboot-$(VERSION).tar.bz2
406         gzip -9 < /tmp/$(USER)/etherboot-$(VERSION).tar > /tmp/$(USER)/etherboot-$(VERSION).tar.gz
407         $(RM) -r /tmp/$(USER)/etherboot-$(VERSION)
408         $(RM) /tmp/$(USER)/etherboot-$(VERSION).tar
409         ( cd /tmp/$(USER) ; tar -zxf /tmp/$(USER)/etherboot-$(VERSION).tar.gz )
410
411 # If static boot info is used, all static values must be supplied
412
413 ifneq ($(findstring -DUSE_STATIC_BOOT_INFO, $(CFLAGS)),)
414
415 ifeq ($(findstring -DSTATIC_CLIENT_IP, $(CFLAGS)),)
416 $(error "-DUSE_STATIC_BOOT_INFO defined, but -DSTATIC_CLIENT_IP not defined!")
417 endif
418
419 ifeq ($(findstring -DSTATIC_SUBNET_MASK, $(CFLAGS)),)
420 $(error "-DUSE_STATIC_BOOT_INFO defined, but -DSTATIC_SUBNET_MASK not defined!")
421 endif
422
423 ifeq ($(findstring -DSTATIC_SERVER_IP, $(CFLAGS)),)
424 $(error "-DUSE_STATIC_BOOT_INFO defined, but -DSTATIC_SERVER_IP not defined!")
425 endif
426
427 ifeq ($(findstring -DSTATIC_GATEWAY_IP, $(CFLAGS)),)
428 $(error "-DUSE_STATIC_BOOT_INFO defined, but -DSTATIC_GATEWAY_IP not defined!")
429 endif
430
431 ifeq ($(findstring -DSTATIC_BOOTFILE, $(CFLAGS)),)
432 $(error "-DUSE_STATIC_BOOT_INFO defined, but -DSTATIC_BOOTFILE not defined!")
433 endif
434
435 endif
436
437 # PXE Support requires TFTP protocol
438 ifeq ($(findstring -DDOWNLOAD_PROTO_TFTP, $(CFLAGS)),)
439
440 ifneq ($(findstring -DPXE_IMAGE,  $(CFLAGS)),)
441 $(error "-DPXE_IMAGE support requires TFTP support (-DDOWNLOAD_PROTO_TFTP)")
442 endif
443
444 ifneq ($(findstring -DPXE_EXPORT, $(CFLAGS)),)
445 $(error "-DPXE_EXPORT support requires TFTP support (-DDOWNLOAD_PROTO_TFTP)")
446 endif
447
448 endif
449
450 # Auto-incrementing build serial number.  Is auto-incremented for each
451 # make run that specifies a final image file (e.g. bin/undi.zpxe) as a
452 # target, or a target of the form "all*".  Enable via -DBUILD_SERIAL
453 # in Config.
454
455 ifneq ($(findstring -DBUILD_SERIAL,$(CFLAGS)),)
456
457 # If no make goals are specified, it means "make all"
458 REALGOALS = $(if $(MAKECMDGOALS),$(MAKECMDGOALS),all)
459
460 # Filter to see if there are any targets to trigger an auto-increment
461 BUILDGOALS = $(filter all,$(REALGOALS)) $(filter all%,$(REALGOALS)) \
462              $(foreach SUFFIX,$(SUFFIXES),$(filter %.$(SUFFIX),$(REALGOALS)))
463
464 ifneq ($(strip $(BUILDGOALS)),)
465 # This is an auto-incrementing build.  Forcibly rebuild .buildserial.h
466 # and mark config.o as depending on it to force its rebuilding.
467 bin/config.o : include/.buildserial.h
468 .PHONY : include/.buildserial.h
469 endif # BUILDGOALS
470
471 include/.buildserial.h :
472         @if [ ! -f $@ ]; then   echo '#define BUILD_SERIAL_NUM 0' > $@; fi
473         @perl -pi -e 's/(BUILD_SERIAL_NUM)\s+(\d+)/"$${1} ".($${2}+1)/e' $@
474
475 buildserial : include/.buildserial.h
476         @perl -n -e '/BUILD_SERIAL_NUM\s+(\d+)/ && ' \
477                 -e 'print "Build serial number is $$1\n";' $<
478
479 else # -DBUILD_SERIAL
480
481 buildserial : 
482         @echo Build serial number is disabled. Enable -DBUILD_SERIAL in Config.
483
484 endif # -DBUILD_SERIAL
485
486 bs : buildserial
487
488 version:
489         @echo $(VERSION)
490
491 romlimit:
492         @echo $(ROMLIMIT)
493
494 sources:
495         @echo $(SRCS)