http://downloads.netgear.com/files/GPL/DM111P(B)_v3.29u_src.tar.gz
[bcm963xx.git] / Makefile
1 #****************************************************************************
2 #
3 #  Copyright (c) 2001, 2002, 2003, 2004  Broadcom Corporation
4 #  All Rights Reserved
5 #  No portions of this material may be reproduced in any form without the
6 #  written permission of:
7 #          Broadcom Corporation
8 #          16251 Laguna Canyon Road
9 #          Irvine, California 92618
10 #  All information contained in this document is Broadcom Corporation
11 #  company private, proprietary, and trade secret.
12 #
13 #****************************************************************************
14
15 # Top-level Makefile for all commengine xDSL platforms
16
17 include version.make
18
19 BRCM_RELEASETAG=$(BRCM_VERSION).$(BRCM_RELEASE)L.$(BRCM_EXTRAVERSION)
20
21
22 ###########################################
23 #
24 # Define Basic Variables
25 #
26 ###########################################
27 BUILD_DIR = $(shell pwd)
28 KERNEL_VER = 2.6
29 ifeq ($(strip $(KERNEL_VER)),2.6)
30 INC_KERNEL_BASE = $(BUILD_DIR)/kernel
31 ORIGINAL_KERNEL = linuxmips.tar.bz2
32 endif
33 KERNEL_DIR = $(INC_KERNEL_BASE)/linux
34 BRCMDRIVERS_DIR = $(BUILD_DIR)/bcmdrivers
35 USERAPPS_DIR = $(BUILD_DIR)/userapps
36 LINUXDIR = $(INC_KERNEL_BASE)/linux
37 HOSTTOOLS_DIR = $(BUILD_DIR)/hostTools
38 IMAGES_DIR = $(BUILD_DIR)/images
39 TARGETS_DIR = $(BUILD_DIR)/targets
40 DEFAULTCFG_DIR = $(TARGETS_DIR)/defaultcfg
41 FSSRC_DIR = $(TARGETS_DIR)/fs.src
42 BRCM_MODEL_NAME=$(PROFILE)
43 CFE_FILE = $(TARGETS_DIR)/cfe/cfe6338_192_168_0_1.bin
44 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
45           else if [ -x /bin/bash ]; then echo /bin/bash; \
46           else echo sh; fi ; fi)
47 GENDEFCONFIG_CMD = $(HOSTTOOLS_DIR)/scripts/gendefconfig
48 RUN_NOISE=0
49
50
51
52 ###########################################
53 #
54 # Import Build Profiles
55 #
56 ###########################################
57 BRCM_BOARD=bcm963xx
58 LAST_PROFILE=$(shell find targets -name vmlinux | sed -e "s?targets/??" -e "s?/.*??" -e "q")
59 ifeq ($(strip $(PROFILE)),)
60 PROFILE=$(LAST_PROFILE)
61 export PROFILE
62 endif
63 ifneq ($(strip $(PROFILE)),)
64 include $(TARGETS_DIR)/$(PROFILE)/$(PROFILE)
65 export BRCM_CHIP
66 export BRCM_SDRAM_SIZE
67 export BRCM_FLASH_SIZE
68 export BRCM_FLASHPSI_SIZE
69 export BRCM_MODEL_NAME
70 export BRCM_DRIVER_USB BRCM_DRIVER_ETHERNET_CONFIG
71 export BRCM_DEFAULTCFG
72 export BRCM_KERNEL_NF_FIREWALL BRCM_KERNEL_NF_MANGLE BRCM_KERNEL_NF_NAT
73 endif
74
75 ###########################################
76 #
77 # Define Toolchain
78 #
79 ###########################################
80 ifeq ($(strip $(BRCM_UCLIBC)),y)
81 NTC=1
82 ifeq ($(strip $(NTC)),1)
83 TOOLCHAIN=/opt/toolchains/uclibc-crosstools_gcc-3.4.2_uclibc-20050428
84 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-linux-uclibc-
85 else
86 TOOLCHAIN=/opt/toolchains/uclibc
87 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-uclibc-
88 endif
89 else
90 TOOLCHAIN=/usr/crossdev/mips
91 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-linux-
92 endif
93
94
95
96 AR              = $(CROSS_COMPILE)ar
97 AS              = $(CROSS_COMPILE)as
98 LD              = $(CROSS_COMPILE)ld
99 CC              = $(CROSS_COMPILE)gcc
100 CXX             = $(CROSS_COMPILE)g++
101 CPP             = $(CROSS_COMPILE)cpp
102 NM              = $(CROSS_COMPILE)nm
103 STRIP           = $(CROSS_COMPILE)strip
104 SSTRIP          = $(CROSS_COMPILE)sstrip
105 OBJCOPY         = $(CROSS_COMPILE)objcopy
106 OBJDUMP         = $(CROSS_COMPILE)objdump
107 RANLIB          = $(CROSS_COMPILE)ranlib
108
109 LIB_PATH        = $(TOOLCHAIN)/mips-linux/lib
110 LIBDIR          = $(TOOLCHAIN)/mips-linux/lib
111 LIBCDIR         = $(TOOLCHAIN)/mips-linux
112
113 ###########################################
114 #
115 # Application-specific settings
116 #
117 ###########################################
118 INSTALL_DIR = $(TARGETS_DIR)/fs.src
119 TARGET_FS = $(TARGETS_DIR)/$(PROFILE)/fs
120 PROFILE_DIR = $(TARGETS_DIR)/$(PROFILE)
121 PROFILE_PATH = $(TARGETS_DIR)/$(PROFILE)/$(PROFILE)
122 VENDOR_NAME = bcm
123 FS_KERNEL_IMAGE_NAME = $(VENDOR_NAME)$(PROFILE)_fs_kernel
124 CFE_FS_KERNEL_IMAGE_NAME = $(VENDOR_NAME)$(PROFILE)_cfe_fs_kernel
125 FLASH_IMAGE_NAME = $(VENDOR_NAME)$(PROFILE)_flash_image
126 INC_BRCMDRIVER_PUB_PATH=$(BRCMDRIVERS_DIR)/opensource/include
127 INC_BRCMDRIVER_PRIV_PATH=$(BRCMDRIVERS_DIR)/broadcom/include
128 INC_BRCMBOARDPARMS_PATH=$(TARGETS_DIR)/boardparms
129 INC_ENDPOINT_PATH=$(BRCMDRIVERS_DIR)/broadcom/char/endpoint/bcm9$(BRCM_CHIP)/inc
130 #INC_ADSLDRV_PATH=$(BRCMDRIVERS_DIR)/broadcom/char/adsl/bcm9$(BRCM_CHIP)
131 INC_ADSLDRV_PATH=$(BRCMDRIVERS_DIR)/broadcom/char/adsl/impl1
132 BROADCOM_CFM_DIR=$(BROADCOM_DIR)/cfm
133 INC_BRCMCFM_PATH=$(BROADCOM_CFM_DIR)/inc
134
135 # Michael: this save current config to default config should be enable for every model
136 export BRCM_CFG_XFER_TO_FACDEFLT=y
137
138
139 ifeq ($(strip $(BRCM_PROFILER_ENABLED)),y)
140 export BRCM_PROFILER_TOOL=1
141 else
142 export BRCM_PROFILER_TOOL=0
143 endif
144
145 #Set up ADSL standard
146 export ADSL=$(BRCM_ADSL_STANDARD)
147
148 #swda add,04/07/2005
149 #Set up ADSL supporting line modes
150 export BRCM_DSL_MODE_GDMT
151 export BRCM_DSL_MODE_GLITE
152 export BRCM_DSL_MODE_T1413
153 export BRCM_DSL_MODE_ADSL2
154 export BRCM_DSL_MODE_READSL2
155 export BRCM_DSL_MODE_ADSL2PLUS
156 export BRCM_DSL_MODE_ANNEXM
157 export BRCM_DSL_MODE_BITSWAP
158 export BRCM_DSL_MODE_SRA
159
160 #Set up ADSL version
161 export ADSL_VERSION=$(BRCM_ADSL_VERSION)
162
163 export WAN_LED_BLINKING
164
165 #michael add
166 #Use chipId to decide what the ADSL config option on html
167 export CHIP_ADSL_VERSION=$(BRCM_ADSL_DRIVER)
168
169 #Set up ADSL_PHY_MODE  {file | obj}
170 export ADSL_PHY_MODE=file
171
172 #Set up ADSL_SELF_TEST
173 export ADSL_SELF_TEST=$(BRCM_ADSL_SELF_TEST)
174
175 ###########################################
176 #
177 # Complete list of applications
178 #
179 ###########################################
180 export OPENSOURCE_DIR=$(USERAPPS_DIR)/opensource
181 SUBDIRS_OPENSOURCE = $(OPENSOURCE_DIR)/atm2684/pvc2684ctl \
182         $(OPENSOURCE_DIR)/bridge-utils \
183         $(OPENSOURCE_DIR)/ppp/pppoe \
184         $(OPENSOURCE_DIR)/udhcp \
185         $(OPENSOURCE_DIR)/iptables \
186         $(OPENSOURCE_DIR)/ebtables \
187         $(OPENSOURCE_DIR)/reaim  \
188         $(OPENSOURCE_DIR)/iproute2  \
189         $(OPENSOURCE_DIR)/gdbserver  \
190         $(OPENSOURCE_DIR)/libosip2 \
191         $(OPENSOURCE_DIR)/siproxd \
192         $(OPENSOURCE_DIR)/zebra  \
193         $(OPENSOURCE_DIR)/net-snmp  \
194         $(OPENSOURCE_DIR)/ftpd \
195         $(OPENSOURCE_DIR)/libcreduction \
196         $(OPENSOURCE_DIR)/busybox \
197         $(OPENSOURCE_DIR)/dproxy \
198         $(OPENSOURCE_DIR)/httpc \
199         $(OPENSOURCE_DIR)/mpd
200
201 #In future, we need to add soap when it
202 #is decoupled from cli
203
204 # Andy porting from 2.21.5, 2005/04/14
205 export BROADCOM_DIR=$(USERAPPS_DIR)/broadcom
206 NEED_CHG_ACCESSREMOTE = "0"
207 HTML_DIR = $(BROADCOM_DIR)/cfm/html.NETGEAR
208 NEED_MOVE = "0"
209 export BROADCOM_DIR=$(USERAPPS_DIR)/broadcom
210 SUBDIRS_BROADCOM = $(BROADCOM_DIR)/nvram \
211         $(BROADCOM_DIR)/cfm \
212         $(BROADCOM_DIR)/upnp/router/upnp \
213         $(BROADCOM_DIR)/nas \
214         $(BROADCOM_DIR)/wlctl \
215         $(BROADCOM_DIR)/wlenablectrl \
216         $(BROADCOM_DIR)/autoprovisionlan \
217         $(BROADCOM_DIR)/atmctl \
218         $(BROADCOM_DIR)/adslctl \
219         $(BROADCOM_DIR)/netctl \
220         $(BROADCOM_DIR)/dnsprobe \
221         $(BROADCOM_DIR)/igmp \
222         $(BROADCOM_DIR)/dhcpr \
223         $(BROADCOM_DIR)/sntp \
224         $(BROADCOM_DIR)/ippd \
225         $(BROADCOM_DIR)/ddnsd \
226         $(BROADCOM_DIR)/ethctl \
227         $(BROADCOM_DIR)/hotplug \
228         $(BROADCOM_DIR)/epittcp \
229         $(BROADCOM_DIR)/snmp \
230         $(BROADCOM_DIR)/ses
231
232 SUBDIRS_APP = $(SUBDIRS_BROADCOM) $(SUBDIRS_OPENSOURCE)
233 SUBDIRS = $(foreach dir, $(SUBDIRS_APP), $(shell if [ -d "$(dir)" ]; then echo $(dir); fi))
234
235 OPENSOURCE_APPS = pvc2684ctl pvc2684d brctl pppd udhcp iptables ebtables httpc mpd \
236                   reaim libosip2 siproxd snmp zebra bftpd busybox dproxy iproute2 gdbserver
237
238 BROADCOM_APPS = nvram cfm upnp nas wlctl wlenablectrl autoprovisionlan atmctl adslctl netctl dnsprobe \
239                 igmp dhcpr diagapp sntp ddnsd ilmi ippd hotplug ethctl epittcp
240
241 ifneq ($(strip $(BUILD_SIGNATURE_RSA)),)
242    export BUILD_SIGNATURE_RSA
243 endif
244
245 LIBC_OPTIMIZATION = libcreduction
246
247 ifneq ($(strip $(BUILD_PPP_AUTH_LIMIT)),)
248    export BUILD_PPP_AUTH_LIMIT
249 endif
250
251 BUSYBOX_DIR = $(OPENSOURCE_DIR)/busybox
252
253 BRCMAPPS = $(BROADCOM_APPS) $(OPENSOURCE_APPS) $(LIBC_OPTIMIZATION)
254
255 all: sanity_check profile_check kernelbuild modbuild app hosttools buildimage
256
257 menuconfig:
258         @cd $(INC_KERNEL_BASE); \
259         if [ ! -e linux/CREDITS ]; then \
260           echo Untarring original Linux kernel source...; \
261           (tar xkfj $(ORIGINAL_KERNEL) 2> /dev/null || true); \
262         fi
263         $(MAKE) -C $(KERNEL_DIR)/scripts/lxdialog HOSTCC=gcc
264         $(CONFIG_SHELL) $(HOSTTOOLS_DIR)/scripts/Menuconfig $(TARGETS_DIR)/config.in
265
266 sanity_check:
267         @if [ "$(PROFILE)" = "" ]; then \
268           echo You need to specify build profile name from $(TARGETS_DIR) using 'make PROFILE=<profile name>...'; exit 1; \
269         fi
270
271 profile_check:
272         @if [ "$(LAST_PROFILE)" != "" ] && [ "$(LAST_PROFILE)" != "$(PROFILE)" ]; then \
273                 echo "The specified profile, $(PROFILE), differs from the last one built, $(LAST_PROFILE)."; \
274                 echo "The entire image must be rebuilt."; \
275                 read -p "Press ENTER to rebuild the entire image or CTRL-C to abort. " ; \
276                 $(MAKE) PROFILE=$(LAST_PROFILE) clean; \
277                 $(MAKE) PROFILE=$(PROFILE); \
278                 echo "Ignore the make exit error, Error 1"; \
279                 exit 1; \
280         fi
281
282 $(KERNEL_DIR)/vmlinux:
283         $(GENDEFCONFIG_CMD) $(PROFILE_PATH)
284         cd $(KERNEL_DIR); \
285         cp -f $(KERNEL_DIR)/arch/mips/defconfig $(KERNEL_DIR)/.config; \
286         $(MAKE) oldconfig; $(MAKE); $(MAKE) modules_install
287
288 kernelbuild:
289 ifeq ($(wildcard $(KERNEL_DIR)/vmlinux),)
290         @cd $(INC_KERNEL_BASE); \
291         if [ ! -e linux/CREDITS ]; then \
292           echo Untarring original Linux kernel source...; \
293           (tar xkfj $(ORIGINAL_KERNEL) 2> /dev/null || true); \
294         fi
295         $(GENDEFCONFIG_CMD) $(PROFILE_PATH)
296         cd $(KERNEL_DIR); \
297         cp -f $(KERNEL_DIR)/arch/mips/defconfig $(KERNEL_DIR)/.config; \
298         $(MAKE) oldconfig; $(MAKE)
299 else
300         cd $(KERNEL_DIR); $(MAKE)
301 endif
302
303 kernel: profile_check kernelbuild hosttools buildimage
304
305 ifeq ($(strip $(VOXXXLOAD)),1)
306 modbuild: touch_voice_files
307         cd $(KERNEL_DIR); $(MAKE) modules && $(MAKE) modules_install
308 else
309 modbuild:
310         cd $(KERNEL_DIR); $(MAKE) modules && $(MAKE) modules_install
311 endif
312
313 modules: profile_check modbuild hosttools buildimage
314
315 app: profile_check prebuild $(BRCMAPPS) hosttools buildimage
316
317 prebuild:
318         mkdir -p $(INSTALL_DIR)/bin $(INSTALL_DIR)/lib
319
320 # touch_voice_files doesn't clean up voice, just enables incremental build of voice code
321 touch_voice_files:
322         find bcmdrivers/broadcom/char/endpoint/ \( -name '*.o' -o -name '*.a' -o -name '*.lib' -o -name '*.ko' -o -name '*.cmd' -o -name '.*.cmd' -o -name '*.c' -o -name '*.mod' \) -print -exec rm -f "{}" ";"
323         rm -rf kernel/linux/.tmp_versions/endpointdd.mod
324         rm -rf kernel/linux/arch/mips/defconfig
325         rm -rf kernel/linux/include/config/bcm/endpoint/
326         rm -rf kernel/linux/include/asm-mips/offset.h
327         rm -rf kernel/linux/include/asm-mips/reg.h
328         find kernel/linux/lib/ -name '*.o' -print -exec rm -f "{}" ";"
329         find kernel/linux/lib/ -name '*.lib' -print -exec rm -f "{}" ";"
330
331 # Build user applications depending on if they are
332 # specified in the profile
333 ifneq ($(strip $(BUILD_PVC2684CTL)),)
334 export BUILD_PVC2684D=$(BUILD_PVC2684CTL)
335 pvc2684d:
336 pvc2684ctl:
337         $(MAKE) -C $(OPENSOURCE_DIR)/atm2684/pvc2684ctl $(BUILD_PVC2684CTL)
338 else
339 pvc2684ctl:
340 endif
341
342 ifneq ($(strip $(BUILD_BRCTL)),)
343 brctl:
344         cd $(OPENSOURCE_DIR);   (tar xkfj bridge-utils.tar.bz2 2> /dev/null || true)
345         $(MAKE) -C $(OPENSOURCE_DIR)/bridge-utils $(BUILD_BRCTL)
346 else
347 brctl:
348 endif
349
350 ifneq ($(strip $(BUILD_VCONFIG)),)
351 export BUILD_VCONFIG=y
352 endif
353
354 ifneq ($(strip $(BUILD_CFM)),)
355
356 ifneq ($(strip $(BUILD_CFM_MENU)),)
357 export BUILD_CFM_MENU=y
358 endif
359
360 cfm:
361 ifneq ($(strip $(BUILD_SIGNATURE_RSA)),)
362         $(MAKE) -C $(BROADCOM_DIR)/cfm/web/sigmak
363 endif
364         $(MAKE) -C $(BROADCOM_DIR)/cfm $(BUILD_CFM)
365 else
366 cfm:
367 endif
368
369 # iptables is dependent on kernel netfilter modules
370 ifneq ($(strip $(BRCM_KERNEL_NETFILTER)),)
371 ifneq ($(strip $(BUILD_IPTABLES)),)
372 iptables:
373         cd $(OPENSOURCE_DIR);   (tar xkfj iptables.tar.bz2 2> /dev/null || true)
374         $(MAKE) -C $(OPENSOURCE_DIR)/iptables $(BUILD_IPTABLES)
375 iptables-build:
376         cd $(OPENSOURCE_DIR);   (tar xkfj iptables.tar.bz2 2> /dev/null || true)
377         $(MAKE) -C $(OPENSOURCE_DIR)/iptables static
378 else
379 iptables:
380 endif
381 else
382 iptables:
383         @echo Warning: You need to enable netfilter in the kernel !!!!!
384 endif
385
386 ifneq ($(strip $(BUILD_EBTABLES)),)
387 ebtables:
388         cd $(OPENSOURCE_DIR);   (tar xkfj ebtables.tar.bz2 2> /dev/null || true)
389         $(MAKE) -C $(OPENSOURCE_DIR)/ebtables $(BUILD_EBTABLES)
390 else
391 ebtables:
392 endif
393
394 ifneq ($(strip $(BUILD_PPPD)),)
395 pppd:
396         $(MAKE) -C $(OPENSOURCE_DIR)/ppp/pppoe $(BUILD_PPPD)
397 else
398 pppd:
399 endif
400
401 ifneq ($(strip $(BUILD_REAIM)),)
402 reaim:
403         cd $(OPENSOURCE_DIR);   (tar xkfj reaim.tar.bz2 2> /dev/null || true)
404         $(MAKE) -C $(OPENSOURCE_DIR)/reaim $(BUILD_REAIM)
405 else
406 reaim:
407 endif
408
409 ifneq ($(strip $(BRCM_KERNEL_NETQOS)),)
410 iproute2:
411         cd $(OPENSOURCE_DIR);   (tar xkfj iproute2.tar.bz2 2> /dev/null || true)
412         $(MAKE) -C $(OPENSOURCE_DIR)/iproute2 dynamic
413 else
414
415 ifneq ($(strip $(BRCM_KERNEL_DN_IPQOS)),)
416 iproute2:       
417         cd $(OPENSOURCE_DIR);   (tar xkfj iproute2.tar.bz2 2> /dev/null || true)
418         $(MAKE) -C $(OPENSOURCE_DIR)/iproute2 dynamic   
419 else
420 iproute2:
421 endif#BRCM_KERNEL_DN_IPQOS
422
423 endif#BRCM_KERNEL_NETQOS
424
425 ifneq ($(strip $(BUILD_GDBSERVER)),)
426 gdbserver:
427         install -m 755 $(TOOLCHAIN)/mips-linux-uclibc/target-apps/usr/bin/gdbserver $(INSTALL_DIR)/bin 
428         $(STRIP) $(INSTALL_DIR)/bin/gdbserver
429 else
430 gdbserver:
431 endif
432
433 ifneq ($(strip $(BUILD_ETHWAN)),)
434 export BUILD_ETHWAN=y
435 endif
436
437 ifneq ($(strip $(BUILD_UDHCP)),)
438 udhcp:
439         $(MAKE) -C $(OPENSOURCE_DIR)/udhcp $(BUILD_UDHCP)
440 else
441 udhcp:
442 endif
443
444 # UPNP is dependent on iptables
445 ifneq ($(strip $(BUILD_IPTABLES)),)
446 ifneq ($(strip $(BUILD_UPNP)),)
447 upnp: iptables-build
448         $(MAKE) -C $(BROADCOM_DIR)/upnp/router/upnp  $(BUILD_UPNP)
449 else
450 upnp:
451 endif
452 else
453 upnp:
454         @echo Warning: You need to build iptables first !!!!!
455 endif
456
457
458 ifneq ($(strip $(BUILD_SIPROXD)),)
459 siproxd:
460         cd $(OPENSOURCE_DIR);   (tar xkfj siproxd.tar.bz2 2> /dev/null || true)
461         $(MAKE) -C $(OPENSOURCE_DIR)/siproxd $(BUILD_SIPROXD)
462 libosip2:
463         cd $(OPENSOURCE_DIR);   (tar xkfj libosip2.tar.bz2 2> /dev/null || true)
464         $(MAKE) -C $(OPENSOURCE_DIR)/libosip2
465 else
466 siproxd:
467 libosip2:
468 endif
469
470 ifneq ($(strip $(BUILD_SNMP)),)
471
472 ifneq ($(strip $(BUILD_SNMP_SET)),)
473 export BUILD_SNMP_SET=1
474 else
475 export BUILD_SNMP_SET=0
476 endif
477
478 ifneq ($(strip $(BUILD_SNMP_ADSL_MIB)),)
479 export BUILD_SNMP_ADSL_MIB=1
480 else
481 export BUILD_SNMP_ADSL_MIB=0
482 endif
483
484 ifneq ($(strip $(BUILD_SNMP_ATM_MIB)),)
485 export BUILD_SNMP_ATM_MIB=1
486 else
487 export BUILD_SNMP_ATM_MIB=0
488 endif
489
490 ifneq ($(strip $(BUILD_SNMP_AT_MIB)),)
491 export BUILD_SNMP_AT_MIB=1
492 else
493 export BUILD_SNMP_AT_MIB=0
494 endif
495
496 ifneq ($(strip $(BUILD_SNMP_SYSOR_MIB)),)
497 export BUILD_SNMP_SYSOR_MIB=1
498 else
499 export BUILD_SNMP_SYSOR_MIB=0
500 endif
501
502 ifneq ($(strip $(BUILD_SNMP_TCP_MIB)),)
503 export BUILD_SNMP_TCP_MIB=1
504 else
505 export BUILD_SNMP_TCP_MIB=0
506 endif
507
508 ifneq ($(strip $(BUILD_SNMP_UDP_MIB)),)
509 export BUILD_SNMP_UDP_MIB=1
510 else
511 export BUILD_SNMP_UDP_MIB=0
512 endif
513
514 ifneq ($(strip $(BUILD_SNMP_IP_MIB)),)
515 export BUILD_SNMP_IP_MIB=1
516 else
517 export BUILD_SNMP_IP_MIB=0
518 endif
519
520 ifneq ($(strip $(BUILD_SNMP_ICMP_MIB)),)
521 export BUILD_SNMP_ICMP_MIB=1
522 else
523 export BUILD_SNMP_ICMP_MIB=0
524 endif
525
526 ifneq ($(strip $(BUILD_SNMP_SNMP_MIB)),)
527 export BUILD_SNMP_SNMP_MIB=1
528 else
529 export BUILD_SNMP_SNMP_MIB=0
530 endif
531
532 ifneq ($(strip $(BUILD_SNMP_ATMFORUM_MIB)),)
533 export BUILD_SNMP_ATMFORUM_MIB=1
534 else
535 export BUILD_SNMP_ATMFORUM_MIB=0
536 endif
537
538 ifneq ($(strip $(BRCM_SNMP)),)
539 export BUILD_SNMP_CHINA_TELECOM_CPE_MIB=0
540 endif
541
542 snmp:
543 ifneq ($(strip $(BRCM_SNMP)),)
544 ##      $(MAKE) -C $(BROADCOM_DIR)/snmp $(BUILD_SNMP)
545 else
546         cd $(OPENSOURCE_DIR);   (tar xkfj net-snmp.tar.bz2 2> /dev/null || true)
547         $(MAKE) -C $(OPENSOURCE_DIR)/net-snmp $(BUILD_SNMP)
548 endif
549 else
550 snmp:
551 endif
552
553 ifneq ($(strip $(BUILD_ILMI)),)
554 ilmi:
555         cd $(OPENSOURCE_DIR);   (tar xkfj net-snmp.tar.bz2 2> /dev/null || true)
556         $(MAKE) -C $(BROADCOM_DIR)/ilmi $(BUILD_ILMI)
557 else
558 ilmi:
559 endif
560
561
562 # Leave it for the future when soap server is decoupled from cfm
563 ifneq ($(strip $(BUILD_SOAP)),)
564 ifeq ($(strip $(BUILD_SOAP_VER)),2)
565 soapserver:
566         $(MAKE) -C $(BROADCOM_DIR)/SoapToolkit/SoapServer $(BUILD_SOAP)
567 else
568 soap:
569         $(MAKE) -C $(BROADCOM_DIR)/soap $(BUILD_SOAP)
570 endif
571 else
572 soap:
573 endif
574
575 ifneq ($(strip $(BUILD_NAS)),)
576 export WIRELESS=1
577 nas:
578         $(MAKE) -C $(BROADCOM_DIR)/nas $(BUILD_NAS)
579
580 #add hotplug here, for nas use only
581 hotplug:
582         $(MAKE) -C $(BROADCOM_DIR)/hotplug $(BUILD_NAS)
583         
584 else
585 export WIRELESS=0
586 nas:
587 #add hotplug here, for nas use only
588 hotplug:
589 endif
590
591 ifneq ($(strip $(BUILD_WLCTL)),)
592 export WIRELESS=1
593 wlctl:
594         $(MAKE) -C $(BROADCOM_DIR)/wlctl $(BUILD_WLCTL)
595 else
596 export WIRELESS=0
597 wlctl:
598 endif
599
600 ifneq ($(strip $(WLAN_ENABLE_CTRL_BUTTON)),)
601 wlenablectrl:
602         $(MAKE) -C $(BROADCOM_DIR)/wlenablectrl dynamic
603 else
604 wlenablectrl:
605 endif
606
607 #Always compile Ethernet control utility
608 ethctl:
609         $(MAKE) -C $(BROADCOM_DIR)/ethctl dynamic
610
611 ifneq ($(strip $(BUILD_DNSPROBE)),)
612 dnsprobe:
613         $(MAKE) -C $(BROADCOM_DIR)/dnsprobe $(BUILD_DNSPROBE)
614 else
615 dnsprobe:
616 endif
617
618 ifneq ($(strip $(BUILD_IGMP)),)
619 igmp:
620         $(MAKE) -C $(BROADCOM_DIR)/igmp $(BUILD_IGMP)
621 else
622 igmp:
623 endif
624
625 ifneq ($(strip $(BUILD_DHCPR)),)
626 dhcpr:
627         $(MAKE) -C $(BROADCOM_DIR)/dhcpr $(BUILD_DHCPR)
628 else
629 dhcpr:
630 endif
631
632 ifneq ($(strip $(BUILD_ZEBRA)),)
633 zebra:
634         cd $(OPENSOURCE_DIR);   (tar xkfj zebra.tar.bz2 2> /dev/null || true)
635         $(MAKE) -C $(OPENSOURCE_DIR)/zebra $(BUILD_ZEBRA)
636 else
637 zebra:
638 endif
639
640
641 ifneq ($(strip $(ODM_AUTO_PROVISION_LAN)),)
642 autoprovisionlan:
643         $(MAKE) -C $(BROADCOM_DIR)/autoprovisionlan dynamic
644 else
645 autoprovisionlan:
646 endif
647
648
649 ifneq ($(strip $(BUILD_ATMCTL)),)
650 atmctl:
651         $(MAKE) -C $(BROADCOM_DIR)/atmctl $(BUILD_ATMCTL)
652 else
653 atmctl:
654 endif
655
656 ifneq ($(strip $(BUILD_ADSLCTL)),)
657 adslctl:
658         $(MAKE) -C $(BROADCOM_DIR)/adslctl $(BUILD_ADSLCTL)
659 else
660 adslctl:
661 endif
662
663 ifeq ($(strip $(BUILD_CFM_CLI)),y)
664 ifneq ($(strip $(BUILD_NETCTL)),)
665 netctl:
666         $(MAKE) -C $(BROADCOM_DIR)/netctl $(BUILD_NETCTL)
667 else
668 netctl:
669 endif
670 else
671 netctl:
672 endif
673
674 ifneq ($(strip $(BUILD_BUSYBOX)),)
675 busybox:
676         cd $(OPENSOURCE_DIR); (tar xkfj busybox.tar.bz2 2> /dev/null || true)
677 #       $(MAKE) -C $(OPENSOURCE_DIR)/busybox $(BUILD_BUSYBOX)
678         cd $(OPENSOURCE_DIR)/busybox; cp -f brcm.config .config
679         $(MAKE) -C $(OPENSOURCE_DIR)/busybox install
680 else
681 busybox:
682 endif
683
684 ifneq ($(strip $(BUILD_LIBCREDUCTION)),)
685 libcreduction:
686         $(MAKE) -C $(OPENSOURCE_DIR)/libcreduction install
687 else
688 libcreduction:
689 endif
690
691 ifneq ($(strip $(BUILD_DIAGAPP)),)
692 diagapp:
693         $(MAKE) -C $(BROADCOM_DIR)/diagapp $(BUILD_DIAGAPP)
694 else
695 diagapp:
696 endif
697
698 ifneq ($(strip $(BUILD_FTPD)),)
699 bftpd:
700         cd $(OPENSOURCE_DIR);   (tar xkfj ftpd.tar.bz2 2> /dev/null || true)
701         $(MAKE) -C $(OPENSOURCE_DIR)/ftpd $(BUILD_FTPD)
702 else
703 bftpd:
704 endif
705
706 ifneq ($(strip $(BUILD_HTTPC)),)
707 httpc:
708         $(MAKE) -C $(OPENSOURCE_DIR)/httpc $(BUILD_HTTPC)
709 else
710 httpc:
711 endif
712
713 ifneq ($(strip $(BUILD_MPD)),)
714 mpd:
715         $(MAKE) -C $(OPENSOURCE_DIR)/mpd $(BUILD_MPD)
716 else
717 mpd:
718 endif
719
720
721 ifneq ($(strip $(BUILD_DDNSD)),)
722 ddnsd:
723         $(MAKE) -C $(BROADCOM_DIR)/ddnsd $(BUILD_DDNSD)
724 else
725 ddnsd:
726 endif
727
728 ifneq ($(strip $(BUILD_SNTP)),)
729 sntp:
730         $(MAKE) -C $(BROADCOM_DIR)/sntp $(BUILD_SNTP)
731 else
732 sntp:
733 endif
734
735 ifneq ($(strip $(BUILD_EPITTCP)),)
736 epittcp:
737         $(MAKE) -C $(BROADCOM_DIR)/epittcp $(BUILD_EPITTCP)
738 else
739 epittcp:
740 endif
741
742 ifneq ($(strip $(BUILD_SES)),)
743 ses:
744         $(MAKE) -C $(BROADCOM_DIR)/ses $(BUILD_SES)
745 else
746 ses:
747 endif
748
749 ifneq ($(strip $(BUILD_NVRAM)),)
750 nvram:
751         $(MAKE) -C $(BROADCOM_DIR)/nvram $(BUILD_NVRAM)
752 else
753 nvram:
754 endif
755
756 ifneq ($(strip $(BUILD_IPPD)),)
757 ippd:
758         $(MAKE) -C $(BROADCOM_DIR)/ippd $(BUILD_IPPD)
759 else
760 ippd:
761 endif
762
763 # Start: Andy porting from 2.21.5, 2005/04/14
764 ifneq ($(strip $(BUILD_DPROXY)),)
765 dproxy:
766         $(MAKE) -C $(OPENSOURCE_DIR)/dproxy $(BUILD_DPROXY)
767 else
768 dproxy:
769 endif
770 # End: Andy porting from 2.21.5, 2005/04/14
771
772 hosttools:
773 ifneq ($(strip $(BUILD_SIGNATURE_RSA)),)
774         $(MAKE) -C $(HOSTTOOLS_DIR)/sigmak
775 endif
776         $(MAKE) -C $(HOSTTOOLS_DIR)
777
778
779 buildimage: $(KERNEL_DIR)/vmlinux
780         sudo su --command="cd $(TARGETS_DIR); ./buildFS"
781 #       find $(TARGET_FS) -name CVS | xargs rm -rf
782 ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),squashfs)
783         #$(HOSTTOOLS_DIR)/mksquashfs $(TARGET_FS) $(PROFILE_DIR)/rootfs.img -noappend -be -always-use-fragments -gzip
784         $(HOSTTOOLS_DIR)/mksquashfs $(TARGET_FS) $(PROFILE_DIR)/rootfs.img -noappend -be -lzma -no-fragments -noI
785 else
786  ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),cramfs)
787 #       $(HOSTTOOLS_DIR)/mkcramfs -r -g $(TARGET_FS) $(PROFILE_DIR)/rootfs.img
788         $(HOSTTOOLS_DIR)/mkcramfs -r $(TARGET_FS) $(PROFILE_DIR)/rootfs.img
789  else
790   ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),jffs2)
791         $(HOSTTOOLS_DIR)/mkfs.jffs2 -b -p -e $(BRCM_FLASHBLK_SIZE) -r $(TARGET_FS) -o $(PROFILE_DIR)/rootfs.img
792   endif
793  endif
794 endif
795
796 ifneq ($(strip $(BRCM_KERNEL_ROOTFS)),nfs)
797         cd $(PROFILE_DIR); \
798         cp $(KERNEL_DIR)/vmlinux . ; \
799         $(STRIP) --remove-section=.note --remove-section=.comment vmlinux; \
800         $(OBJCOPY) -O binary vmlinux vmlinux.bin; \
801         $(HOSTTOOLS_DIR)/cmplzma -k -2 vmlinux vmlinux.bin vmlinux.lz;\
802         $(HOSTTOOLS_DIR)/bcmImageBuilder --output $(FS_KERNEL_IMAGE_NAME) --board $(BRCM_BOARD_ID) --blocksize $(BRCM_FLASHBLK_SIZE) --cfefile $(CFE_FILE) --rootfsfile rootfs.img --kernelfile vmlinux.lz; \
803         $(HOSTTOOLS_DIR)/bcmImageBuilder --output $(CFE_FS_KERNEL_IMAGE_NAME) --board $(BRCM_BOARD_ID) --blocksize $(BRCM_FLASHBLK_SIZE) --cfefile $(CFE_FILE) --rootfsfile rootfs.img --kernelfile vmlinux.lz --include-cfe; \
804         mkdir -p $(IMAGES_DIR)
805         cp $(PROFILE_DIR)/$(FS_KERNEL_IMAGE_NAME) $(IMAGES_DIR)/$(FS_KERNEL_IMAGE_NAME)_$(BRCM_RELEASETAG)-$(shell date '+%y%m%d_%H%M')
806         echo
807         echo -e "Done! Image $(PROFILE) has been built in $(IMAGES_DIR)."
808 else
809         cd $(PROFILE_DIR); \
810         cp $(KERNEL_DIR)/vmlinux . ; \
811         $(STRIP) --remove-section=.note --remove-section=.comment vmlinux
812         @echo
813         @echo -e "\t=== Following the below steps to start your NFS root file system on host ==="
814         @echo -e "Step 1: Copy $(PROFILE_DIR)/vmlinux to your TFTP server boot directory, such as /tftpboot"
815         @echo -e "Step 2: Add \"$(PROFILE_DIR)/fs *(rw,no_root_squash)\" to /etc/exports"
816         @echo -e "Step 3: Become root and restart your nfs server, such as \"service nfs restart\""
817         @echo -e "Step 4: Reboot your board and break into CFE bootloader, choose h on \"Run from flash/host\" and vmlinux on \"Default host run file name\""
818 endif
819
820
821 ###########################################
822 #
823 # System code clean-up
824 #
825 ###########################################     
826         
827 subdirs: $(patsubst %, _dir_%, $(SUBDIRS))
828
829 $(patsubst %, _dir_%, $(SUBDIRS)) :
830         $(MAKE) -C $(patsubst _dir_%, %, $@) $(TGT)
831
832 clean: target_clean app_clean kernel_clean hosttools_clean
833         rm -f .tmpconfig*
834
835 fssrc_clean:
836         rm -fr $(INSTALL_DIR)/bin
837         rm -fr $(INSTALL_DIR)/sbin
838         rm -fr $(INSTALL_DIR)/lib
839         rm -fr $(INSTALL_DIR)/upnp
840         rm -fr $(INSTALL_DIR)/docs
841         rm -fr $(INSTALL_DIR)/webs
842         rm -fr $(INSTALL_DIR)/usr
843         rm -fr $(INSTALL_DIR)/linuxrc
844
845 kernel_clean: sanity_check
846         $(MAKE) -C $(KERNEL_DIR) mrproper
847         rm -f $(KERNEL_DIR)/arch/mips/defconfig
848         rm -f $(HOSTTOOLS_DIR)/lzma/decompress/*.o
849         rm -f $(TARGETS_DIR)/*.o $(TARGETS_DIR)/.*.flags $(TARGETS_DIR)/.depend
850         rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxKernel
851         rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxKernel
852
853 app_clean: sanity_check fssrc_clean
854         $(MAKE) subdirs TGT=clean
855         rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxUser
856         rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxUser
857
858 target_clean: sanity_check
859         rm -f $(PROFILE_DIR)/rootfs.img
860         rm -f $(PROFILE_DIR)/vmlinux
861         rm -f $(PROFILE_DIR)/vmlinux.bin
862         rm -f $(PROFILE_DIR)/vmlinux.lz
863         rm -f $(PROFILE_DIR)/$(FS_KERNEL_IMAGE_NAME)
864         rm -f $(PROFILE_DIR)/$(CFE_FS_KERNEL_IMAGE_NAME)
865         rm -f $(PROFILE_DIR)/$(FLASH_IMAGE_NAME)
866         rm -fr $(PROFILE_DIR)/modules
867         find targets -name vmlinux -print -exec rm -f "{}" ";"
868         sudo su --command="rm -fr $(TARGET_FS)"
869
870 hosttools_clean:
871         $(MAKE) -C $(HOSTTOOLS_DIR) clean
872         
873 ###########################################
874 #
875 # System-wide exported variables
876 #
877 ###########################################     
878
879 export  BRCM_VERSION BRCM_RELEASE BRCM_EXTRAVERSION BRCM_RELEASETAG BRCM_BOARD RUN_NOISE \
880         INC_KERNEL_BASE KERNEL_DIR BRCMDRIVERS_DIR USERAPPS_DIR HOSTTOOLS_DIR TARGETS_DIR DEFAULTCFG_DIR XCHANGE_DIR FSSRC_DIR BUSYBOX_DIR \
881         PROFILE_DIR INSTALL_DIR LINUXDIR INC_BRCMDRIVER_PUB_PATH INC_BRCMDRIVER_PRIV_PATH INC_BRCMBOARDPARMS_PATH INC_ENDPOINT_PATH INC_ADSLDRV_PATH BROADCOM_CFM_DIR INC_BRCMCFM_PATH BRCM_KERNEL_ROOTFS BRCMAPPS BRCM_MIPS_ONLY_BUILD \
882         BRCM_UCLIBC CROSS_COMPILE TOOLCHAIN AS LD CC CXX AR NM STRIP SSTRIP OBJCOPY OBJDUMP RANLIB LIB_PATH LIBCDIR LIBDIR \
883         BUILD_BR2684CTL BUILD_PVC2684CTL BUILD_RT2684D BUILD_BRCTL BUILD_CFM BUILD_CFM_CLI BUILD_IPTABLES BUILD_EBTABLES BUILD_VODSL BUILD_SIPROXD \
884         BRCM_APP_PHONE BUILD_SOAP BUILD_SOAP_VER BRCM_DSP_CODEC_G711 BRCM_DSP_CODEC_G723 BRCM_DSP_CODEC_G726 BRCM_DSP_CODEC_G729 BRCM_MIPS_ONLY_BUILD \
885         DEFAULT_USB_PID BRCM_DSP_CODEC_G7xx BRCM_DSP_PCM BRCM_DSP_HYBRID BRCM_DSP_HYBRID_EXT BRCM_DSP_APM_FXO BRCM_DSP_APM_FXO_EXT BRCM_DSP_HYBRID_FXO \
886         BRCM_DSP_HYBRID_FXO_EXT BRCM_DSP_CODEC_T38_EXT BRCM_DSP_CODEC_T38_INT BRCM_DSP_HAL BRCM_DSP_HAL_EXTENSION  XCHANGE_DSP_APP_EXTENSION BRCM_VOICE_COUNTRY_JAPAN BRCM_VOICE_GLOBAL_CFLAGS \
887         BUILD_PPPD BUILD_REAIM BRCM_KERNEL_NETQOS BUILD_GDBSERVER BUILD_UDHCP BUILD_DHCPR BUILD_UPNP BUILD_SNMP BUILD_NAS BUILD_WLCTL BUILD_BUSYBOX BUILD_DNSPROBE BUILD_SLACTEST BUILD_VCONFIG BUILD_ETHWAN BUILD_PPP_DOMAIN_SUFFIX \
888         BUILD_ZEBRA BUILD_ATMCTL BUILD_ADSLCTL BUILD_NETCTL BUILD_IGMP BRCM_PTHREADS BUILD_DIAGAPP \
889         BUILD_CFM_TELNETD BUILD_CFM_SSHD BUILD_SSHD_MIPS_GENKEY BUILD_FTPD BRCM_DRIVER_PCI \
890         BRCM_PSI_VERSION WEB_POPUP BUILD_DIR BUILD_DDNSD BUILD_SNTP BUILD_TOD BUILD_IPPD BUILD_VCONFIG JTAG_KERNEL_DEBUG \
891         BUILD_EPITTCP BUILD_DPROXY BUILD_PPPDEFAULT_GW BUILD_MTU_LAN_PPP \
892         BRCM_DEFAULT_HOST_NAME DEFAULT_WLAN_ESSID BUILD_PPP_IPEXTENSION BRCM_DRIVER_PHONE \
893         BUILD_EPITTCP BUILD_NVRAM BUILD_SES BUILD_BRCM_VLAN BRCM_SNMP BRCM_LDX_APP BUILD_HTTPC BUILD_STATIC_DNS \
894         DISABLE_IGMP_SNOOPING_OPTION BUILD_PARTCONF BUILD_USER_ACCOUNT BRCM_KERNEL_ATMQOS \
895         BRCM_KERNEL_DN_IPQOS ODM_WANIP_GWNAME
896
897 export CONFIG_NET_SCH_CBQ CONFIG_NET_SCH_CSZ CONFIG_NET_SCH_HPFQ CONFIG_NET_SCH_HFCS CONFIG_NET_SCH_ATM \
898         CONFIG_NET_SCH_PRIO CONFIG_NET_SCH_RED CONFIG_NET_SCH_SFQ CONFIG_NET_SCH_TEQL CONFIG_NET_SCH_TBF \
899         CONFIG_NET_SCH_GRED CONFIG_NET_SCH_DSMARK CONFIG_NET_SCH_INGRESS CONFIG_NET_QOS CONFIG_NET_ESTIMATOR \
900         CONFIG_NET_CLS CONFIG_NET_CLS_TCINDEX CONFIG_NET_CLS_ROUTE4 CONFIG_NET_CLS_ROUTE CONFIG_NET_CLS_FW \
901         CONFIG_NET_CLS_U32 CONFIG_NET_CLS_RSVP CONFIG_NET_CLS_RSVP6 CONFIG_NET_CLS_POLICE ODM_LANG_NETGEAR \
902         ODM_MULTI_LANG BUILD_BLOCK_MULTICAST_FLOOD BUILD_MPD
903
904 export BRCM_KERNEL_NF_NAT_ALG_SIP BUILD_NSASOFT_TRAFFIC_EMULATOR BUILD_AUTO_PROVISION_ON_WAN ODM_AUTO_PROVISION_LAN BUILD_SYS_ALG BUILD_SYS_VPN_ALG BUILD_SYS_SIP_ALG
905 export BUILD_PPP_ALWAYS_RETRY