cleanup files which are not part of this distribution
[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 XCHANGE_DIR = $(BUILD_DIR)/xChange
42 FSSRC_DIR = $(TARGETS_DIR)/fs.src
43 CFE_FILE = $(TARGETS_DIR)/cfe/cfe$(BRCM_CHIP).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_FLASHPSI_SIZE
67 export BRCM_DRIVER_WIRELESS_PCMCIA_DATASWAP BRCM_DRIVER_WIRELESS_EBI_DMA
68 export BRCM_DRIVER_USB BRCM_DRIVER_ETHERNET_CONFIG
69 export BRCM_DEFAULTCFG
70 export BRCM_KERNEL_NF_FIREWALL BRCM_KERNEL_NF_MANGLE BRCM_KERNEL_NF_NAT
71 endif
72
73 ###########################################
74 #
75 # Define Toolchain
76 #
77 ###########################################
78 ifeq ($(strip $(BRCM_UCLIBC)),y)
79 NTC=1
80 ifeq ($(strip $(NTC)),1)
81 TOOLCHAIN=/opt/toolchains/uclibc-crosstools_gcc-3.4.2_uclibc-20050428
82 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-linux-uclibc-
83 else
84 TOOLCHAIN=/opt/toolchains/uclibc
85 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-uclibc-
86 endif
87 else
88 TOOLCHAIN=/usr/crossdev/mips
89 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-linux-
90 endif
91
92
93
94 AR              = $(CROSS_COMPILE)ar
95 AS              = $(CROSS_COMPILE)as
96 LD              = $(CROSS_COMPILE)ld
97 CC              = $(CROSS_COMPILE)gcc
98 CXX             = $(CROSS_COMPILE)g++
99 CPP             = $(CROSS_COMPILE)cpp
100 NM              = $(CROSS_COMPILE)nm
101 STRIP           = $(CROSS_COMPILE)strip
102 SSTRIP          = $(CROSS_COMPILE)sstrip
103 OBJCOPY         = $(CROSS_COMPILE)objcopy
104 OBJDUMP         = $(CROSS_COMPILE)objdump
105 RANLIB          = $(CROSS_COMPILE)ranlib
106
107 LIB_PATH        = $(TOOLCHAIN)/mips-linux/lib
108 LIBDIR          = $(TOOLCHAIN)/mips-linux/lib
109 LIBCDIR         = $(TOOLCHAIN)/mips-linux
110
111 ###########################################
112 #
113 # Application-specific settings
114 #
115 ###########################################
116 INSTALL_DIR = $(TARGETS_DIR)/fs.src
117 TARGET_FS = $(TARGETS_DIR)/$(PROFILE)/fs
118 PROFILE_DIR = $(TARGETS_DIR)/$(PROFILE)
119 PROFILE_PATH = $(TARGETS_DIR)/$(PROFILE)/$(PROFILE)
120 VENDOR_NAME = bcm
121 FS_KERNEL_IMAGE_NAME = $(VENDOR_NAME)$(PROFILE)_fs_kernel
122 CFE_FS_KERNEL_IMAGE_NAME = $(VENDOR_NAME)$(PROFILE)_cfe_fs_kernel
123 FLASH_IMAGE_NAME = $(VENDOR_NAME)$(PROFILE)_flash_image_$(BRCM_BOARD_ID)
124 INC_BRCMDRIVER_PUB_PATH=$(BRCMDRIVERS_DIR)/opensource/include
125 INC_BRCMDRIVER_PRIV_PATH=$(BRCMDRIVERS_DIR)/broadcom/include
126 INC_BRCMBOARDPARMS_PATH=$(TARGETS_DIR)/boardparms
127 INC_ENDPOINT_PATH=$(BRCMDRIVERS_DIR)/broadcom/char/endpoint/bcm9$(BRCM_CHIP)/inc
128 #INC_ADSLDRV_PATH=$(BRCMDRIVERS_DIR)/broadcom/char/adsl/bcm9$(BRCM_CHIP)
129 INC_ADSLDRV_PATH=$(BRCMDRIVERS_DIR)/broadcom/char/adsl/impl1
130 BROADCOM_CFM_DIR=$(BROADCOM_DIR)/cfm
131 INC_BRCMCFM_PATH=$(BROADCOM_CFM_DIR)/inc
132
133
134 ifeq ($(strip $(BRCM_APP_PHONE)),sip)
135 export VOXXXLOAD=1
136 export VOIPLOAD=1
137 export SIPLOAD=1
138 BRCM_RELEASETAG := $(BRCM_RELEASETAG).sip
139 endif
140
141 ifeq ($(strip $(BRCM_APP_PHONE)),mgcp)
142 export VOXXXLOAD=1
143 export VOIPLOAD=1
144 export MGCPLOAD=1
145 BRCM_RELEASETAG := $(BRCM_RELEASETAG).mgcp
146 endif
147
148 ifeq ($(strip $(BRCM_PROFILER_ENABLED)),y)
149 export BRCM_PROFILER_TOOL=1
150 else
151 export BRCM_PROFILER_TOOL=0
152 endif
153
154 ifneq ($(strip $(BUILD_VODSL)),)
155 export VOXXXLOAD=1
156 endif
157
158 ifeq ($(strip $(BRCM_VODSL_STUNC)),y)
159         export BRCM_VODSL_STUN_CLIENT=1
160 endif
161
162 ifeq ($(strip $(BRCM_VODSL_CONFIG_MANAGER)),y)
163         export BRCM_VODSL_CFGMGR=1
164 endif
165
166 BRCM_DSP_HAL := gw
167 BRCM_DSP_HAL_EXTENSION :=
168 XCHANGE_DSP_APP_EXTENSION :=
169 export XCHANGE_DSP_APP=$(BRCM_DSP_CODEC)
170
171 ifeq ($(strip $(BRCM_DSP_PCM)),y)
172 XCHANGE_DSP_APP := dspApp3341_tdm
173 BRCM_DSP_HAL_EXTENSION := _pcm
174 endif
175
176 ifeq ($(strip $(BRCM_DSP_HYBRID)),y)
177 XCHANGE_DSP_APP := dspApp3341_hybrid
178 BRCM_DSP_HAL_EXTENSION := _hybrid
179 endif
180
181 ifeq ($(strip $(BRCM_DSP_HYBRID_EXT)),y)
182 BRCM_DSP_HAL_EXTENSION := _hybrid
183 XCHANGE_DSP_APP := dspApp3341_hybrid
184 XCHANGE_DSP_APP_EXTENSION := _ext
185 endif
186
187 # APM application with FXO uses the hybrid HAL, as the FXO is provided by TDM port
188 ifeq ($(strip $(BRCM_DSP_APM_FXO)),y)
189 XCHANGE_DSP_APP := dspApp3341
190 BRCM_DSP_HAL_EXTENSION := _hybrid
191 XCHANGE_DSP_APP_EXTENSION := _fxo
192 endif
193
194 ifeq ($(strip $(BRCM_DSP_APM_FXO_EXT)),y)
195 XCHANGE_DSP_APP := dspApp3341
196 BRCM_DSP_HAL_EXTENSION := _hybrid
197 XCHANGE_DSP_APP_EXTENSION := _fxo_ext
198 endif
199
200 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO)),y)
201 XCHANGE_DSP_APP := dspApp3341_hybrid
202 BRCM_DSP_HAL_EXTENSION := _hybrid
203 XCHANGE_DSP_APP_EXTENSION := _fxo
204 endif
205
206 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO_EXT)),y)
207 XCHANGE_DSP_APP := dspApp3341_hybrid
208 BRCM_DSP_HAL_EXTENSION := _fxo
209 XCHANGE_DSP_APP_EXTENSION := _fxo_ext
210 endif
211
212 #
213 #  Warning here, we do re-assign some of the variables defined earlier:
214 #  BRCM_DSP_HAL and BRCM_DSP_HAL_EXTENSION for example, in order to pickup
215 #  the correct board HAL application.
216 #
217 ifeq ($(strip $(BRCM_DSP_FXO)),y)
218 ifeq ($(strip $(BRCM_SLIC_LE9502)),y)
219 export XCHANGE_BUILD_APP=Bcm$(BRCM_CHIP)_Le9502FXO
220 BRCM_RELEASETAG := $(BRCM_RELEASETAG)._LE9502
221 BRCM_DSP_HAL := _Le9502FXO
222 BRCM_DSP_HAL_EXTENSION :=
223 export BRCM_SLIC_LE9502
224 else
225 ifeq ($(strip $(BRCM_SLIC_LE9500)),y)
226 export XCHANGE_BUILD_APP=Bcm$(BRCM_CHIP)_Le9500FXO
227 BRCM_RELEASETAG := $(BRCM_RELEASETAG)._LE9500
228 BRCM_DSP_HAL := _Le9500FXO
229 BRCM_DSP_HAL_EXTENSION :=
230 export BRCM_SLIC_LE9500
231 endif
232 endif
233 endif
234
235
236 #
237 # DSP codec flags definition.  To be used throughout the application (for configuration and vodsl)
238 #
239
240 BRCM_DSP_CODEC_DEFINES := -DXCFG_G711_SUPPORT=1
241
242 ifeq ($(strip $(BRCM_DSP_CODEC_G723)),y)
243 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
244 endif
245
246 ifeq ($(strip $(BRCM_DSP_CODEC_G726)),y)
247 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
248 endif
249
250 ifeq ($(strip $(BRCM_DSP_CODEC_G729)),y)
251 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
252 endif
253
254 ifeq ($(strip $(BRCM_DSP_CODEC_G7xx)),y)
255 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
256 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
257 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
258 endif
259
260 ifeq ($(strip $(BRCM_DSP_PCM)),y)
261 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
262 endif
263
264 ifeq ($(strip $(BRCM_DSP_HYBRID)),y)
265 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
266 endif
267
268 ifeq ($(strip $(BRCM_DSP_HYBRID_EXT)),y)
269 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
270 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
271 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
272 endif
273
274 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO_EXT)),y)
275 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
276 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
277 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
278 endif
279
280 ifeq ($(strip $(BRCM_DSP_IOM2_APM)),y)
281 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
282 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
283 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
284 BRCM_DSP_CODEC_DEFINES += -DXCFG_HYBRID_LOAD=1
285 endif
286
287 ifeq ($(strip $(BRCM_DSP_IOM2)),y)
288 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
289 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
290 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
291 endif
292
293 ifeq ($(strip $(BRCM_DSP_CODEC_T38_EXT)),y)
294 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
295 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
296 BRCM_DSP_CODEC_DEFINES += -DXCFG_FAX_SUPPORT=1
297 endif
298
299 ifeq ($(strip $(BRCM_DSP_CODEC_T38_INT)),y)
300 BRCM_DSP_CODEC_DEFINES += -DXCFG_FAX_SUPPORT=1
301 endif
302
303 ifeq ($(strip $(BRCM_DSP_APM_FXO_EXT)),y)
304 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
305 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
306 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
307 endif
308
309 ifeq ($(strip $(BRCM_DSP_APM_FXO)),y)
310 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
311 endif
312
313 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO_EXT)),y)
314 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
315 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
316 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
317 endif
318
319 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO)),y)
320 BRCM_DSP_CODEC_DEFINES += -DXCFG_G729_SUPPORT=1
321 BRCM_DSP_CODEC_DEFINES += -DXCFG_G7231_SUPPORT=1
322 BRCM_DSP_CODEC_DEFINES += -DXCFG_G726_SUPPORT=1
323 endif
324
325
326 #
327 #  Definition of the number of voice channels supported based on the specific
328 #  application being created.
329 #
330
331 ifeq ($(strip $(BRCM_DSP_HYBRID)), y)
332 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=2 -DNUM_TDM_VOICE_CHANNELS=1 -DNUM_FXO_CHANNELS=0
333 else
334 ifeq ($(strip $(BRCM_DSP_HYBRID_EXT)), y)
335 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=2 -DNUM_TDM_VOICE_CHANNELS=1 -DNUM_FXO_CHANNELS=0
336 else
337 ifeq ($(strip $(BRCM_DSP_APM_FXO)), y)
338 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=2 -DNUM_TDM_VOICE_CHANNELS=0 -DNUM_FXO_CHANNELS=1
339 else
340 ifeq ($(strip $(BRCM_DSP_APM_FXO_EXT)), y)
341 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=2 -DNUM_TDM_VOICE_CHANNELS=0 -DNUM_FXO_CHANNELS=1
342 else
343 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO)), y)
344 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=2 -DNUM_TDM_VOICE_CHANNELS=1 -DNUM_FXO_CHANNELS=1
345 else
346 ifeq ($(strip $(BRCM_DSP_HYBRID_FXO_EXT)), y)
347 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=2 -DNUM_TDM_VOICE_CHANNELS=1 -DNUM_FXO_CHANNELS=1
348 else
349 BRCM_DSP_CHAN_DEFINES = -DNUM_APM_VOICE_CHANNELS=0 -DNUM_TDM_VOICE_CHANNELS=0 -DNUM_FXO_CHANNELS=0
350 endif
351 endif
352 endif
353 endif
354 endif
355 endif
356
357 export BRCM_DSP_CODEC_DEFINES
358 export BRCM_DSP_CHAN_DEFINES
359 export BRCM_DSP_FXO
360 export XCHANGE_BUILD_APP=Bcm$(BRCM_CHIP)$(BRCM_DSP_HAL)$(BRCM_DSP_HAL_EXTENSION)
361 export XCHANGE_DSP_APP_EXTENSION
362 export BRCM_DSP_HAL_EXTENSION
363 BRCM_RELEASETAG := $(BRCM_RELEASETAG).$(XCHANGE_DSP_APP)
364
365 # If no codec is selected, build G.711 load.
366 # Any XCHANGE_BUILD_APP directory would be OK
367 # because G.711 is included with all the voice DSP images.
368 ifneq ($(strip $(BUILD_VODSL)),)
369 ifeq ($(strip $(XCHANGE_DSP_APP)),)
370 export XCHANGE_BUILD_APP=Bcm$(BRCM_CHIP)gw
371 export XCHANGE_DSP_APP=g711
372 BRCM_RELEASETAG := $(BRCM_RELEASETAG).g711
373 endif
374 endif
375                                                                                 
376 ifeq ($(strip $(BRCM_MIPS_ONLY_BUILD)),y)
377 export XCHANGE_BUILD_APP=Bcm$(BRCM_CHIP)lv
378 BRCM_DSP_HAL := lv
379 BRCM_DSP_HAL_EXTENSION :=
380 XCHANGE_DSP_APP_EXTENSION=
381 endif
382                                                                                 
383 ifeq ($(strip $(BRCM_VODSL_DUAL_3341)),y)
384 BRCM_RELEASETAG := $(BRCM_RELEASETAG).dual3341
385 endif
386
387 #Set up ADSL standard
388 export ADSL=$(BRCM_ADSL_STANDARD)
389
390 #Set up ADSL_PHY_MODE  {file | obj}
391 export ADSL_PHY_MODE=file
392
393 #Set up ADSL_SELF_TEST
394 export ADSL_SELF_TEST=$(BRCM_ADSL_SELF_TEST)
395
396 ###########################################
397 #
398 # Complete list of applications
399 #
400 ###########################################
401 export OPENSOURCE_DIR=$(USERAPPS_DIR)/opensource
402 SUBDIRS_OPENSOURCE = $(OPENSOURCE_DIR)/atm2684/pvc2684ctl \
403         $(OPENSOURCE_DIR)/bridge-utils \
404         $(OPENSOURCE_DIR)/ppp/pppoe \
405         $(OPENSOURCE_DIR)/udhcp \
406         $(OPENSOURCE_DIR)/iptables \
407         $(OPENSOURCE_DIR)/ebtables \
408         $(OPENSOURCE_DIR)/reaim  \
409         $(OPENSOURCE_DIR)/iproute2  \
410         $(OPENSOURCE_DIR)/gdbserver  \
411         $(OPENSOURCE_DIR)/libosip2 \
412         $(OPENSOURCE_DIR)/siproxd \
413         $(OPENSOURCE_DIR)/zebra  \
414         $(OPENSOURCE_DIR)/net-snmp  \
415         $(OPENSOURCE_DIR)/ftpd \
416         $(OPENSOURCE_DIR)/libcreduction \
417         $(OPENSOURCE_DIR)/busybox
418
419 #In future, we need to add soap when it
420 #is decoupled from cli
421
422 export BROADCOM_DIR=$(USERAPPS_DIR)/broadcom
423 SUBDIRS_BROADCOM = $(BROADCOM_DIR)/nvram \
424         $(BROADCOM_DIR)/cfm \
425         $(BROADCOM_DIR)/upnp/router/upnp \
426         $(BROADCOM_DIR)/nas \
427         $(BROADCOM_DIR)/wlctl \
428         $(BROADCOM_DIR)/vodsl \
429         $(BROADCOM_DIR)/atmctl \
430         $(BROADCOM_DIR)/adslctl \
431         $(BROADCOM_DIR)/stupid-ftpdmips\
432         $(BROADCOM_DIR)/sendmail\
433         $(BROADCOM_DIR)/bcmcrypto \
434         $(BROADCOM_DIR)/LPRng/src \
435         $(BROADCOM_DIR)/rcamdmips \
436         $(BROADCOM_DIR)/netctl \
437         $(BROADCOM_DIR)/dnsprobe \
438         $(BROADCOM_DIR)/igmp \
439         $(BROADCOM_DIR)/dhcpr \
440         $(BROADCOM_DIR)/sntp \
441         $(BROADCOM_DIR)/ippd \
442         $(BROADCOM_DIR)/ddnsd \
443         $(BROADCOM_DIR)/ethctl \
444         $(BROADCOM_DIR)/hotplug \
445         $(BROADCOM_DIR)/epittcp \
446         $(BROADCOM_DIR)/snmp \
447         $(BROADCOM_DIR)/ses
448
449 SUBDIRS_APP = $(SUBDIRS_BROADCOM) $(SUBDIRS_OPENSOURCE)
450 SUBDIRS = $(foreach dir, $(SUBDIRS_APP), $(shell if [ -d "$(dir)" ]; then echo $(dir); fi))
451
452 OPENSOURCE_APPS = pvc2684ctl pvc2684d brctl pppd udhcp iptables ebtables \
453                   reaim tc libosip2 siproxd snmp zebra bftpd busybox gdbserver
454
455 BROADCOM_APPS = nvram cfm upnp nas wlctl vodsl atmctl adslctl stupid-ftpd sendmail bcmcrypto lpd netctl dnsprobe \
456                 igmp dhcpr diagapp sntp ddnsd ilmi ippd hotplug ethctl epittcp ses snmp
457 LIBC_OPTIMIZATION = libcreduction
458
459 BUSYBOX_DIR = $(OPENSOURCE_DIR)/busybox
460
461 BRCMAPPS = $(BROADCOM_APPS) $(OPENSOURCE_APPS) $(LIBC_OPTIMIZATION)
462
463 all: sanity_check profile_check kernelbuild modbuild app hosttools buildimage
464
465 menuconfig:
466         @cd $(INC_KERNEL_BASE); \
467         if [ ! -e linux/CREDITS ]; then \
468           echo Untarring original Linux kernel source...; \
469           (tar xkfj $(ORIGINAL_KERNEL) 2> /dev/null || true); \
470         fi
471         $(MAKE) -C $(KERNEL_DIR)/scripts/lxdialog HOSTCC=gcc
472         $(CONFIG_SHELL) $(HOSTTOOLS_DIR)/scripts/Menuconfig $(TARGETS_DIR)/config.in
473
474 sanity_check:
475         @if [ "$(PROFILE)" = "" ]; then \
476           echo You need to specify build profile name from $(TARGETS_DIR) using 'make PROFILE=<profile name>...'; exit 1; \
477         fi
478
479 profile_check:
480         @if [ "$(LAST_PROFILE)" != "" ] && [ "$(LAST_PROFILE)" != "$(PROFILE)" ]; then \
481                 echo "The specified profile, $(PROFILE), differs from the last one built, $(LAST_PROFILE)."; \
482                 echo "The entire image must be rebuilt."; \
483                 read -p "Press ENTER to rebuild the entire image or CTRL-C to abort. " ; \
484                 $(MAKE) PROFILE=$(LAST_PROFILE) clean; \
485                 $(MAKE) PROFILE=$(PROFILE); \
486                 echo "Ignore the make exit error, Error 1"; \
487                 exit 1; \
488         fi
489
490 $(KERNEL_DIR)/vmlinux:
491         $(GENDEFCONFIG_CMD) $(PROFILE_PATH)
492         cd $(KERNEL_DIR); \
493         cp -f $(KERNEL_DIR)/arch/mips/defconfig $(KERNEL_DIR)/.config; \
494         $(MAKE) oldconfig; $(MAKE); $(MAKE) modules_install
495
496 #2006.8.30 Yau change defconfig to usb_defconfig
497 #and copy ~/kernel/linux/.config to ~/kernel/linux/arch/mips/usb_defconfig
498 kernelbuild:
499 ifeq ($(wildcard $(KERNEL_DIR)/vmlinux),)
500         @cd $(INC_KERNEL_BASE); \
501         if [ ! -e linux/CREDITS ]; then \
502           echo Untarring original Linux kernel source...; \
503           (tar xkfj $(ORIGINAL_KERNEL) 2> /dev/null || true); \
504         fi
505         $(GENDEFCONFIG_CMD) $(PROFILE_PATH)
506         cd $(KERNEL_DIR); \
507         cp -f $(KERNEL_DIR)/arch/mips/usb_defconfig $(KERNEL_DIR)/.config; \
508         $(MAKE) oldconfig; $(MAKE)
509 else
510         cp -f $(KERNEL_DIR)/arch/mips/usb_defconfig $(KERNEL_DIR)/.config; \
511         cd $(KERNEL_DIR); $(MAKE)
512 endif
513
514 kernel: profile_check kernelbuild hosttools buildimage
515
516 ifeq ($(strip $(VOXXXLOAD)),1)
517 modbuild: touch_voice_files
518         cd $(KERNEL_DIR); $(MAKE) modules && $(MAKE) modules_install
519 else
520 modbuild:
521         cd $(KERNEL_DIR); $(MAKE) modules && $(MAKE) modules_install
522 endif
523
524 modules: profile_check modbuild hosttools buildimage
525
526 app: profile_check prebuild $(BRCMAPPS) hosttools buildimage
527
528 prebuild:
529         mkdir -p $(INSTALL_DIR)/bin $(INSTALL_DIR)/lib
530
531 # touch_voice_files doesn't clean up voice, just enables incremental build of voice code
532 touch_voice_files:
533         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 "{}" ";"
534         rm -rf kernel/linux/.tmp_versions/endpointdd.mod
535         rm -rf kernel/linux/arch/mips/defconfig
536         rm -rf kernel/linux/include/config/bcm/endpoint/
537         rm -rf kernel/linux/include/asm-mips/offset.h
538         rm -rf kernel/linux/include/asm-mips/reg.h
539         find kernel/linux/lib/ -name '*.o' -print -exec rm -f "{}" ";"
540         find kernel/linux/lib/ -name '*.lib' -print -exec rm -f "{}" ";"
541
542 # Build user applications depending on if they are
543 # specified in the profile
544 ifneq ($(strip $(BUILD_PVC2684CTL)),)
545 export BUILD_PVC2684D=$(BUILD_PVC2684CTL)
546 pvc2684d:
547 pvc2684ctl:
548         $(MAKE) -C $(OPENSOURCE_DIR)/atm2684/pvc2684ctl $(BUILD_PVC2684CTL)
549 else
550 pvc2684ctl:
551 endif
552
553 ifneq ($(strip $(BUILD_BRCTL)),)
554 brctl:
555         cd $(OPENSOURCE_DIR);   (tar xkfj bridge-utils.tar.bz2 2> /dev/null || true)
556         $(MAKE) -C $(OPENSOURCE_DIR)/bridge-utils $(BUILD_BRCTL)
557 else
558 brctl:
559 endif
560
561 ifneq ($(strip $(BUILD_VCONFIG)),)
562 export BUILD_VCONFIG=y
563 endif
564
565 ifneq ($(strip $(BUILD_CFM)),)
566
567 ifneq ($(strip $(BUILD_CFM_MENU)),)
568 export BUILD_CFM_MENU=y
569 endif
570
571 cfm:
572         $(MAKE) -C $(BROADCOM_DIR)/cfm $(BUILD_CFM)
573 else
574 cfm:
575 endif
576
577 # iptables is dependent on kernel netfilter modules
578 ifneq ($(strip $(BRCM_KERNEL_NETFILTER)),)
579 ifneq ($(strip $(BUILD_IPTABLES)),)
580 iptables:
581         cd $(OPENSOURCE_DIR);   (tar xkfj iptables.tar.bz2 2> /dev/null || true)
582         $(MAKE) -C $(OPENSOURCE_DIR)/iptables $(BUILD_IPTABLES)
583 iptables-build:
584         cd $(OPENSOURCE_DIR);   (tar xkfj iptables.tar.bz2 2> /dev/null || true)
585         $(MAKE) -C $(OPENSOURCE_DIR)/iptables static
586 else
587 iptables:
588 endif
589 else
590 iptables:
591         @echo Warning: You need to enable netfilter in the kernel !!!!!
592 endif
593
594 ifneq ($(strip $(BUILD_EBTABLES)),)
595 ebtables:
596         cd $(OPENSOURCE_DIR);   (tar xkfj ebtables.tar.bz2 2> /dev/null || true)
597         $(MAKE) -C $(OPENSOURCE_DIR)/ebtables $(BUILD_EBTABLES)
598 else
599 ebtables:
600 endif
601
602 ifneq ($(strip $(BUILD_PPPD)),)
603 pppd:
604         $(MAKE) -C $(OPENSOURCE_DIR)/ppp/pppoe $(BUILD_PPPD)
605 else
606 pppd:
607 endif
608
609 ifneq ($(strip $(BUILD_REAIM)),)
610 reaim:
611         cd $(OPENSOURCE_DIR);   (tar xkfj reaim.tar.bz2 2> /dev/null || true)
612         $(MAKE) -C $(OPENSOURCE_DIR)/reaim $(BUILD_REAIM)
613 else
614 reaim:
615 endif
616
617 ifneq ($(strip $(BRCM_KERNEL_NETQOS)),)
618 tc:
619         cd $(OPENSOURCE_DIR);   (tar xkfj iproute2.tar.bz2 2> /dev/null || true)
620         $(MAKE) -C $(OPENSOURCE_DIR)/iproute2 dynamic
621 else
622 tc:
623 endif
624
625 ifneq ($(strip $(BUILD_GDBSERVER)),)
626 gdbserver:
627         install -m 755 $(TOOLCHAIN)/mips-linux-uclibc/target-apps/usr/bin/gdbserver $(INSTALL_DIR)/bin 
628         $(STRIP) $(INSTALL_DIR)/bin/gdbserver
629 else
630 gdbserver:
631 endif
632
633 ifneq ($(strip $(BUILD_ETHWAN)),)
634 export BUILD_ETHWAN=y
635 endif
636
637 ifneq ($(strip $(BUILD_UDHCP)),)
638 udhcp:
639         $(MAKE) -C $(OPENSOURCE_DIR)/udhcp $(BUILD_UDHCP)
640 else
641 udhcp:
642 endif
643
644 # UPNP is dependent on iptables
645 ifneq ($(strip $(BUILD_IPTABLES)),)
646 ifneq ($(strip $(BUILD_UPNP)),)
647 upnp: iptables-build
648         $(MAKE) -C $(BROADCOM_DIR)/upnp/router/upnp  $(BUILD_UPNP)
649 else
650 upnp:
651 endif
652 else
653 upnp:
654         @echo Warning: You need to build iptables first !!!!!
655 endif
656
657
658 ifneq ($(strip $(BUILD_SIPROXD)),)
659 siproxd:
660         cd $(OPENSOURCE_DIR);   (tar xkfj siproxd.tar.bz2 2> /dev/null || true)
661         $(MAKE) -C $(OPENSOURCE_DIR)/siproxd $(BUILD_SIPROXD)
662 libosip2:
663         cd $(OPENSOURCE_DIR);   (tar xkfj libosip2.tar.bz2 2> /dev/null || true)
664         $(MAKE) -C $(OPENSOURCE_DIR)/libosip2
665 else
666 siproxd:
667 libosip2:
668 endif
669
670 ifneq ($(strip $(BUILD_SNMP)),)
671
672 ifneq ($(strip $(BUILD_SNMP_SET)),)
673 export BUILD_SNMP_SET=1
674 else
675 export BUILD_SNMP_SET=0
676 endif
677
678 ifneq ($(strip $(BUILD_SNMP_ADSL_MIB)),)
679 export BUILD_SNMP_ADSL_MIB=1
680 else
681 export BUILD_SNMP_ADSL_MIB=0
682 endif
683
684 ifneq ($(strip $(BUILD_SNMP_ATM_MIB)),)
685 export BUILD_SNMP_ATM_MIB=1
686 else
687 export BUILD_SNMP_ATM_MIB=0
688 endif
689
690 ifneq ($(strip $(BUILD_SNMP_AT_MIB)),)
691 export BUILD_SNMP_AT_MIB=1
692 else
693 export BUILD_SNMP_AT_MIB=0
694 endif
695
696 ifneq ($(strip $(BUILD_SNMP_SYSOR_MIB)),)
697 export BUILD_SNMP_SYSOR_MIB=1
698 else
699 export BUILD_SNMP_SYSOR_MIB=0
700 endif
701
702 ifneq ($(strip $(BUILD_SNMP_TCP_MIB)),)
703 export BUILD_SNMP_TCP_MIB=1
704 else
705 export BUILD_SNMP_TCP_MIB=0
706 endif
707
708 ifneq ($(strip $(BUILD_SNMP_UDP_MIB)),)
709 export BUILD_SNMP_UDP_MIB=1
710 else
711 export BUILD_SNMP_UDP_MIB=0
712 endif
713
714 ifneq ($(strip $(BUILD_SNMP_IP_MIB)),)
715 export BUILD_SNMP_IP_MIB=1
716 else
717 export BUILD_SNMP_IP_MIB=0
718 endif
719
720 ifneq ($(strip $(BUILD_SNMP_ICMP_MIB)),)
721 export BUILD_SNMP_ICMP_MIB=1
722 else
723 export BUILD_SNMP_ICMP_MIB=0
724 endif
725
726 ifneq ($(strip $(BUILD_SNMP_SNMP_MIB)),)
727 export BUILD_SNMP_SNMP_MIB=1
728 else
729 export BUILD_SNMP_SNMP_MIB=0
730 endif
731
732 ifneq ($(strip $(BUILD_SNMP_ATMFORUM_MIB)),)
733 export BUILD_SNMP_ATMFORUM_MIB=1
734 else
735 export BUILD_SNMP_ATMFORUM_MIB=0
736 endif
737
738 ifneq ($(strip $(BRCM_SNMP)),)
739 export BUILD_SNMP_CHINA_TELECOM_CPE_MIB=0
740 endif
741
742 snmp:
743 ifneq ($(strip $(BRCM_SNMP)),)
744 ##      $(MAKE) -C $(BROADCOM_DIR)/snmp $(BUILD_SNMP)
745 else
746         cd $(OPENSOURCE_DIR);   (tar xkfj net-snmp.tar.bz2 2> /dev/null || true)
747         $(MAKE) -C $(OPENSOURCE_DIR)/net-snmp $(BUILD_SNMP)
748 endif
749 else
750 snmp:
751 endif
752
753 ifneq ($(strip $(BUILD_ILMI)),)
754 ilmi:
755         cd $(OPENSOURCE_DIR);   (tar xkfj net-snmp.tar.bz2 2> /dev/null || true)
756         $(MAKE) -C $(BROADCOM_DIR)/ilmi $(BUILD_ILMI)
757 else
758 ilmi:
759 endif
760
761 ifneq ($(strip $(BUILD_VODSL)),)
762 vodsl:
763         $(MAKE) -C $(BROADCOM_DIR)/vodsl $(BUILD_VODSL)
764 else
765 vodsl:
766 endif
767
768 # Leave it for the future when soap server is decoupled from cfm
769 ifneq ($(strip $(BUILD_SOAP)),)
770 ifeq ($(strip $(BUILD_SOAP_VER)),2)
771 soapserver:
772         $(MAKE) -C $(BROADCOM_DIR)/SoapToolkit/SoapServer $(BUILD_SOAP)
773 else
774 soap:
775         $(MAKE) -C $(BROADCOM_DIR)/soap $(BUILD_SOAP)
776 endif
777 else
778 soap:
779 endif
780
781 ifneq ($(strip $(BUILD_NAS)),)
782 export WIRELESS=1
783 nas:
784         $(MAKE) -C $(BROADCOM_DIR)/nas $(BUILD_NAS)
785
786 #add hotplug here, for nas use only
787 hotplug:
788         $(MAKE) -C $(BROADCOM_DIR)/hotplug $(BUILD_NAS)
789         
790 else
791 export WIRELESS=0
792 nas:
793 #add hotplug here, for nas use only
794 hotplug:
795 endif
796
797 ifneq ($(strip $(BUILD_WLCTL)),)
798 export WIRELESS=1
799 wlctl:
800         $(MAKE) -C $(BROADCOM_DIR)/wlctl $(BUILD_WLCTL)
801 else
802 export WIRELESS=0
803 wlctl:
804 endif
805
806 #Always compile Ethernet control utility
807 ethctl:
808         $(MAKE) -C $(BROADCOM_DIR)/ethctl dynamic
809
810 ifneq ($(strip $(BUILD_DNSPROBE)),)
811 dnsprobe:
812         $(MAKE) -C $(BROADCOM_DIR)/dnsprobe $(BUILD_DNSPROBE)
813 else
814 dnsprobe:
815 endif
816
817 ifneq ($(strip $(BUILD_IGMP)),)
818 igmp:
819         $(MAKE) -C $(BROADCOM_DIR)/igmp $(BUILD_IGMP)
820 else
821 igmp:
822 endif
823
824 ifneq ($(strip $(BUILD_DHCPR)),)
825 dhcpr:
826         $(MAKE) -C $(BROADCOM_DIR)/dhcpr $(BUILD_DHCPR)
827 else
828 dhcpr:
829 endif
830
831 ifneq ($(strip $(BUILD_ZEBRA)),)
832 zebra:
833         cd $(OPENSOURCE_DIR);   (tar xkfj zebra.tar.bz2 2> /dev/null || true)
834         $(MAKE) -C $(OPENSOURCE_DIR)/zebra $(BUILD_ZEBRA)
835 else
836 zebra:
837 endif
838
839 ifneq ($(strip $(BUILD_ATMCTL)),)
840 atmctl:
841         $(MAKE) -C $(BROADCOM_DIR)/atmctl $(BUILD_ATMCTL)
842 else
843 atmctl:
844 endif
845
846 ifneq ($(strip $(BUILD_ADSLCTL)),)
847 adslctl:
848         $(MAKE) -C $(BROADCOM_DIR)/adslctl $(BUILD_ADSLCTL)
849 else
850 adslctl:
851 endif
852
853 #BUILD_INFOSVR=dynamic
854 #infosvr:
855 #       $(MAKE) -C $(BROADCOM_DIR)/infosvr $(BUILD_INFOSVR)
856
857 #2005_07_28_Roly
858 #(add)
859 BUILD_STUPID_FTPD=dynamic
860 stupid-ftpd:
861         $(MAKE) -C $(BROADCOM_DIR)/stupid-ftpdmips $(BUILD_STUPID_FTPD)
862
863 #2005_07_28_Roly
864 #(add)
865 BUILD_SENDMAIL=dynamic
866 sendmail:
867         $(MAKE) -C $(BROADCOM_DIR)/sendmail $(BUILD_SENDMAIL)
868
869 #2005_08_01_Roly
870 #(add)
871 BUILD_BCMCRYPTO=dynamic
872 bcmcrypto:
873         $(MAKE) -C $(BROADCOM_DIR)/bcmcrypto $(BUILD_BCMCRYPTO)
874
875 #2005_08_02_Roly
876 #(add)
877 BUILD_LPD=dynamic
878 lpd:
879         $(MAKE) -C $(BROADCOM_DIR)/LPRng/src $(BUILD_LPD)
880
881 #2005_08_04_Roly
882 #(add)
883 BUILD_RCAMD=dynamic
884 rcamd:
885         $(MAKE) -C $(BROADCOM_DIR)/rcamdmips $(BUILD_RCAMD)
886
887
888 ifeq ($(strip $(BUILD_CFM_CLI)),y)
889 ifneq ($(strip $(BUILD_NETCTL)),)
890 netctl:
891         $(MAKE) -C $(BROADCOM_DIR)/netctl $(BUILD_NETCTL)
892 else
893 netctl:
894 endif
895 else
896 netctl:
897 endif
898
899 ifneq ($(strip $(BUILD_BUSYBOX)),)
900 busybox:
901         cd $(OPENSOURCE_DIR); (tar xkfj busybox.tar.bz2 2> /dev/null || true)
902 #       $(MAKE) -C $(OPENSOURCE_DIR)/busybox $(BUILD_BUSYBOX)
903         cd $(OPENSOURCE_DIR)/busybox; cp -f brcm.config .config
904         $(MAKE) -C $(OPENSOURCE_DIR)/busybox install
905 else
906 busybox:
907 endif
908
909 ifneq ($(strip $(BUILD_LIBCREDUCTION)),)
910 libcreduction:
911         $(MAKE) -C $(OPENSOURCE_DIR)/libcreduction install
912 else
913 libcreduction:
914 endif
915
916 ifneq ($(strip $(BUILD_DIAGAPP)),)
917 diagapp:
918         $(MAKE) -C $(BROADCOM_DIR)/diagapp $(BUILD_DIAGAPP)
919 else
920 diagapp:
921 endif
922
923 ifneq ($(strip $(BUILD_FTPD)),)
924 bftpd:
925         cd $(OPENSOURCE_DIR);   (tar xkfj ftpd.tar.bz2 2> /dev/null || true)
926         $(MAKE) -C $(OPENSOURCE_DIR)/ftpd $(BUILD_FTPD)
927 else
928 bftpd:
929 endif
930
931 ifneq ($(strip $(BUILD_DDNSD)),)
932 ddnsd:
933         $(MAKE) -C $(BROADCOM_DIR)/ddnsd $(BUILD_DDNSD)
934 else
935 ddnsd:
936 endif
937
938 ifneq ($(strip $(BUILD_SNTP)),)
939 sntp:
940         $(MAKE) -C $(BROADCOM_DIR)/sntp $(BUILD_SNTP)
941 else
942 sntp:
943 endif
944
945 ifneq ($(strip $(BUILD_EPITTCP)),)
946 epittcp:
947         $(MAKE) -C $(BROADCOM_DIR)/epittcp $(BUILD_EPITTCP)
948 else
949 epittcp:
950 endif
951
952 ifneq ($(strip $(BUILD_SES)),)
953 ses:
954         $(MAKE) -C $(BROADCOM_DIR)/ses $(BUILD_SES)
955 else
956 ses:
957 endif
958
959 ifneq ($(strip $(BUILD_NVRAM)),)
960 nvram:
961         $(MAKE) -C $(BROADCOM_DIR)/nvram $(BUILD_NVRAM)
962 else
963 nvram:
964 endif
965
966 ifneq ($(strip $(BUILD_IPPD)),)
967 ippd:
968         $(MAKE) -C $(BROADCOM_DIR)/ippd $(BUILD_IPPD)
969 else
970 ippd:
971 endif
972
973 hosttools:
974         $(MAKE) -C $(HOSTTOOLS_DIR)
975
976
977 buildimage: $(KERNEL_DIR)/vmlinux
978         su --command="cd $(TARGETS_DIR); ./buildFS"
979 ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),squashfs)
980         #$(HOSTTOOLS_DIR)/mksquashfs $(TARGET_FS) $(PROFILE_DIR)/rootfs.img -noappend -be -always-use-fragments -gzip
981         $(HOSTTOOLS_DIR)/mksquashfs $(TARGET_FS) $(PROFILE_DIR)/rootfs.img -noappend -be -lzma -no-fragments -noI
982 else
983  ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),cramfs)
984 #       $(HOSTTOOLS_DIR)/mkcramfs -r -g $(TARGET_FS) $(PROFILE_DIR)/rootfs.img
985         $(HOSTTOOLS_DIR)/mkcramfs -r $(TARGET_FS) $(PROFILE_DIR)/rootfs.img
986  else
987   ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),jffs2)
988         $(HOSTTOOLS_DIR)/mkfs.jffs2 -b -p -e $(BRCM_FLASHBLK_SIZE) -r $(TARGET_FS) -o $(PROFILE_DIR)/rootfs.img
989   endif
990  endif
991 endif
992
993 ifneq ($(strip $(BRCM_KERNEL_ROOTFS)),nfs)
994         cd $(PROFILE_DIR); \
995         cp $(KERNEL_DIR)/vmlinux . ; \
996         $(STRIP) --remove-section=.note --remove-section=.comment vmlinux; \
997         $(OBJCOPY) -O binary vmlinux vmlinux.bin; \
998         $(HOSTTOOLS_DIR)/cmplzma -k -2 vmlinux vmlinux.bin vmlinux.lz;\
999         $(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; \
1000         $(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; \
1001         $(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); \
1002         $(HOSTTOOLS_DIR)/addvtoken $(FLASH_IMAGE_NAME) $(FLASH_IMAGE_NAME).w
1003         @mkdir -p $(IMAGES_DIR)
1004         @cp $(PROFILE_DIR)/$(FS_KERNEL_IMAGE_NAME) $(IMAGES_DIR)/$(FS_KERNEL_IMAGE_NAME)_$(BRCM_RELEASETAG)-$(shell date '+%y%m%d_%H%M')
1005         @echo
1006         @echo -e "Done! Image $(PROFILE) has been built in $(IMAGES_DIR)."
1007 else
1008         cd $(PROFILE_DIR); \
1009         cp $(KERNEL_DIR)/vmlinux . ; \
1010         $(STRIP) --remove-section=.note --remove-section=.comment vmlinux
1011         @echo
1012         @echo -e "\t=== Following the below steps to start your NFS root file system on host ==="
1013         @echo -e "Step 1: Copy $(PROFILE_DIR)/vmlinux to your TFTP server boot directory, such as /tftpboot"
1014         @echo -e "Step 2: Add \"$(PROFILE_DIR)/fs *(rw,no_root_squash)\" to /etc/exports"
1015         @echo -e "Step 3: Become root and restart your nfs server, such as \"service nfs restart\""
1016         @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\""
1017 endif
1018
1019
1020 ###########################################
1021 #
1022 # System code clean-up
1023 #
1024 ###########################################     
1025         
1026 subdirs: $(patsubst %, _dir_%, $(SUBDIRS))
1027
1028 $(patsubst %, _dir_%, $(SUBDIRS)) :
1029         $(MAKE) -C $(patsubst _dir_%, %, $@) $(TGT)
1030
1031 clean: target_clean app_clean kernel_clean hosttools_clean
1032         rm -f .tmpconfig*
1033
1034 fssrc_clean:
1035         rm -fr $(INSTALL_DIR)/bin
1036         rm -fr $(INSTALL_DIR)/sbin
1037         rm -fr $(INSTALL_DIR)/lib
1038         rm -fr $(INSTALL_DIR)/upnp
1039         rm -fr $(INSTALL_DIR)/docs
1040         rm -fr $(INSTALL_DIR)/webs
1041         rm -fr $(INSTALL_DIR)/usr
1042         rm -fr $(INSTALL_DIR)/linuxrc
1043
1044 kernel_clean: sanity_check
1045         $(MAKE) -C $(KERNEL_DIR) mrproper
1046         rm -f $(KERNEL_DIR)/arch/mips/defconfig
1047         rm -f $(HOSTTOOLS_DIR)/lzma/decompress/*.o
1048         rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxKernel
1049         rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxKernel
1050
1051 app_clean: sanity_check fssrc_clean
1052         $(MAKE) subdirs TGT=clean
1053         rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxUser
1054         rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxUser
1055
1056 target_clean: sanity_check
1057         rm -f $(PROFILE_DIR)/rootfs.img
1058         rm -f $(PROFILE_DIR)/vmlinux
1059         rm -f $(PROFILE_DIR)/vmlinux.bin
1060         rm -f $(PROFILE_DIR)/vmlinux.lz
1061         rm -f $(PROFILE_DIR)/$(FS_KERNEL_IMAGE_NAME)
1062         rm -f $(PROFILE_DIR)/$(CFE_FS_KERNEL_IMAGE_NAME)
1063         rm -f $(PROFILE_DIR)/$(FLASH_IMAGE_NAME)
1064         rm -f $(PROFILE_DIR)/$(FLASH_IMAGE_NAME).w
1065         rm -fr $(PROFILE_DIR)/modules
1066         find targets -name vmlinux -print -exec rm -f "{}" ";"
1067         su --command="rm -fr $(TARGET_FS)"
1068
1069 hosttools_clean:
1070         $(MAKE) -C $(HOSTTOOLS_DIR) clean
1071         
1072 ###########################################
1073 #
1074 # System-wide exported variables
1075 #
1076 ###########################################     
1077
1078 export  BRCM_VERSION BRCM_RELEASE BRCM_EXTRAVERSION BRCM_RELEASETAG BRCM_BOARD RUN_NOISE \
1079         INC_KERNEL_BASE KERNEL_DIR BRCMDRIVERS_DIR USERAPPS_DIR HOSTTOOLS_DIR TARGETS_DIR DEFAULTCFG_DIR XCHANGE_DIR FSSRC_DIR BUSYBOX_DIR \
1080         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 \
1081         BRCM_UCLIBC CROSS_COMPILE TOOLCHAIN AS LD CC CXX AR NM STRIP SSTRIP OBJCOPY OBJDUMP RANLIB LIB_PATH LIBCDIR LIBDIR  \
1082         BUILD_BR2684CTL BUILD_PVC2684CTL BUILD_RT2684D BUILD_BRCTL BUILD_CFM BUILD_CFM_CLI BUILD_IPTABLES BUILD_EBTABLES BUILD_VODSL BUILD_SIPROXD \
1083         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 \
1084    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 \
1085    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 \
1086         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 \
1087         BUILD_ZEBRA BUILD_ATMCTL BUILD_ADSLCTL BUILD_STUPID_FTPD BUILD_SENDMAIL BUILD_BCMCRYPTO BUILD_LPD BUILD_RCAMD BUILD_NETCTL BUILD_IGMP BRCM_PTHREADS BUILD_DIAGAPP \
1088         BUILD_CFM_TELNETD BUILD_CFM_SSHD BUILD_SSHD_MIPS_GENKEY BUILD_FTPD BRCM_DRIVER_PCI \
1089         BRCM_PSI_VERSION WEB_POPUP BUILD_DIR BUILD_DDNSD BUILD_SNTP BUILD_TOD BUILD_IPPD BUILD_VCONFIG JTAG_KERNEL_DEBUG \
1090         BUILD_EPITTCP BUILD_NVRAM BUILD_SES BUILD_BRCM_VLAN BRCM_SNMP BRCM_LDX_APP \
1091    BRCM_VODSL_DUAL_3341