Initial revision
[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=  0
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 CPPFLAGS = -nostdinc -imacros filo/config.h 
121 #-Ifilo/include -I$(GCCINCDIR) -MD
122 ASFLAGS_X = -D__ASSEMBLY__
123
124 IDENT=          '$(@F) $(VERSION) (GPL) etherboot.org'
125
126 # Find out if we're using binutils 2.9.1 which uses a different syntax in some
127 # places (most prominently in the opcode prefix area).
128 OLDGAS:=        $(shell $(AS) --version | grep -q '2\.9\.1' && echo -DGAS291)
129
130 BUILD_LIBS=     $(BLIB)
131 BUILD_IMGS=     $(IMGS)
132
133 3C503FLAGS=     -DINCLUDE_3C503 # -DT503_SHMEM
134 # Note that the suffix to MAKEROM_ is the (mixed case) basename of the ROM file
135 MAKEROM_3c503=  -3
136 3C507FLAGS=     -DINCLUDE_3C507
137 3C509FLAGS=     -DINCLUDE_3C509
138 3C529FLAGS=     -DINCLUDE_3C529
139 3C595FLAGS=     -DINCLUDE_3C595
140 3C90XFLAGS=     -DINCLUDE_3C90X
141 CS89X0FLAGS=    -DINCLUDE_CS89X0
142 EEPROFLAGS=     -DINCLUDE_EEPRO
143 EEPRO100FLAGS=  -DINCLUDE_EEPRO100
144 E1000FLAGS=     -DINCLUDE_E1000
145 EPIC100FLAGS=   -DINCLUDE_EPIC100
146 EXOS205FLAGS=   -DINCLUDE_EXOS205
147 LANCEFLAGS=     -DINCLUDE_LANCE         # Lance/PCI!
148 NE2100FLAGS=    -DINCLUDE_NE2100
149 NEFLAGS=        -DINCLUDE_NE -DNE_SCAN=0x300,0x280,0x320,0x340,0x380
150 NS8390FLAGS=    -DINCLUDE_NS8390        # NE2000/PCI!
151 NI5010FLAGS=    -DINCLUDE_NI5010
152 NI5210FLAGS=    -DINCLUDE_NI5210
153 NI6510FLAGS=    -DINCLUDE_NI6510
154 RTL8139FLAGS=   -DINCLUDE_RTL8139
155 SK_G16FLAGS=    -DINCLUDE_SK_G16
156 SIS900FLAGS=    -DINCLUDE_SIS900
157 NATSEMIFLAGS=   -DINCLUDE_NATSEMI
158 SMC9000FLAGS=   -DINCLUDE_SMC9000
159 SUNDANCEFLAGS=  -DINCLUDE_SUNDANCE
160 TLANFLAGS=      -DINCLUDE_TLAN
161 TIARAFLAGS=     -DINCLUDE_TIARA
162 DEPCAFLAGS=     -DINCLUDE_DEPCA # -DDEPCA_MODEL=DEPCA -DDEPCA_RAM_BASE=0xd0000
163 TULIPFLAGS=     -DINCLUDE_TULIP
164 OTULIPFLAGS=    -DINCLUDE_OTULIP
165 VIA_RHINEFLAGS= -DINCLUDE_VIA_RHINE
166 WDFLAGS=        -DINCLUDE_WD -DWD_DEFAULT_MEM=0xCC000
167 W89C840FLAGS=   -DINCLUDE_W89C840
168
169 SRCS+=  core/serial.c
170
171 SRCS+=  core/btext.c core/pc_kbd.c
172
173 SRCS+=  core/main.c core/pci.c core/osloader.c core/nfs.c
174 SRCS+=  core/misc.c core/config.c core/isa_probe.c core/pci_probe.c
175 SRCS+=  core/relocate.c core/heap.c
176 SRCS+=  drivers/disk/floppy.c core/nic.c core/disk.c core/timer.c
177 SRCS+=  core/proto_eth_slow.c core/proto_fsp.c
178 SRCS+=  core/proto_slam.c core/proto_tftm.c core/proto_http.c
179 SRCS+=  core/isapnp.c
180 SRCS+=  core/pcmcia.c core/i82365.c
181 SRCS+=  core/pxe_export.c core/dns_resolver.c
182
183 FILO_SRCS+=     $(FILO)/drivers/ide_x.c  
184 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
185 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  
186 FILO_SRCS+=     $(FILO)/main/elfload.c $(FILO)/main/elfnote.c $(FILO)/main/filo_x.c $(FILO)/main/lib.c $(FILO)/main/linuxbios_x.c 
187 FILO_SRCS+=     $(FILO)/main/pci_x.c $(FILO)/main/malloc_x.c $(FILO)/main/printf_x.c $(FILO)/main/console_x.c 
188 FILO_SRCS+=     $(FILO)/$(ARCH)/context.c $(FILO)/$(ARCH)/linux_load.c $(FILO)/$(ARCH)/segment.c $(FILO)/$(ARCH)/sys_info.c 
189 FILO_SRCS+=     $(FILO)/$(ARCH)/switch.S $(FILO)/usb/debug_x.c $(FILO)/usb/scsi_cmds.c $(FILO)/usb/uhci.c $(FILO)/usb/usb.c 
190 FILO_SRCS+=     $(FILO)/usb/ohci.c $(FILO)/usb/usb_scsi_low.c  $(FILO)/usb/usb_x.c
191
192
193 BOBJS+=         $(BIN)/main.o $(BIN)/osloader.o $(BIN)/nfs.o $(BIN)/misc.o
194 BOBJS+=         $(BIN)/proto_slam.o $(BIN)/proto_tftm.o $(BIN)/proto_http.o
195 BOBJS+=         $(BIN)/floppy.o $(BIN)/proto_fsp.o
196 BOBJS+=         $(BIN)/serial.o $(BIN)/timer.o  $(BIN)/relocate.o $(BIN)/heap.o
197 BOBJS+=         $(BIN)/btext.o $(BIN)/pc_kbd.o
198 BOBJS+=         $(BIN)/nic.o $(BIN)/disk.o
199 BOBJS+=         $(BIN)/isapnp.o
200 BOBJS+=         $(BIN)/pci.o $(BIN)/isa_probe.o $(BIN)/pci_probe.o
201 BOBJS+=         $(BIN)/vsprintf.o $(BIN)/string.o
202 BOBJS+=         $(BIN)/pcmcia.o $(BIN)/i82365.o
203 BOBJS+=         $(BIN)/pxe_export.o $(BIN)/dns_resolver.o
204
205 FILO_OBJS+=             $(BIN)/ide_x.o $(BIN)/pci_x.o
206 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
207 FILO_OBJS+=             $(BIN)/fsys_jfs.o $(BIN)/fsys_minix.o $(BIN)/fsys_xfs.o  
208 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   
209 FILO_OBJS+=             $(BIN)/context.o  $(BIN)/linux_load.o  $(BIN)/segment.o  $(BIN)/sys_info.o $(BIN)/switch.o
210 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
211
212 BLIB=           $(BIN)/bootlib.a 
213 FILOLIB=        $(BIN)/filolib.a
214 LIBS=           $(BLIB)
215 ifdef   INCLUDE_FILO
216 LIBS+=          $(FILOLIB)
217 endif
218 UTILS+=         $(BIN)/nrv2b
219 STDDEPS=        $(START) $(UTILS)
220 # MAKEDEPS is the one target that is depended by all ROMs, so we check gcc here
221 # If you are confident that gcc 2.96 works for you, you can remove the lines
222 # that check gcc in the toolcheck rule
223 MAKEDEPS+=      Makefile Makefile.main Config genrules.pl Families
224 MAKEDEPS+=      $(BIN)/toolcheck
225 MAKEDEPS+=      arch/$(ARCH)/Makefile arch/$(ARCH)/Config
226
227 # Start of targets
228
229 .PHONY: noargs
230 noargs: $(BIN)/toolcheck
231         @echo '===================================================='
232         @echo 'No target specified. To specify a target, do: '
233         @echo
234         @echo '    $(MAKE) bin/<rom-name>.<output-format> '
235         @echo
236         @echo 'where <output-format> is one of {zdsk, zrom, iso, liso, zlilo, zpxe, elf, com}'
237         @echo
238         @echo 'or: '
239         @echo
240         @echo '    $(MAKE) all<output-format>s'
241         @echo
242         @echo 'to generate all possible images of format <output-format>'
243         @echo
244         @echo 'For example, '
245         @echo
246         @echo '    make allzroms '
247         @echo
248         @echo 'will generate all possible .zrom (rom burnable) images, and'
249         @echo
250         @echo '    make allzdsks'
251         @echo
252         @echo 'will generate all possible .zdsk (bootable floppy) images, or'
253         @echo
254         @echo '===================================================='
255         @exit 1
256
257 $(BIN)/toolcheck:       Makefile Config
258         @if $(CC) -v 2>&1 | grep -is 'gcc version 2\.96' > /dev/null; \
259         then \
260                 echo 'gcc 2.96 is unsuitable for compiling Etherboot'; \
261                 echo 'Use gcc 2.95 or gcc 3.x instead'; \
262                 exit 1; \
263         else \
264                 touch $(BIN)/toolcheck; \
265         fi; \
266         if [ `perl -e 'use bytes; print chr(255)' | wc -c` = 2 ]; \
267         then \
268                 echo 'Your Perl version has a Unicode handling bug'; \
269                 echo 'To workaround, execute this before compiling Etherboot:'; \
270                 echo 'export LANG=$${LANG%.UTF-8}'; \
271                 exit 1; \
272         fi
273
274 include         arch/$(ARCH)/Makefile
275
276 # Common files
277
278 $(BLIB):        $(BOBJS)
279         $(AR) r $@ $(BOBJS)
280         $(RANLIB) $@
281
282 $(FILOLIB):     $(FILO_OBJS)
283         $(AR) r $@ $(FILO_OBJS)
284         $(RANLIB) $@
285
286 # LinuxBIOS support code
287 $(BIN)/linuxbios.o:     firmware/linuxbios/linuxbios.c include/etherboot.h include/dev.h firmware/linuxbios/linuxbios_tables.h
288
289 # Do not add driver specific dependencies here unless it's something the
290 # genrules.pl script *can't* deal with, i.e. if it is not C code.
291
292 $(FILO)/config.h: $(FILO)/Config
293         /bin/echo -e '/* GENERATED FILE, DO NOT EDIT */\n' >$@
294         sed -e 's/#.*//' -e '/=/!d' -e 's/\([^[:space:]]*\)[[:space:]]*=[[:space:]]*\(.*\).*/#define \1 \2/' -e 's/^#define \([^ ]*\) 0$$/#undef \1/' $^ >>$@
295
296 filo_version: $(FILO)/main/version.h
297
298 $(FILO)/main/version.h: FORCE
299         echo '#define PROGRAM_NAME "$(FILO_PROGRAM_NAME)"' > $@
300         echo '#define PROGRAM_VERSION "$(FILO_PROGRAM_VERSION) $(FILO_BUILD_INFO)"' >> $@
301
302 FORCE:
303
304
305 # Utilities
306
307 $(BIN)/lzhuf:   util/lzhuf.c
308         $(HOST_CC) -O2 -DENCODE -DDECODE -DMAIN -DVERBOSE -o $@ $<
309
310 # Roms file
311 # Builds almost silently because this rule is triggered for just about
312 # every modification to sources.
313
314 $(BIN)/Roms $(BIN)/NIC: genrules.pl Families $(SRCS)
315         @mkdir -p $(@D)
316         @echo Scanning for ROMs and dependencies...
317         @$(PERL) ./genrules.pl Families $(BIN)/NIC $(ARCH) $(SRCS) > $(BIN)/Roms
318
319 # Pattern Rules
320
321 # general rules for compiling/assembling source files
322 $(BIN)/%.o:     core/%.c $(MAKEDEPS)
323         $(CC) $(CFLAGS) -o $@ -c $<
324
325 $(BIN)/%.s:     core/%.c $(MAKEDEPS)
326         $(CC) $(CFLAGS) -S -o $@ -c $<
327
328 $(BIN)/%.o:     drivers/disk/%.c $(MAKEDEPS)
329         $(CC) $(CFLAGS) -o $@ -c $<
330
331 $(BIN)/%.o:     drivers/net/%.c $(MAKEDEPS)
332         $(CC) $(CFLAGS) -o $@ -c $<
333
334 $(BIN)/%.o:     firmware/linuxbios/%.c $(MAKEDEPS)
335         $(CC) $(CFLAGS) -o $@ -c $<
336
337 $(BIN)/%.o:     $(FILO)/drivers/%.c $(MAKEDEPS) $(FILO)/config.h
338         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
339
340 $(BIN)/%.o:     $(FILO)/fs/%.c $(MAKEDEPS) $(FILO)/config.h
341         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
342
343 $(BIN)/%.o:     $(FILO)/$(ARCH)/%.c $(MAKEDEPS) $(FILO)/config.h
344         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
345
346 $(BIN)/%.o:     $(FILO)/$(ARCH)/%.S $(MAKEDEPS) $(FILO)/config.h
347         $(CC) $(ASFLAGS_X) $(CPPFLAGS) -c $< -o $@
348
349 $(BIN)/%.o:     $(FILO)/main/%.c $(MAKEDEPS) $(FILO)/config.h filo_version
350         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
351
352 $(BIN)/%.o:     $(FILO)/usb/%.c $(MAKEDEPS) $(FILO)/config.h
353         $(CC) $(CFLAGS) -imacros $(FILO)/config.h -o $@ -c $<
354
355 # Rule for the super etherboot image.
356 $(BIN)/etherboot.o: $(DOBJS)
357         $(LD) $(LDFLAGS) -r $(DOBJS) -o $@
358
359 $(BIN)/etherboot-pci.o: $(PCIOBJS)
360         $(LD) $(LDFLAGS) -r $(PCIOBJS) -o $@
361
362 # General rules for generating runtime (rt) files
363 $(BIN)/%.rt.o:  $(BIN)/%.o $(START) $(BIN)/config.o $(LIBS) $(STDDEPS) $(MAKEDEPS)
364         $(LD) $(LDFLAGS) -r $(START) $(BIN)/config.o $< $(LIBS) -o $@
365
366 #   Rule for $(BIN)/%.FORMAT.rt is architecture and target-format specific
367
368 $(BIN)/%.rt.bin: $(BIN)/%.rt $(MAKEDEPS)
369         $(OBJCOPY) -O binary -R .prefix $< $@
370
371 $(BIN)/%.rt1.bin: $(BIN)/%.rt $(MAKEDEPS)
372         $(OBJCOPY) -O binary -j .text.nocompress $< $@
373
374 $(BIN)/%.rt2.bin: $(BIN)/%.rt $(MAKEDEPS)
375         $(OBJCOPY) -O binary -R .prefix -R .text.nocompress $< $@
376
377 # Rules for generating prefix binary files
378
379 #   Rule for $(BIN)/%.FORMAT.prf is architecture and target-format specific
380 $(BIN)/%.prf.bin: $(BIN)/%.prf $(MAKEDEPS)
381         $(OBJCOPY) -j .prefix -O binary $< $@
382
383 # general rule for .z (compressed binary code), may be overridden
384 $(BIN)/%.zbin: $(BIN)/%.bin $(BIN)/nrv2b $(MAKEDEPS)
385         $(BIN)/nrv2b e $< $@
386
387 # Housekeeping
388
389 clean:
390         $(RM) $(BIN)/*
391         $(RM) $(FILO)/config.h $(FILO)/main/version.h
392
393 ../index.html:  ../index.xhtml
394         (cd ..; m4 -P -DHOSTSITE=SOURCEFORGE index.xhtml > index.html)
395
396 ../index-berlios.html:  ../index.xhtml
397         (cd ..; m4 -P -DHOSTSITE=BERLIOS index.xhtml > index-berlios.html)
398
399 tarball: ../index.html ../index-berlios.html
400         (echo -n $(VERSION) ''; date -u +'%Y-%m-%d') > ../VERSION
401         (cd ../..; tar cf /tmp/etherboot-$(VERSION).tar --exclude CVS --exclude doc etherboot-$(VERSION))
402         bzip2 -9 < /tmp/etherboot-$(VERSION).tar > /tmp/etherboot-$(VERSION).tar.bz2
403         gzip -9 < /tmp/etherboot-$(VERSION).tar > /tmp/etherboot-$(VERSION).tar.gz
404
405 # Auto-incrementing build serial number.  Is auto-incremented for each
406 # make run that specifies a final image file (e.g. bin/undi.zpxe) as a
407 # target, or a target of the form "all*".  Enable via -DBUILD_SERIAL
408 # in Config.
409
410 ifneq ($(findstring -DBUILD_SERIAL,$(CFLAGS)),)
411
412 # If no make goals are specified, it means "make all"
413 REALGOALS = $(if $(MAKECMDGOALS),$(MAKECMDGOALS),all)
414
415 # Filter to see if there are any targets to trigger an auto-increment
416 BUILDGOALS = $(filter all,$(REALGOALS)) $(filter all%,$(REALGOALS)) \
417              $(foreach SUFFIX,$(SUFFIXES),$(filter %.$(SUFFIX),$(REALGOALS)))
418
419 ifneq ($(strip $(BUILDGOALS)),)
420 # This is an auto-incrementing build.  Forcibly rebuild .buildserial.h
421 # and mark config.o as depending on it to force its rebuilding.
422 bin/config.o : include/.buildserial.h
423 .PHONY : include/.buildserial.h
424 endif # BUILDGOALS
425
426 include/.buildserial.h :
427         @if [ ! -f $@ ]; then   echo '#define BUILD_SERIAL_NUM 0' > $@; fi
428         @perl -pi -e 's/(BUILD_SERIAL_NUM)\s+(\d+)/"$${1} ".($${2}+1)/e' $@
429
430 buildserial : include/.buildserial.h
431         @perl -n -e '/BUILD_SERIAL_NUM\s+(\d+)/ && ' \
432                 -e 'print "Build serial number is $$1\n";' $<
433
434 else # -DBUILD_SERIAL
435
436 buildserial : 
437         @echo Build serial number is disabled. Enable -DBUILD_SERIAL in Config.
438
439 endif # -DBUILD_SERIAL
440
441 bs : buildserial
442
443 version:
444         @echo $(VERSION)
445
446 romlimit:
447         @echo $(ROMLIMIT)
448
449 sources:
450         @echo $(SRCS)