e3991fe2490c03bb86455165c94b72175340737e
[mw/micromonitor-lm32.git] / umon_apps / lwip / makefile
1 #########################################################################
2
3 #  uMon/LWIP demonstration application.
4 #  Simple application that demonstrates how a generic uMon application
5 #  can run an HTTP server (or other TCP/IP servers).
6 #  Run 'make' to build the target-resident application, then run
7 #  'make html' or 'make html1' to install the necessary html files.
8 #  Both of these html file sets are used to demonstrate issuing uMon
9 #  commands via HTTP; one uses frames, one does not.
10 #
11 #  Similar to other uMon demo applications, the user must provide
12 #  the parameters below.  The CLOCK_MS value is used to tell the
13 #  application how many clock ticks represent one millisecond.
14 #  If this is set to zero, then the code will assume that the underlying
15 #  monitor is release 1.16 (or newer) which contains the mon_timer()
16 #  API hook;  otherwise it will use CLOCK_MS along with a hardware-specific
17 #  clock_time() function (as of this writing, available for PPC &
18 #  BLACKFIN) that returns the content of a hardware timer.
19 #
20
21 ARCH            =
22 MONCOMPTR       =
23 APPRAMBASE      =
24 TARGET_IP       =
25 CLOCK_MS        =
26
27 # For example...
28 #ARCH           = BLACKFIN
29 #MONCOMPTR      = 0x03f00004
30 #APPRAMBASE     = 0x100000
31 #TARGET_IP      = 135.222.138.21
32 #CLOCK_MS       = 0
33
34 #########################################################################
35 #
36 #  Nothing below this point should have to be changed.
37 #  This uMon/LWIP application requires only that the
38 #  CLOCK_MS value be set based on the target-specific
39 #  function 'clock_time()'.  It should be set to the
40 #  number of ticks that represents 1millisecond.
41 #
42
43 APPNAME         = app
44 NM                      = $(TOOL_PREFIX)-nm
45 AR                      = $(TOOL_PREFIX)-ar
46 LD                      = $(TOOL_PREFIX)-ld
47 ASM                     = $(TOOL_PREFIX)-as
48 CC                      = $(TOOL_PREFIX)-gcc
49 STRIP           = $(TOOL_PREFIX)-strip
50 OBJCOPY         = $(TOOL_PREFIX)-objcopy
51 OBJDUMP         = $(TOOL_PREFIX)-objdump
52 LIBGCC          = `$(CC) --print-libgcc-file-name`
53 LIBDIR          = $(LIBGCC:/libgcc.a=)
54 LIBPATH         = 
55 INCPATHS        = -I . -I ./net -I ./lwip/src/include/ipv4 \
56                           -I ./lwip/src/include -I ./lwip/src/include/netif \
57                           -I ./lwip/src/netif/ppp
58
59 ifeq ($(ARCH),MIPS)
60 TOOL_PREFIX     := mips-elf
61 CFLAGS          := -fno-builtin -G 0 -march=r4600 -mips3 -mno-abicalls \
62                           -fno-pic -c -g -O2 -Wall -EB $(INCPATHS)
63 CRT0            := crt0_mips.o
64 CPU                     := -D CPU_IS_MIPS=1
65 endif
66
67 ifeq ($(ARCH),PPC)
68 TOOL_PREFIX     := ppc-elf
69 CFLAGS          := -fno-builtin -mno-sdata -msoft-float \
70                            -c -Wall -O -g $(INCPATHS)
71 CRT0            := crt0_ppc.o
72 CPU                     := -D CPU_IS_PPC=1
73 LIBGCC          = `$(CC) --print-file-name=nof/libgcc.a`
74 endif
75
76 ifeq ($(ARCH),ARM)
77 TOOL_PREFIX     := arm-elf
78 CFLAGS          := -fno-builtin -mcpu=arm9tdmi \
79                            -c -Wall -O -g $(INCPATHS)
80 CRT0            := crt0_arm.o
81 CPU                     := -D CPU_IS_ARM=1
82 endif
83
84 ifeq ($(ARCH),BLACKFIN)
85 TOOL_PREFIX     := bfin-elf
86 CFLAGS          := -fno-builtin -mcsync-anomaly -c -O -Wall -g $(INCPATHS)
87 CRT0            := crt0_bfin.o
88 CPU                     := -D CPU_IS_BFIN=1
89 endif
90
91 ifeq ($(ARCH),MICROBLAZE)
92 TOOL_PREFIX     := C:/EDK/gnu/microblaze/nt/bin/mb
93 LIBPATH         := -L C:/xilinx/els_stuff/projects/avnet_spartan3_devkit/microblaze_0/lib
94 CFLAGS          := -fno-builtin -mno-xl-soft-mul -c -Wall -O -g $(INCPATHS)
95 CRT0            := crt0_mb.o
96 CPU                     := -D CPU_IS_MICROBLAZE=1
97 endif
98
99 ifeq ($(ARCH),COLDFIRE)
100 TOOL_PREFIX     := m68k-elf
101 CFLAGS          := -Wall -fno-builtin -msoft-float -m5200 -g -c $(INCPATHS)
102 CRT0            := crt0_cf.o
103 CPU                     := -D CPU_IS_68K=1
104 #LIBGCC         = `$(CC) -m5200 --print-libgcc-file-name`
105 LIBGCC          = /usr/lib/gcc-lib/m68k-elf/3.2/m5200/libgcc.a -L /usr/m68k-elf/lib/m5200
106 endif
107
108 BASE_OBJS=$(CRT0) main.o monlib.o
109
110 #
111 #########################################################################
112 #
113 NET_OBJS        = fs.o httpd.o monsrvr.o umonlwip.o
114
115 API_OBJS        = api_lib.o api_msg.o err.o netbuf.o netdb.o netifapi.o
116
117 CORE_OBJS       = dhcp.o dhcp.o dns.o init.o mem.o memp.o netif.o pbuf.o \
118                           raw.o stats.o sys.o tcp.o tcp_in.o tcp_out.o udp.o
119
120 IPV4_OBJS       = autoip.o icmp.o igmp.o inet.o inet_chksum.o ip.o \
121                           ip_addr.o ip_frag.o
122
123 SNMP_OBJS       = asn1_dec.o asn1_enc.o mib2.o mib_structs.o msg_in.o \
124                           msg_out.o
125
126 NETIF_OBJS      = etharp.o
127
128 PPP_OBJS        = auth.o chap.o chpms.o fsm.o ipcp.o lcp.o magic.o md5.o \
129                           pap.o ppp.o ppp_oe.o randm.o vj.o
130
131 LWIP_OBJS       = $(API_OBJS) $(CORE_OBJS) $(IPV4_OBJS) $(NETIF_OBJS)
132 OBJS            = $(LWIP_OBJS) $(NET_OBJS) $(BASE_OBJS)
133
134 #####
135 #
136 # $(APPNAME):
137 # Top level target builds the application.
138 #
139 $(APPNAME): varcheck $(OBJS) makefile
140         echo tools: $(TOOL_PREFIX)
141         $(LD) -e start -o $(APPNAME) -Ttext $(APPRAMBASE) $(OBJS) $(LIBPATH) -lc $(LIBGCC) 
142         $(OBJDUMP) --source --disassemble $(APPNAME) >$(APPNAME).dis
143         $(NM) --numeric-sort $(APPNAME) >$(APPNAME).sym
144         $(STRIP) $(APPNAME) 
145
146 #####
147 #
148 # Variable checks:
149 # Verify that the necessary variables have been set on the make
150 # command line.
151 #
152 varcheck:
153 ifndef ARCH
154         @echo Must specify ARCH=XXX on command line.
155         @exit 1
156 endif   
157 ifndef TOOL_PREFIX
158         @echo Invalid ARCH specification. Use PPC, ARM, MIPS, BLACKFIN or COLDFIRE.
159         @exit 1
160 endif   
161 ifeq ($(TOOL_PREFIX),-)
162         @echo Invalid ARCH specification. Use PPC, ARM, MIPS, BLACKFIN or COLDFIRE.
163         @exit 1
164 endif   
165 ifndef MONCOMPTR
166         @echo Must specify MONCOMPTR=XXX on command line.
167         @exit 1
168 endif   
169 ifndef APPRAMBASE
170         @echo Must specify APPRAMBASE=XXX on command line.
171         @exit 1
172 endif   
173
174 targetipcheck:
175 ifndef TARGET_IP
176         @echo Must specify TARGET_IP=IPADDRESS on command line.
177         @exit 1
178 endif   
179
180
181 #####
182 #
183 # Objects:
184 #
185 crt0_68k.o: crt0_68k.S
186         $(CC) $(CFLAGS) -o $@ crt0_68k.S
187
188 crt0_arm.o: crt0_arm.S
189         $(CC) $(CFLAGS) -o $@ crt0_arm.S
190
191 crt0_bfin.o: crt0_bfin.S
192         $(CC) $(CFLAGS) -o $@ crt0_bfin.S
193
194 crt0_mips.o: crt0_mips.S
195         $(CC) $(CFLAGS) -o $@ crt0_mips.S
196
197 crt0_mb.o: crt0_mb.S
198         $(CC) $(CFLAGS) -o $@ crt0_mb.S
199
200 crt0_ppc.o: crt0_ppc.S
201         $(CC) $(CFLAGS) -o $@ crt0_ppc.S
202
203 crt0_sh2.o: crt0_sh2.S
204         $(CC) $(CFLAGS) -o $@ crt0_sh2.S
205
206 main.o: main.c 
207         $(CC) $(CFLAGS) $(CPU) -D MONCOMPTR=$(MONCOMPTR) -o $@ main.c
208
209 monlib.o: monlib.c
210         $(CC) $(CFLAGS) -o $@ monlib.c
211
212
213 # To rebuild depends, add -MM to CFLAGS, then run make.
214 include depends
215
216 #########################################################################
217 #
218 # Dependencies:
219 #
220 fs.o:    ./net/fs.c
221                  $(CC) $(CFLAGS) ./net/fs.c
222
223 httpd.o:         ./net/httpd.c
224                  $(CC) $(CFLAGS) ./net/httpd.c
225
226 umonlwip.o:      ./net/umonlwip.c
227                  $(CC) $(CFLAGS) -D CLOCK_MS=$(CLOCK_MS) ./net/umonlwip.c
228
229 api_lib.o:       ./lwip/src/api/api_lib.c
230                  $(CC) $(CFLAGS) ./lwip/src/api/api_lib.c
231
232 api_msg.o:       ./lwip/src/api/api_msg.c
233                  $(CC) $(CFLAGS) ./lwip/src/api/api_msg.c
234
235 err.o:   ./lwip/src/api/err.c
236                  $(CC) $(CFLAGS) ./lwip/src/api/err.c
237
238 netbuf.o:        ./lwip/src/api/netbuf.c
239                  $(CC) $(CFLAGS) ./lwip/src/api/netbuf.c
240
241 netdb.o:         ./lwip/src/api/netdb.c
242                  $(CC) $(CFLAGS) ./lwip/src/api/netdb.c
243
244 netifapi.o:      ./lwip/src/api/netifapi.c
245                  $(CC) $(CFLAGS) ./lwip/src/api/netifapi.c
246
247 sockets.o:       ./lwip/src/api/sockets.c
248                  $(CC) $(CFLAGS) ./lwip/src/api/sockets.c
249
250 tcpip.o:         ./lwip/src/api/tcpip.c
251                  $(CC) $(CFLAGS) ./lwip/src/api/tcpip.c
252
253 dhcp.o:  ./lwip/src/core/dhcp.c
254                  $(CC) $(CFLAGS) ./lwip/src/core/dhcp.c
255
256 dns.o:   ./lwip/src/core/dns.c
257                  $(CC) $(CFLAGS) ./lwip/src/core/dns.c
258
259 init.o:  ./lwip/src/core/init.c
260                  $(CC) $(CFLAGS) ./lwip/src/core/init.c
261
262 autoip.o:        ./lwip/src/core/ipv4/autoip.c
263                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/autoip.c
264
265 icmp.o:  ./lwip/src/core/ipv4/icmp.c
266                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/icmp.c
267
268 igmp.o:  ./lwip/src/core/ipv4/igmp.c
269                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/igmp.c
270
271 inet.o:  ./lwip/src/core/ipv4/inet.c
272                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/inet.c
273
274 inet_chksum.o:   ./lwip/src/core/ipv4/inet_chksum.c
275                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/inet_chksum.c
276
277 ip.o:    ./lwip/src/core/ipv4/ip.c
278                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/ip.c
279
280 ip_addr.o:       ./lwip/src/core/ipv4/ip_addr.c
281                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/ip_addr.c
282
283 ip_frag.o:       ./lwip/src/core/ipv4/ip_frag.c
284                  $(CC) $(CFLAGS) ./lwip/src/core/ipv4/ip_frag.c
285
286 mem.o:   ./lwip/src/core/mem.c
287                  $(CC) $(CFLAGS) ./lwip/src/core/mem.c
288
289 memp.o:  ./lwip/src/core/memp.c
290                  $(CC) $(CFLAGS) ./lwip/src/core/memp.c
291
292 netif.o:         ./lwip/src/core/netif.c
293                  $(CC) $(CFLAGS) ./lwip/src/core/netif.c
294
295 pbuf.o:  ./lwip/src/core/pbuf.c
296                  $(CC) $(CFLAGS) ./lwip/src/core/pbuf.c
297
298 raw.o:   ./lwip/src/core/raw.c
299                  $(CC) $(CFLAGS) ./lwip/src/core/raw.c
300
301 asn1_dec.o:      ./lwip/src/core/snmp/asn1_dec.c
302                  $(CC) $(CFLAGS) ./lwip/src/core/snmp/asn1_dec.c
303
304 asn1_enc.o:      ./lwip/src/core/snmp/asn1_enc.c
305                  $(CC) $(CFLAGS) ./lwip/src/core/snmp/asn1_enc.c
306
307 mib2.o:  ./lwip/src/core/snmp/mib2.c
308                  $(CC) $(CFLAGS) ./lwip/src/core/snmp/mib2.c
309
310 mib_structs.o:   ./lwip/src/core/snmp/mib_structs.c
311                  $(CC) $(CFLAGS) ./lwip/src/core/snmp/mib_structs.c
312
313 msg_in.o:        ./lwip/src/core/snmp/msg_in.c
314                  $(CC) $(CFLAGS) ./lwip/src/core/snmp/msg_in.c
315
316 msg_out.o:       ./lwip/src/core/snmp/msg_out.c
317                  $(CC) $(CFLAGS) ./lwip/src/core/snmp/msg_out.c
318
319 stats.o:         ./lwip/src/core/stats.c
320                  $(CC) $(CFLAGS) ./lwip/src/core/stats.c
321
322 sys.o:   ./lwip/src/core/sys.c
323                  $(CC) $(CFLAGS) ./lwip/src/core/sys.c
324
325 tcp.o:   ./lwip/src/core/tcp.c
326                  $(CC) $(CFLAGS) ./lwip/src/core/tcp.c
327
328 tcp_in.o:        ./lwip/src/core/tcp_in.c
329                  $(CC) $(CFLAGS) ./lwip/src/core/tcp_in.c
330
331 tcp_out.o:       ./lwip/src/core/tcp_out.c
332                  $(CC) $(CFLAGS) ./lwip/src/core/tcp_out.c
333
334 udp.o:   ./lwip/src/core/udp.c
335                  $(CC) $(CFLAGS) ./lwip/src/core/udp.c
336
337 etharp.o:        ./lwip/src/netif/etharp.c
338                  $(CC) $(CFLAGS) ./lwip/src/netif/etharp.c
339
340 ethernetif.o:    ./lwip/src/netif/ethernetif.c
341                  $(CC) $(CFLAGS) ./lwip/src/netif/ethernetif.c
342
343 loopif.o:        ./lwip/src/netif/loopif.c
344                  $(CC) $(CFLAGS) ./lwip/src/netif/loopif.c
345
346 auth.o:  ./lwip/src/netif/ppp/auth.c
347                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/auth.c
348
349 chap.o:  ./lwip/src/netif/ppp/chap.c
350                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/chap.c
351
352 chpms.o:         ./lwip/src/netif/ppp/chpms.c
353                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/chpms.c
354
355 fsm.o:   ./lwip/src/netif/ppp/fsm.c
356                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/fsm.c
357
358 ipcp.o:  ./lwip/src/netif/ppp/ipcp.c
359                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/ipcp.c
360
361 lcp.o:   ./lwip/src/netif/ppp/lcp.c
362                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/lcp.c
363
364 magic.o:         ./lwip/src/netif/ppp/magic.c
365                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/magic.c
366
367 md5.o:   ./lwip/src/netif/ppp/md5.c
368                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/md5.c
369
370 pap.o:   ./lwip/src/netif/ppp/pap.c
371                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/pap.c
372
373 ppp.o:   ./lwip/src/netif/ppp/ppp.c
374                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/ppp.c
375
376 ppp_oe.o:        ./lwip/src/netif/ppp/ppp_oe.c
377                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/ppp_oe.c
378
379 randm.o:         ./lwip/src/netif/ppp/randm.c
380                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/randm.c
381
382 vj.o:    ./lwip/src/netif/ppp/vj.c
383                  $(CC) $(CFLAGS) ./lwip/src/netif/ppp/vj.c
384
385 slipif.o:        ./lwip/src/netif/slipif.c
386                  $(CC) $(CFLAGS) ./lwip/src/netif/slipif.c
387
388 monsrvr.o:       ./net/monsrvr.c
389                  $(CC) $(CFLAGS) ./net/monsrvr.c
390
391
392 ##########################################################################
393 #
394 # UTILITIES:
395 #
396 #####
397 #
398 # clean:
399 # Remove all files created by this make.
400 #
401 clean:
402         find . -name '*.o' -exec rm {} \;
403         rm -f $(APPNAME) $(APPNAME).ezip $(APPNAME).sym $(APPNAME).dis symtbl
404         rm -f cscope.out tags cscope.files
405
406 #####
407 #
408 # sym:
409 # Create and download the symbol table file that can be used by uMon
410 # with this application...
411 #
412 sym: targetipcheck
413         @if ! test -f $(APPNAME).sym; then echo Must build $(APPNAME) first; exit 1; fi
414         monsym -p0x $(APPNAME).sym >symtbl
415         ttftp $(TARGET_IP) put symtbl
416
417
418
419         
420 #####
421 #
422 # dld:
423 # Use the ttftp tool (supplied with MicroMonitor) to download the
424 # application to the target.
425 #
426 dld: targetipcheck
427         @if ! test -f $(APPNAME); then echo Must build $(APPNAME) first; exit 1; fi
428         moncmd -q -w2 $(TARGET_IP) reset
429         ttftp $(TARGET_IP) put $(APPNAME) $(APPNAME),E
430         moncmd -w0 $(TARGET_IP) @app
431
432 #####
433 #
434 # zdld:
435 # Compress the elf file using the 'elf' tool (supplied with MicroMonitor)
436 # The output of this is "$(APPNAME).ezip", then download that compressed file.
437 #
438 zdld: targetipcheck 
439         @if ! test -f $(APPNAME); then echo Must build $(APPNAME) first; exit 1; fi
440         elf -z6 $(APPNAME)
441         ttftp $(TARGET_IP) put $(APPNAME).ezip $(APPNAME),Ec
442
443 #####
444 #
445 # dis:
446 # Build a disassembly of the image...
447 #
448 dis:
449         $(OBJDUMP) --source --disassemble $(APPNAME) >$(APPNAME).dis
450
451 #####
452 #
453 # html/html1:
454 # Two slightly different versions of html file sets.
455 # Both are used to provide an HTTP interface to uMon's command set.
456 # One (htmldir) uses frames, the other does not.
457 #
458 html:
459         (cd htmldir; ./loadhtml $(TARGET_IP); cd -)
460
461 html1:
462         (cd htmldir1; ./loadhtml $(TARGET_IP); cd -)
463
464 #####
465 #
466 # cscope:
467 # Remove all files created by this make.
468 #
469 cscope:
470         find . -name '*.[chS]' | grep -v ipv6 | grep -v ppp | grep -v snmp >cscope.files
471         ctags --file-tags=yes -n -L cscope.files
472