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