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