-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
1045 lines (889 loc) · 34 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#
# Top-level Makefile for all commengine xDSL platforms
###########################################
#
# This is the most important target: make all
# This is the first target in the Makefile, so it is also the default target.
# All the other targets are later in this file.
#
############################################
all: prebuild_checks all_postcheck1
all_postcheck1: profile_saved_check sanity_check \
create_install kernelbuild modbuild kernelbuildlite \
userspace gdbserver vodsl dectd hosttools buildimage
############################################################################
#
# A lot of the stuff in the original Makefile has been moved over
# to make.common.
#
############################################################################
BUILD_DIR = $(shell pwd)
include $(BUILD_DIR)/make.common
############################################################################
#
# Make info for voice has been moved over to make.voice
#
############################################################################
ifneq ($(strip $(BUILD_VODSL)),)
include $(BUILD_DIR)/make.voice
endif
############################################################################
#
# dsl, kernel defines
#
############################################################################
ifeq ($(strip $(BRCM_KERNEL_DEBUG)),y)
KERNEL_DEBUG=1
endif
ifeq ($(strip $(BRCM_KERNEL_KALLSYMS)),y)
KERNEL_KALLSYMS=1
endif
ifeq ($(strip $(BRCM_KERNEL_OPROFILE)),y)
export CONFIG_DEBUG_INFO=1
export CONFIG_FRAME_POINTER=1
endif
#Set up ADSL standard
export ADSL=$(BRCM_ADSL_STANDARD)
#Set up ADSL_PHY_MODE {file | obj}
export ADSL_PHY_MODE=file
#Set up ADSL_SELF_TEST
export ADSL_SELF_TEST=$(BRCM_ADSL_SELF_TEST)
#Set up ADSL_PLN_TEST
export ADSL_PLN_TEST=$(BUILD_TR69_XBRCM)
#WL command
ifneq ($(strip $(WL)),)
build_nop:=$(shell cd $(BUILD_DIR)/userspace/private/apps/wlan; make clean; cd $(BUILD_DIR))
export WL
endif
ifneq ($(strip $(BRCM_DRIVER_WIRELESS_USBAP)),)
WLBUS ?= "usbpci"
endif
#default WLBUS for wlan pci driver
WLBUS ?="pci"
export WLBUS
#IMAGE_VERSION:=$(BRCM_VERSION)$(BRCM_RELEASE)$(shell echo $(BRCM_EXTRAVERSION) | sed -e "s/\(0\)\([1-9]\)/\2/")$(shell echo $(PROFILE) | sed -e "s/^[0-9]*//")$(shell date '+%j%H%M')
ifneq ($(IMAGE_VERSION_STRING),)
IMAGE_VERSION:=$(IMAGE_VERSION_STRING)
else
IMAGE_VERSION:=$(BRCM_VERSION)$(BRCM_RELEASE)$(shell echo $(BRCM_EXTRAVERSION) | sed -e "s/\(0\)\([1-9]\)/\2/")$(shell echo $(PROFILE) | sed -e "s/^[0-9]*//")$(shell date '+%j%H%M')
endif
############################################################################
#
# When there is a directory name with the same name as a Make target,
# make gets confused. PHONY tells Make to ignore the directory when
# trying to make these targets.
#
############################################################################
.PHONY: userspace unittests data-model hostTools
############################################################################
#
# Other Targets. The default target is "all", defined at the top of the file.
#
############################################################################
#
# create a bcm_relversion.h which has our release version number, e.g.
# 4 10 02. This allows device drivers which support multiple releases
# with a single driver image to test for version numbers.
#
BCM_SWVERSION_FILE := kernel/linux/include/linux/bcm_swversion.h
BCM_VERSION_LEVEL := $(strip $(BRCM_VERSION))
BCM_RELEASE_LEVEL := $(strip $(BRCM_RELEASE))
BCM_RELEASE_LEVEL := $(shell echo $(BCM_RELEASE_LEVEL) | sed -e 's/^0*//')
BCM_PATCH_LEVEL := $(strip $(shell echo $(BRCM_EXTRAVERSION) | cut -c1-2))
BCM_PATCH_LEVEL := $(shell echo $(BCM_PATCH_LEVEL) | sed -e 's/^0*//')
$(BCM_SWVERSION_FILE): $(BUILD_DIR)/version.make
@echo "creating bcm release version header file"
@echo "/* this file is automatically generated from top level Makefile */" > $(BCM_SWVERSION_FILE)
@echo "#ifndef __BCM_SWVERSION_H__" >> $(BCM_SWVERSION_FILE)
@echo "#define __BCM_SWVERSION_H__" >> $(BCM_SWVERSION_FILE)
@echo "#define BCM_REL_VERSION $(BCM_VERSION_LEVEL)" >> $(BCM_SWVERSION_FILE)
@echo "#define BCM_REL_RELEASE $(BCM_RELEASE_LEVEL)" >> $(BCM_SWVERSION_FILE)
@echo "#define BCM_REL_PATCH $(BCM_PATCH_LEVEL)" >> $(BCM_SWVERSION_FILE)
@echo "#define BCM_SW_VERSIONCODE ($(BCM_VERSION_LEVEL)*65536+$(BCM_RELEASE_LEVEL)*256+$(BCM_PATCH_LEVEL))" >> $(BCM_SWVERSION_FILE)
@echo "#define BCM_SW_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))" >> $(BCM_SWVERSION_FILE)
@echo "#endif" >> $(BCM_SWVERSION_FILE)
userspace: sanity_check create_install data-model $(BCM_SWVERSION_FILE)
$(MAKE) -C userspace
#
# Always run Make in the libcreduction directory. In most non-voice configs,
# mklibs.py will be invoked to analyze user applications
# and libraries to eliminate unused functions thereby reducing image size.
# However, for voice configs, gdb server, oprofile and maybe some other
# special cases, the libcreduction makefile will just copy unstripped
# system libraries to fs.install for inclusion in the image.
#
libcreduction:
$(MAKE) -C hostTools/libcreduction install
menuconfig:
@cd $(INC_KERNEL_BASE); \
if [ ! -e linux/CREDITS ]; then \
echo Untarring original Linux kernel source...; \
(tar xkfj $(ORIGINAL_KERNEL) 2> /dev/null || true); \
fi
$(MAKE) -C $(HOSTTOOLS_DIR)/scripts/lxdialog HOSTCC=gcc
$(CONFIG_SHELL) $(HOSTTOOLS_DIR)/scripts/Menuconfig $(TARGETS_DIR)/config.in $(PROFILE)
#
# the userspace apps and libs make their own directories before
# they install, so they don't depend on this target to make the
# directory for them anymore.
#
create_install:
mkdir -p $(PROFILE_DIR)/fs.install/etc
mkdir -p $(INSTALL_DIR)/bin
mkdir -p $(INSTALL_DIR)/lib
mkdir -p $(INSTALL_DIR)/etc/snmp
mkdir -p $(INSTALL_DIR)/etc/iproute2
mkdir -p $(INSTALL_DIR)/opt/bin
mkdir -p $(INSTALL_DIR)/opt/modules
mkdir -p $(INSTALL_DIR)/opt/scripts
# By default, let make spawn 1 job per core.
# To set max jobs, specify on command line, BRCM_MAX_JOBS=8
# To also specify a max load, BRCM_MAX_JOBS="6 --max-load=3.0"
# To specify max load without max jobs, BRCM_MAX_JOBS=" --max-load=3.5"
ifneq ($(strip $(BRCM_MAX_JOBS)),)
ACTUAL_MAX_JOBS := $(BRCM_MAX_JOBS)
else
NUM_CORES := $(shell grep processor /proc/cpuinfo | wc -l)
ACTUAL_MAX_JOBS := $(NUM_CORES)
endif
kernelbuild: $(BCM_SWVERSION_FILE)
ifeq ($(wildcard $(KERNEL_DIR)/vmlinux),)
echo starting kernel build at $(INC_KERNEL_BASE)
@cd $(INC_KERNEL_BASE); \
if [ ! -e linux/CREDITS ]; then \
echo Untarring original Linux kernel source...; \
(tar xkfj $(ORIGINAL_KERNEL) 2> /dev/null || true); \
fi
$(GENDEFCONFIG_CMD) $(PROFILE_PATH) ${MAKEFLAGS}
cd $(KERNEL_DIR); \
cp -f $(KERNEL_DIR)/arch/mips/defconfig $(KERNEL_DIR)/.config; \
$(MAKE) oldconfig; $(MAKE) -j $(ACTUAL_MAX_JOBS)
else
cd $(KERNEL_DIR); $(MAKE) -j $(ACTUAL_MAX_JOBS)
endif
kernel: sanity_check create_install kernelbuild hosttools buildimage
ifeq ($(strip $(BRCM_DRIVER_BCMDSP)),m)
kernelbuildlite:
@echo "******************** Kernel Build Lite ********************"; \
$(BRCMDRIVERS_DIR)/broadcom/char/dspapp/impl1/getDspModSizes.sh $(BRCMDRIVERS_DIR)/broadcom/char/dspapp/impl1/dspdd.ko $(SHARED_DIR) $(CROSS_COMPILE) $(KERNEL_DEBUG) $(KERNEL_KALLSYMS);
cd $(KERNEL_DIR); $(MAKE)
else
kernelbuildlite:
endif
ifeq ($(strip $(VOXXXLOAD)),1)
modbuild: touch_voice_files
cd $(KERNEL_DIR); $(MAKE) modules && $(MAKE) modules_install
else
modbuild:
cd $(KERNEL_DIR); $(MAKE) -j $(ACTUAL_MAX_JOBS) modules && $(MAKE) modules_install
endif
mocamodbuild:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_MOCACFGDRV_PATH) modules
mocamodclean:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_MOCACFGDRV_PATH) clean
adslmodbuild:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_ADSLDRV_PATH) modules
adslmodbuildclean:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_ADSLDRV_PATH) clean
spumodbuild:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_SPUDRV_PATH) modules
spumodbuildclean:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_SPUDRV_PATH) clean
pwrmngtmodbuild:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_PWRMNGTDRV_PATH) modules
pwrmngtmodclean:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_PWRMNGTDRV_PATH) clean
enetmodbuild:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_ENETDRV_PATH) modules
enetmodclean:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_ENETDRV_PATH) clean
eponmodbuild:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_EPONDRV_PATH) modules
eponmodclean:
cd $(KERNEL_DIR); $(MAKE) M=$(INC_EPONDRV_PATH) clean
modules: sanity_check create_install modbuild kernelbuildlite hosttools buildimage
adslmodule: adslmodbuild
adslmoduleclean: adslmodbuildclean
spumodule: spumodbuild
spumoduleclean: spumodbuildclean
pwrmngtmodule: pwrmngtmodbuild
pwrmngtmoduleclean: pwrmngtmodclean
data-model:
$(MAKE) -C data-model
unittests:
$(MAKE) -C unittests
unittests_run:
$(MAKE) -C unittests unittests_run
doxygen_build:
$(MAKE) -C hostTools build_doxygen
doxygen_docs: doxygen_build
rm -rf $(BUILD_DIR)/docs/doxygen;
mkdir $(BUILD_DIR)/docs/doxygen;
cd hostTools/doxygen/bin; ./doxygen
doxygen_clean:
$(MAKE) -C hostTools clean_doxygen
# touch_voice_files doesn't clean up voice, just enables incremental build of voice code
touch_voice_files:
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 "{}" ";"
rm -rf kernel/linux/.tmp_versions/endpointdd.mod
rm -rf kernel/linux/arch/mips/defconfig
rm -rf kernel/linux/include/config/bcm/endpoint/
find kernel/linux/lib/ -name '*.o' -print -exec rm -f "{}" ";"
find kernel/linux/lib/ -name '*.lib' -print -exec rm -f "{}" ";"
############################################################################
#
# Build user applications depending on if they are
# specified in the profile. Most of these BUILD_ checks should eventually get
# moved down to the userspace directory.
#
############################################################################
ifneq ($(strip $(BUILD_VCONFIG)),)
export BUILD_VCONFIG=y
endif
ifneq ($(strip $(BUILD_GDBSERVER)),)
gdbserver:
install -m 755 $(TOOLCHAIN_TOP)/usr/mips-linux-uclibc/target_utils/gdbserver $(INSTALL_DIR)/bin
else
gdbserver:
endif
ifneq ($(strip $(BUILD_ETHWAN)),)
export BUILD_ETHWAN=y
endif
ifneq ($(strip $(BUILD_SNMP)),)
ifneq ($(strip $(BUILD_SNMP_SET)),)
export SNMP_SET=1
else
export SNMP_SET=0
endif
ifneq ($(strip $(BUILD_SNMP_ADSL_MIB)),)
export SNMP_ADSL_MIB=1
else
export SNMP_ADSL_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_ATM_MIB)),)
export SNMP_ATM_MIB=1
else
export SNMP_ATM_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_BRIDGE_MIB)),)
export SNMP_BRIDGE_MIB=1
else
export SNMP_BRIDGE_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_AT_MIB)),)
export SNMP_AT_MIB=1
else
export SNMP_AT_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_SYSOR_MIB)),)
export SNMP_SYSOR_MIB=1
else
export SNMP_SYSOR_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_TCP_MIB)),)
export SNMP_TCP_MIB=1
else
export SNMP_TCP_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_UDP_MIB)),)
export SNMP_UDP_MIB=1
else
export SNMP_UDP_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_IP_MIB)),)
export SNMP_IP_MIB=1
else
export SNMP_IP_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_ICMP_MIB)),)
export SNMP_ICMP_MIB=1
else
export SNMP_ICMP_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_SNMP_MIB)),)
export SNMP_SNMP_MIB=1
else
export SNMP_SNMP_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_ATMFORUM_MIB)),)
export SNMP_ATMFORUM_MIB=1
else
export SNMP_ATMFORUM_MIB=0
endif
ifneq ($(strip $(BUILD_SNMP_CHINA_TELECOM_CPE_MIB)),)
export BUILD_SNMP_CHINA_TELECOM_CPE_MIB=y
endif
ifneq ($(strip $(BUILD_CT_1_39_OPEN)),)
export BUILD_CT_1_39_OPEN=y
endif
ifneq ($(strip $(BUILD_SNMP_CHINA_TELECOM_CPE_MIB_V2)),)
export BUILD_SNMP_CHINA_TELECOM_CPE_MIB_V2=y
endif
ifneq ($(strip $(BUILD_SNMP_BRCM_CPE_MIB)),)
export BUILD_SNMP_BRCM_CPE_MIB=y
endif
ifneq ($(strip $(BUILD_SNMP_UDP)),)
export BUILD_SNMP_UDP=y
endif
ifneq ($(strip $(BUILD_SNMP_EOC)),)
export BUILD_SNMP_EOC=y
endif
ifneq ($(strip $(BUILD_SNMP_AAL5)),)
export BUILD_SNMP_AAL5=y
endif
ifneq ($(strip $(BUILD_SNMP_AUTO)),)
export BUILD_SNMP_AUTO=y
endif
ifneq ($(strip $(BUILD_SNMP_DEBUG)),)
export BUILD_SNMP_DEBUG=y
endif
ifneq ($(strip $(BUILD_SNMP_TRANSPORT_DEBUG)),)
export BUILD_SNMP_TRANSPORT_DEBUG=y
endif
ifneq ($(strip $(BUILD_SNMP_LAYER_DEBUG)),)
export BUILD_SNMP_LAYER_DEBUG=y
endif
endif
ifneq ($(strip $(BUILD_4_LEVEL_QOS)),)
export BUILD_4_LEVEL_QOS=y
endif
# vodsl (voice daemon)
# mwang: for now, I still need to leave vodsl at this top level because
# it depends on so many of the voice defines in this top level Makefile.
ifneq ($(strip $(BUILD_VODSL)),)
vodsl: sanity_check
$(MAKE) -C $(BUILD_DIR)/userspace/private/apps/vodsl $(BUILD_VODSL)
else
vodsl: sanity_check
@echo "skipping vodsl (not configured)"
endif
#dectd
ifneq ($(strip $(BUILD_DECT)),)
dectd: sanity_check
$(MAKE) -C $(BUILD_DIR)/userspace/private/apps/dectd dynamic
else
dectd: sanity_check
@echo "Skipping dectd application (not configured)"
endif
# Leave it for the future when soap server is decoupled from cfm
ifneq ($(strip $(BUILD_SOAP)),)
ifeq ($(strip $(BUILD_SOAP_VER)),2)
soapserver:
$(MAKE) -C $(BROADCOM_DIR)/SoapToolkit/SoapServer $(BUILD_SOAP)
else
soap:
$(MAKE) -C $(BROADCOM_DIR)/soap $(BUILD_SOAP)
endif
else
soap:
endif
ifneq ($(strip $(BUILD_DIAGAPP)),)
diagapp:
$(MAKE) -C $(BROADCOM_DIR)/diagapp $(BUILD_DIAGAPP)
else
diagapp:
endif
ifneq ($(strip $(BUILD_IPPD)),)
ippd:
$(MAKE) -C $(BROADCOM_DIR)/ippd $(BUILD_IPPD)
else
ippd:
endif
ifneq ($(strip $(BUILD_PORT_MIRRORING)),)
export BUILD_PORT_MIRRORING=1
else
export BUILD_PORT_MIRRORING=0
endif
ifeq ($(BRCM_USE_SUDO_IFNOT_ROOT),y)
BRCM_BUILD_USR=$(shell whoami)
BRCM_BUILD_USR1=$(shell sudo touch foo;ls -l foo | awk '{print $$3}';sudo rm -rf foo)
else
BRCM_BUILD_USR=root
endif
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),nfs)
ifeq ($(strip $(BRCM_NFS_ROOT_DIR)),$(strip ""))
NFS_ROOT_DIR:="$(PROFILE_DIR)/fs"
$(info NFS_ROOT_DIR=$(NFS_ROOT_DIR) (default value))
else
NFS_ROOT_DIR:="$(BRCM_NFS_ROOT_DIR)"
$(info NFS_ROOT_DIR=$(NFS_ROOT_DIR) (from menu))
endif
endif
hosttools:
$(MAKE) -C $(HOSTTOOLS_DIR)
############################################################################
#
# IKOS defines
#
############################################################################
CMS_VERSION_FILE=$(BUILD_DIR)/userspace/public/include/version.h
ifeq ($(strip $(BRCM_IKOS)),y)
FS_COMPRESSION=-noD -noI -no-fragments
else
FS_COMPRESSION=
endif
export BRCM_IKOS FS_COMPRESSION
# IKOS Emulator build that does not include the CFE boot loader.
# Edit targets/ikos/ikos and change the chip and board id to desired values.
# Then build: make PROFILE=ikos ikos
ikos:
@echo -e '#define SOFTWARE_VERSION ""\n#define RELEASE_VERSION ""\n#define PSI_VERSION ""\n' > $(CMS_VERSION_FILE)
@-mv -f $(FSSRC_DIR)/etc/profile $(FSSRC_DIR)/etc/profile.dontuse >& /dev/null
@if [ ! -a $(CFE_FILE) ] ; then echo "no cfe" > $(CFE_FILE); echo "no cfe" > $(CFE_FILE).del; fi
@-rm $(HOSTTOOLS_DIR)/bcmImageBuilder >& /dev/null
$(MAKE) PROFILE=$(PROFILE)
@-rm $(HOSTTOOLS_DIR)/bcmImageBuilder >& /dev/null
@mv -f $(FSSRC_DIR)/etc/profile.dontuse $(FSSRC_DIR)/etc/profile
@cd $(PROFILE_DIR); \
$(OBJCOPY) --output-target=srec vmlinux vmlinux.srec; \
xxd $(FS_KERNEL_IMAGE_NAME) | grep "^00000..:" | xxd -r > bcmtag.bin; \
$(OBJCOPY) --output-target=srec --input-target=binary --change-addresses=0xb8010000 bcmtag.bin bcmtag.srec; \
$(OBJCOPY) --output-target=srec --input-target=binary --change-addresses=0xb8010100 rootfs.img rootfs.srec; \
rm bcmtag.bin; \
grep -v "^S7" vmlinux.srec > bcm9$(BRCM_CHIP)_$(PROFILE).srec; \
grep "^S3" bcmtag.srec >> bcm9$(BRCM_CHIP)_$(PROFILE).srec; \
grep -v "^S0" rootfs.srec >> bcm9$(BRCM_CHIP)_$(PROFILE).srec
@if [ ! -a $(CFE_FILE).del ] ; then rm -f $(CFE_FILE) $(CFE_FILE).del; fi
@echo -e "\nAn image without CFE for the IKOS emulator has been built. It is named"
@echo -e "targets/$(PROFILE)/bcm9$(BRCM_CHIP)_$(PROFILE).srec\n"
# IKOS Emulator build that includes the CFE boot loader.
# Both Linux and CFE boot loader toolchains need to be installed.
# Edit targets/ikos/ikos and change the chip and board id to desired values.
# Then build: make PROFILE=ikos ikoscfe
ikoscfe:
@echo -e '#define SOFTWARE_VERSION ""\n#define RELEASE_VERSION ""\n#define PSI_VERSION ""\n' > $(CMS_VERSION_FILE)
@-mv -f $(FSSRC_DIR)/etc/profile $(FSSRC_DIR)/etc/profile.dontuse >& /dev/null
$(MAKE) PROFILE=$(PROFILE)
@mv -f $(FSSRC_DIR)/etc/profile.dontuse $(FSSRC_DIR)/etc/profile
$(MAKE) -C $(BL_BUILD_DIR) clean
$(MAKE) -C $(BL_BUILD_DIR)
$(MAKE) -C $(BL_BUILD_DIR) ikos_finish
cd $(PROFILE_DIR); \
echo -n "** no kernel **" > kernelfile; \
$(HOSTTOOLS_DIR)/bcmImageBuilder --output $(CFE_FS_KERNEL_IMAGE_NAME) --chip $(BRCM_CHIP) --board $(BRCM_BOARD_ID) --blocksize $(BRCM_FLASHBLK_SIZE) --cfefile $(BL_BUILD_DIR)/cfe$(BRCM_CHIP).bin --rootfsfile rootfs.img --kernelfile kernelfile --include-cfe; \
$(HOSTTOOLS_DIR)/createimg --boardid=$(BRCM_BOARD_ID) --voiceboardid $(BRCM_VOICE_BOARD_ID) --numbermac=$(BRCM_NUM_MAC_ADDRESSES) --macaddr=$(BRCM_BASE_MAC_ADDRESS) --tp=$(BRCM_MAIN_TP_NUM) --psisize=$(BRCM_PSI_SIZE) --inputfile=$(CFE_FS_KERNEL_IMAGE_NAME) --outputfile=$(FLASH_IMAGE_NAME); \
$(HOSTTOOLS_DIR)/addvtoken $(FLASH_IMAGE_NAME) $(FLASH_IMAGE_NAME).w; \
$(OBJCOPY) --output-target=srec --input-target=binary --change-addresses=0xb8000000 $(FLASH_IMAGE_NAME).w $(FLASH_IMAGE_NAME).srec; \
$(OBJCOPY) --output-target=srec vmlinux vmlinux.srec; \
@rm kernelfile; \
grep -v "^S7" vmlinux.srec > bcm9$(BRCM_CHIP)_$(PROFILE).srec; \
grep "^S3" $(BL_BUILD_DIR)/cferam$(BRCM_CHIP).srec >> bcm9$(BRCM_CHIP)_$(PROFILE).srec; \
grep -v "^S0" $(FLASH_IMAGE_NAME).srec >> bcm9$(BRCM_CHIP)_$(PROFILE).srec; \
grep -v "^S7" vmlinux.srec > bcm9$(BRCM_CHIP)_$(PROFILE).utram.srec; \
grep -v "^S0" $(BL_BUILD_DIR)/cferam$(BRCM_CHIP).srec >> bcm9$(BRCM_CHIP)_$(PROFILE).utram.srec;
@echo -e "\nAn image with CFE for the IKOS emulator has been built. It is named"
@echo -e "targets/$(PROFILE)/bcm9$(BRCM_CHIP)_$(PROFILE).srec"
@echo -e "\nBefore testing with the IKOS emulator, this build can be unit tested"
@echo -e "with an existing chip and board as follows."
@echo -e "1. Flash targets/$(PROFILE)/$(FLASH_IMAGE_NAME).w onto an existing board."
@echo -e "2. Start the EPI EDB debugger. At the edbice prompt, enter:"
@echo -e " edbice> fr m targets/$(PROFILE)/bcm9$(BRCM_CHIP)_$(PROFILE).utram.srec"
@echo -e " edbice> r"
@echo -e "3. Program execution will start at 0xb8000000 (or 0xbfc00000) and,"
@echo -e " if successful, will enter the Linux shell.\n"
############################################################################
#
# Generate the credits
#
############################################################################
gen_credits:
cd $(RELEASE_DIR); \
if [ -e gen_credits.pl ]; then \
perl gen_credits.pl; \
fi
############################################################################
#
# This is where we build the image
#
############################################################################
buildimage: kernelbuild libcreduction gen_credits
cd $(TARGETS_DIR); ./buildFS;
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),squashfs)
cd $(TARGETS_DIR); $(HOSTTOOLS_DIR)/fakeroot/fakeroot ./buildFS2
else
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),jffs2)
cd $(TARGETS_DIR); $(HOSTTOOLS_DIR)/fakeroot/fakeroot ./buildFS2
else
ifeq ($(BRCM_BUILD_USR),root)
cd $(TARGETS_DIR); su --command="./buildFS2"
else
ifeq ($(BRCM_BUILD_USR1),root)
cd $(TARGETS_DIR); sudo ./buildFS2
else
cd $(TARGETS_DIR); rm -rf $(PROFILE)/fs; ln -s /work/$(BRCM_BUILD_USR)/fs $(PROFILE)/fs; sudo ./buildFS2
endif
endif
endif
endif
# (mksquashfs call moved to buildFS, for fakeroot to work)
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),jffs2)
cd $(PROFILE_DIR); \
dd if=/dev/zero of=file128k.tmp bs=1k count=128; \
cat $(CFE_ROM_FILE) file128k.tmp | head --bytes=$(FLASH_NAND_BLOCK_16KB) > cferom.tmp; \
cat cferom.tmp rootfs16kb.img > $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16); \
$(HOSTTOOLS_DIR)/addvtoken --chip $(BRCM_CHIP) --flashtype NAND16 $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16) $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16).w; \
$(HOSTTOOLS_DIR)/addvtoken --chip $(BRCM_CHIP) --flashtype NAND16 rootfs16kb.img $(FLASH_NAND_FS_IMAGE_NAME_16).w; \
$(HOSTTOOLS_DIR)/createimg --boardid=$(BRCM_BOARD_ID) --voiceboardid $(BRCM_VOICE_BOARD_ID) --numbermac=$(BRCM_NUM_MAC_ADDRESSES) --macaddr=$(BRCM_BASE_MAC_ADDRESS) --tp=$(BRCM_MAIN_TP_NUM) --psisize=$(BRCM_PSI_SIZE) --auxfsprcnt=$(BRCM_AUXFS_PERCENT) --gponsn=$(BRCM_GPON_SERIAL_NUMBER) --gponpw=$(BRCM_GPON_PASSWORD) --wholeflashfile=$(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16).w; \
cat $(CFE_ROM_FILE) file128k.tmp | head --bytes=$(FLASH_NAND_BLOCK_128KB) > cferom.tmp; \
cat cferom.tmp rootfs128kb.img > $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_128); \
$(HOSTTOOLS_DIR)/addvtoken --chip $(BRCM_CHIP) --flashtype NAND128 $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_128) $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_128).w; \
$(HOSTTOOLS_DIR)/addvtoken --chip $(BRCM_CHIP) --flashtype NAND128 rootfs128kb.img $(FLASH_NAND_FS_IMAGE_NAME_128).w; \
$(HOSTTOOLS_DIR)/createimg --boardid=$(BRCM_BOARD_ID) --voiceboardid $(BRCM_VOICE_BOARD_ID) --numbermac=$(BRCM_NUM_MAC_ADDRESSES) --macaddr=$(BRCM_BASE_MAC_ADDRESS) --tp=$(BRCM_MAIN_TP_NUM) --psisize=$(BRCM_PSI_SIZE) --auxfsprcnt=$(BRCM_AUXFS_PERCENT) --gponsn=$(BRCM_GPON_SERIAL_NUMBER) --gponpw=$(BRCM_GPON_PASSWORD) --wholeflashfile=$(FLASH_NAND_CFEROM_FS_IMAGE_NAME_128).w; \
rm $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16) $(FLASH_NAND_CFEROM_FS_IMAGE_NAME_128); \
rm file128k.tmp cferom.tmp;
@mkdir -p $(IMAGES_DIR)
@cp $(PROFILE_DIR)/$(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16).w $(IMAGES_DIR)/$(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16)_$(BRCM_RELEASETAG)-$(shell date '+%y%m%d_%H%M').w
@echo
@echo -e "Done! Image $(PROFILE) has been built in $(PROFILE_DIR)."
else
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),nfs)
@cd $(PROFILE_DIR); cp $(KERNEL_DIR)/vmlinux . ;
@echo
@echo -e "======== Follow the below steps to start your NFS root file system on host ========"
@echo -e "* Copy $(PROFILE_DIR)/vmlinux to your TFTP server boot directory"
@echo -e " cp $(PROFILE_DIR)/vmlinux /tftpboot"
@if [ -n "$(BRCM_NFS_ROOT_DIR)" ]; then \
echo -e "* Copy your $(PROFILE_DIR)/fs directory to $(NFS_ROOT_DIR)"; \
echo -e " cp -Rf $(PROFILE_DIR)/fs $(NFS_ROOT_DIR)"; \
fi
@if [ `grep "$(NFS_ROOT_DIR)" /etc/exports | wc -l` -lt "1" ]; then \
echo -e "* Login as root"; \
echo -e "* Add \"$(NFS_ROOT_DIR) *(rw,no_root_squash)\" to /etc/exports"; \
echo -e " echo \"$(NFS_ROOT_DIR) *(rw,no_root_squash)\" >> /etc/exports"; \
echo -e "* Restart your nfs server"; \
echo -e " service nfs restart"; \
fi
@echo -e "* Reboot your board and break into CFE bootloader, choose h on \"Run from flash/host\" and vmlinux on \"Default host run file name\""
@echo
else
cd $(PROFILE_DIR); \
cp $(KERNEL_DIR)/vmlinux . ; \
$(STRIP) --remove-section=.note --remove-section=.comment vmlinux; \
$(OBJCOPY) -O binary vmlinux vmlinux.bin; \
$(HOSTTOOLS_DIR)/cmplzma -k -2 vmlinux vmlinux.bin vmlinux.lz;\
$(HOSTTOOLS_DIR)/bcmImageBuilder --output $(FS_KERNEL_IMAGE_NAME) --chip $(or $(TAG_OVERRIDE),$(BRCM_CHIP)) --board $(BRCM_BOARD_ID) --blocksize $(BRCM_FLASHBLK_SIZE) --image-version $(IMAGE_VERSION) --cfefile $(CFE_FILE) --rootfsfile rootfs.img --kernelfile vmlinux.lz; \
$(HOSTTOOLS_DIR)/bcmImageBuilder --output $(CFE_FS_KERNEL_IMAGE_NAME) --chip $(or $(TAG_OVERRIDE),$(BRCM_CHIP)) --board $(BRCM_BOARD_ID) --blocksize $(BRCM_FLASHBLK_SIZE) --image-version $(IMAGE_VERSION) --cfefile $(CFE_FILE) --rootfsfile rootfs.img --kernelfile vmlinux.lz --include-cfe; \
$(HOSTTOOLS_DIR)/createimg --boardid=$(BRCM_BOARD_ID) --voiceboardid $(BRCM_VOICE_BOARD_ID) --numbermac=$(BRCM_NUM_MAC_ADDRESSES) --macaddr=$(BRCM_BASE_MAC_ADDRESS) --tp=$(BRCM_MAIN_TP_NUM) --psisize=$(BRCM_PSI_SIZE) --logsize=$(BRCM_LOG_SECTION_SIZE) --auxfsprcnt=$(BRCM_AUXFS_PERCENT) --gponsn=$(BRCM_GPON_SERIAL_NUMBER) --gponpw=$(BRCM_GPON_PASSWORD) --inputfile=$(CFE_FS_KERNEL_IMAGE_NAME) --outputfile=$(FLASH_IMAGE_NAME); \
$(HOSTTOOLS_DIR)/addvtoken --chip $(or $(TAG_OVERRIDE),$(BRCM_CHIP)) --flashtype NOR $(FLASH_IMAGE_NAME) $(FLASH_IMAGE_NAME).w
@mkdir -p $(IMAGES_DIR)
@cp $(PROFILE_DIR)/$(FS_KERNEL_IMAGE_NAME) $(IMAGES_DIR)/$(FS_KERNEL_IMAGE_NAME)_$(BRCM_RELEASETAG)-$(shell date '+%y%m%d_%H%M')
@echo
@echo -e "Done! Image $(PROFILE) has been built in $(IMAGES_DIR)."
endif
endif
###########################################
#
# System code clean-up
#
###########################################
#
# mwang: since SUBDIRS are no longer defined, the next two targets are not useful anymore.
# how were they used anyways?
#
#subdirs: $(patsubst %, _dir_%, $(SUBDIRS))
#$(patsubst %, _dir_%, $(SUBDIRS)) :
# $(MAKE) -C $(patsubst _dir_%, %, $@) $(TGT)
clean: target_clean bcmdrivers_clean data-model_clean userspace_clean kernel_clean \
hosttools_clean voice_clean xchange_clean wlan_clean
rm -f $(HOSTTOOLS_DIR)/scripts/lxdialog/*.o
rm -f .tmpconfig*
rm -f $(LAST_PROFILE_COOKIE)
fssrc_clean:
rm -fr $(FSSRC_DIR)/bin
rm -fr $(FSSRC_DIR)/sbin
rm -fr $(FSSRC_DIR)/lib
rm -fr $(FSSRC_DIR)/upnp
rm -fr $(FSSRC_DIR)/docs
rm -fr $(FSSRC_DIR)/webs
rm -fr $(FSSRC_DIR)/usr
rm -fr $(FSSRC_DIR)/linuxrc
rm -fr $(FSSRC_DIR)/images
rm -fr $(FSSRC_DIR)/etc/wlan
rm -fr $(FSSRC_DIR)/etc/certs
kernel_clean: sanity_check
$(MAKE) -C $(KERNEL_DIR) mrproper
rm -f $(KERNEL_DIR)/arch/mips/defconfig
rm -f $(HOSTTOOLS_DIR)/lzma/decompress/*.o
rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxKernel
rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxKernel
bcmdrivers_clean:
$(MAKE) -C bcmdrivers clean
userspace_clean: sanity_check fssrc_clean
$(MAKE) -C userspace clean
data-model_clean:
$(MAKE) -C data-model clean
unittests_clean:
$(MAKE) -C unittests clean
target_clean: sanity_check
rm -f $(PROFILE_DIR)/rootfs*.img
rm -f $(PROFILE_DIR)/vmlinux
rm -f $(PROFILE_DIR)/vmlinux.bin
rm -f $(PROFILE_DIR)/vmlinux.lz
rm -f $(PROFILE_DIR)/$(FS_KERNEL_IMAGE_NAME)
rm -f $(PROFILE_DIR)/$(CFE_FS_KERNEL_IMAGE_NAME)
rm -f $(PROFILE_DIR)/$(FLASH_IMAGE_NAME)
rm -f $(PROFILE_DIR)/$(FLASH_IMAGE_NAME).w
rm -f $(PROFILE_DIR)/$(FLASH_NAND_CFEROM_FS_IMAGE_NAME_16).w
rm -f $(PROFILE_DIR)/$(FLASH_NAND_FS_IMAGE_NAME_16).w
rm -f $(PROFILE_DIR)/$(FLASH_NAND_CFEROM_FS_IMAGE_NAME_128).w
rm -f $(PROFILE_DIR)/$(FLASH_NAND_FS_IMAGE_NAME_128).w
rm -f $(PROFILE_DIR)/*.srec
rm -fr $(PROFILE_DIR)/modules
rm -fr $(PROFILE_DIR)/op
rm -fr $(INSTALL_DIR)
find targets -name vmlinux -print -exec rm -f "{}" ";"
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),squashfs)
rm -fr $(TARGET_FS)
else
ifeq ($(strip $(BRCM_KERNEL_ROOTFS)),jffs2)
rm -fr $(TARGET_FS)
else
ifeq ($(BRCM_BUILD_USR),root)
su --command="rm -fr $(TARGET_FS)"
else
sudo rm -fr $(TARGET_FS)/*; rm -rf $(TARGET_FS)
endif
endif
endif
hosttools_clean:
$(MAKE) -C $(HOSTTOOLS_DIR) clean
xchange_clean:
rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxUser
rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxUser
# In the data release tarball, vodsl is not present,
# so don't go in there unconditionally.
ifneq ($(strip $(BUILD_VODSL)),)
vodsl_clean: sanity_check
find userspace/private/apps/vodsl -name '*.o'|xargs rm -f
else
vodsl_clean:
@echo "skipping vodsl (not configured)"
endif
ifneq ($(strip $(BUILD_DECT)),)
dectd_clean: sanity_check fssrc_clean
$(MAKE) -C $(BUILD_DIR)/userspace/private/apps/dectd clean
find bcmdrivers/broadcom/char/dectshim -name '*.ko'|xargs rm -f
find bcmdrivers/broadcom/char/dectshim -name '*.o'|xargs rm -f
find bcmdrivers/broadcom/char/dectshim -name '*.a'|xargs rm -f
find bcmdrivers/broadcom/char/dectshim -name '*.lib'|xargs rm -f
else
dectd_clean:
@echo "Skipping dectd application (not configured)"
endif
voice_clean: sanity_check vodsl_clean data-model_clean dectd_clean
ifneq ($(strip $(BUILD_VODSL)),)
find bcmdrivers/broadcom/char/endpoint -name '*.ko'|xargs rm -f
find bcmdrivers/broadcom/char/endpoint -name '*.o'|xargs rm -f
find bcmdrivers/broadcom/char/endpoint -name '*.a'|xargs rm -f
find bcmdrivers/broadcom/char/endpoint -name '*.lib'|xargs rm -f
find bcmdrivers/broadcom/char/dspapp -name '*.o'|xargs rm -f
find bcmdrivers/broadcom/char/dspapp -name '*.ko'|xargs rm -f
find kernel/linux/eptlib -name '*.lib'|xargs rm -f
find userspace/private -name '*voice.o'|xargs rm -f
endif
rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxKernel
rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxKernel
rm -rf $(XCHANGE_DIR)/dslx/lib/LinuxUser
rm -rf $(XCHANGE_DIR)/dslx/obj/LinuxUser
rm -f $(KERNEL_DIR)/eptlib/*
slic_clean: sanity_check voice_clean
ifneq ($(strip $(BUILD_VODSL)),)
find userspace/private/libs/cms_core/linux -name 'rut_voice.o' -exec rm -f "{}" ";"
find userspace/private/libs/cms_core/linux -name 'rut_voice.d' -exec rm -f "{}" ";"
find userspace/private/libs/cms_dal -name 'dal_voice.o' -exec rm -f "{}" ";"
find userspace/private/libs/cms_dal -name 'dal_voice.d' -exec rm -f "{}" ";"
endif
$(MAKE) -C data-model clean
wlan_clean:
cd bcmdrivers/broadcom/net/wl;\
files="\
`find . -name 'build'`\
`find . -type l`\
`find . -name '*.o'` \
`find . -name '*.ko'`\
`find . -name '*.oo'`\
`find . -name '*.bin'`\
`find . -name 'dummy.c'`\
`find . -name 'epivers'`\
`find . -name 'rver'`\
";\
for x in $$files; do\
rm -rf $$x;\
done;\
cd $(BUILD_DIR)/targets;\
rm -rf $(PROFILE)/fs.install/etc/wlan
###########################################
#
# Temporary kernel patching mechanism
#
###########################################
.PHONY: genpatch patch
genpatch:
@hostTools/kup_tmp/genpatch
patch:
# @hostTools/kup_tmp/patch
###########################################
#
# System-wide exported variables
# (in alphabetical order)
#
###########################################
export \
ACTUAL_MAX_JOBS \
BRCMAPPS \
BRCM_BOARD \
BRCM_DRIVER_PCI \
BRCM_EXTRAVERSION \
BRCM_KERNEL_NETQOS \
BRCM_KERNEL_ROOTFS \
BRCM_KERNEL_AUXFS_JFFS2 \
BRCM_SQUASHFS_BLOCK_SIZE \
BRCM_SQUASHFS_FRAGMENT_CACHE_SIZE \
BRCM_KERNEL_OPROFILE \
BRCM_LDX_APP \
BRCM_MIPS_ONLY_BUILD \
BRCM_MIPS_ONLY_BUILD \
BRCM_PSI_VERSION \
BRCM_PTHREADS \
BRCM_RELEASE \
BRCM_RELEASETAG \
BRCM_SNMP \
BRCM_VERSION \
BUILD_FCCTL \
BUILD_CMFCTL \
BUILD_CMFVIZ \
BUILD_CMFD \
BUILD_XDSLCTL \
BUILD_XTMCTL \
BUILD_VLANCTL \
BUILD_BRCM_VLAN \
BUILD_BRCTL \
BUILD_BUSYBOX \
BUILD_CERT \
BUILD_DDNSD \
BUILD_DIAGAPP \
BUILD_DIR \
BUILD_DNSPROBE \
BUILD_DPROXY \
BUILD_DYNAHELPER \
BUILD_DNSSPOOF \
BUILD_EBTABLES \
BUILD_EPITTCP \
BUILD_ETHWAN \
BUILD_FTPD \
BUILD_FTPD_STORAGE \
BUILD_HTTPD \
BUILD_HTTPD_SSL \
BUILD_MCAST_PROXY \
BUILD_IPPD \
BUILD_IPROUTE2 \
BUILD_IPSEC_TOOLS \
BUILD_L2TPAC \
BUILD_IPTABLES \
BUILD_WPS_BTN \
BUILD_LLTD \
BUILD_WSC \
BUILD_BCMCRYPTO \
BUILD_BCMSHARED \
BUILD_NAS \
BUILD_NVRAM \
BUILD_OPROFILE \
BUILD_PORT_MIRRORING \
BUILD_PPPD \
PPP_AUTODISCONN \
BUILD_SES \
BUILD_SIPROXD \
BUILD_SLACTEST \
BUILD_SNMP \
BUILD_SNTP \
BUILD_SOAP \
BUILD_SOAP_VER \
BUILD_SSHD \
BUILD_SSHD_MIPS_GENKEY \
BUILD_TOD \
BUILD_TR64 \
BUILD_TR64_DEVICECONFIG \
BUILD_TR64_DEVICEINFO \
BUILD_TR64_LANCONFIGSECURITY \
BUILD_TR64_LANETHINTERFACECONFIG \
BUILD_TR64_LANHOSTS \
BUILD_TR64_LANHOSTCONFIGMGMT \
BUILD_TR64_LANUSBINTERFACECONFIG \
BUILD_TR64_LAYER3 \
BUILD_TR64_MANAGEMENTSERVER \
BUILD_TR64_TIME \
BUILD_TR64_USERINTERFACE \
BUILD_TR64_QUEUEMANAGEMENT \
BUILD_TR64_LAYER2BRIDGE \
BUILD_TR64_WANCABLELINKCONFIG \
BUILD_TR64_WANCOMMONINTERFACE \
BUILD_TR64_WANDSLINTERFACE \
BUILD_TR64_WANDSLLINKCONFIG \
BUILD_TR64_WANDSLCONNECTIONMGMT \
BUILD_TR64_WANDSLDIAGNOSTICS \
BUILD_TR64_WANETHERNETCONFIG \
BUILD_TR64_WANETHERNETLINKCONFIG \
BUILD_TR64_WANIPCONNECTION \
BUILD_TR64_WANPOTSLINKCONFIG \
BUILD_TR64_WANPPPCONNECTION \
BUILD_TR64_WLANCONFIG \
BUILD_TR69C \
BUILD_TR69_QUEUED_TRANSFERS \
BUILD_TR69C_SSL \
BUILD_TR69_XBRCM \
BUILD_TR69_UPLOAD \
BUILD_OMCI \
BUILD_UDHCP \
BUILD_UDHCP_RELAY \
BUILD_UPNP \
BUILD_VCONFIG \
BUILD_SUPERDMZ \
BUILD_WLCTL \
BUILD_ZEBRA \
BUILD_LIBUSB \
BUILD_WANVLANMUX \
HOSTTOOLS_DIR \