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