1#
2# Broadcom Linux Router Makefile
3# 
4# Copyright (C) 2010, Broadcom Corporation. All Rights Reserved.
5# 
6# Permission to use, copy, modify, and/or distribute this software for any
7# purpose with or without fee is hereby granted, provided that the above
8# copyright notice and this permission notice appear in all copies.
9# 
10# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
13# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
15# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
16# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17#
18# $Id: Makefile,v 1.263 2010/10/22 12:47:08 Exp $
19#
20
21include .config
22
23ifndef FW_TYPE
24FW_TYPE = WW
25endif
26export FW_TYPE
27
28BOARDID_FILE=compatible_WNDR4500rev.txt
29FW_NAME=WNDR4500REV
30ifeq ($(PROFILE),WNDR4500REV)
31BOARDID_FILE=compatible_WNDR4500rev.txt
32FW_NAME=WNDR4500REV
33endif
34ifeq ($(PROFILE),WNDR4500v2)
35BOARDID_FILE=compatible_WNDR4500v2.txt
36FW_NAME=WNDR4500v2
37endif
38
39
40#
41# Paths
42#
43
44
45CPU ?=
46LINUX_VERSION = 2_6
47MAKE_ARGS ?=
48ARCH = mips
49PLT ?= mipsel
50
51# Get ARCH from PLT argument
52ifneq ($(findstring arm,$(PLT)),)
53ARCH := arm
54endif
55
56# uClibc wrapper
57ifeq ($(CONFIG_UCLIBC),y)
58PLATFORM := $(PLT)-uclibc
59else ifeq ($(CONFIG_GLIBC),y)
60PLATFORM := $(PLT)-glibc
61else
62PLATFORM := $(PLT)
63endif
64
65# Source bases
66export PLATFORM LIBDIR USRLIBDIR LINUX_VERSION
67
68export BCM_KVERSIONSTRING := $(subst _,.,$(LINUX_VERSION))
69
70WLAN_ComponentsInUse := bcmwifi clm ppr olpc
71include ../makefiles/WLAN_Common.mk
72export SRCBASE := $(WLAN_SrcBaseA)
73export BASEDIR := $(WLAN_TreeBaseA)
74export TOP = $(CURDIR)
75
76ifeq (2_6_36,$(LINUX_VERSION))
77export 	LINUXDIR := $(BASEDIR)/components/opensource/linux/linux-2.6.36
78export 	KBUILD_VERBOSE := 1
79export	BUILD_MFG := 0
80# for now, only suitable for 2.6.36 router platform
81SUBMAKE_SETTINGS = SRCBASE=$(SRCBASE) BASEDIR=$(BASEDIR)
82else ifeq (2_6,$(LINUX_VERSION))
83export 	LINUXDIR := $(SRCBASE)/linux/linux-2.6
84export 	KBUILD_VERBOSE := 1
85export	BUILD_MFG := 0
86else
87export 	LINUXDIR := $(SRCBASE)/linux/linux
88endif
89
90
91#
92# Cross-compile environment variables
93#
94
95# Build platform
96export BUILD := i386-pc-linux-gnu
97export HOSTCC := gcc
98
99ifeq ($(PLATFORM),mipsel)
100export CROSS_COMPILE := mipsel-linux-
101export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
102export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
103endif
104
105ifeq ($(PLATFORM),mipsel-uclibc)
106ifeq (2_6_36,$(LINUX_VERSION))
107export CROSS_COMPILE := mipsel-uclibc-linux-2.6.36-
108CFLAGS += -D__EXPORTED_HEADERS__ -fPIC
109else ifeq (2_6,$(LINUX_VERSION))
110export CROSS_COMPILE := mipsel-uclibc-linux26-
111else
112export CROSS_COMPILE := mipsel-uclibc-
113endif
114export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
115export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
116endif
117
118ifeq ($(PLATFORM),mipsel-glibc)
119ifeq (2_6_36,$(LINUX_VERSION))
120export CROSS_COMPILE := mipsel-glibc-linux-2.6.36-
121export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
122CFLAGS += -D__EXPORTED_HEADERS__ -fPIC
123else ifeq (2_6,$(LINUX_VERSION))
124export CROSS_COMPILE := mipsel-linux-linux26-
125else
126export CROSS_COMPILE := mipsel-linux-
127export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
128export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
129endif
130endif
131
132ifeq ($(PLATFORM),arm-uclibc)
133export CROSS_COMPILE := arm-brcm-linux-uclibcgnueabi-
134export CONFIGURE := ./configure arm-linux --build=$(BUILD)
135export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
136export CFLAGS += -fno-strict-aliasing
137SUBMAKE_SETTINGS += ARCH=$(ARCH)
138EXTRA_LDFLAGS := -lgcc_s
139endif
140
141
142ifeq ($(CONFIG_RTR_OPTIMIZE_SIZE),y)
143export CFLAGS += -Os
144export OPTCFLAGS = -Os
145else
146export CFLAGS += -O2
147export OPTCFLAGS = -O2
148endif
149
150#look at driver configuration
151WLCFGDIR=$(SRCBASE)/wl/config
152
153ifeq ($(CONFIG_NVRAM),y)
154export CFLAGS += -DBCMNVRAM
155endif
156
157ifeq ($(CONFIG_BCMWPA2),y)
158export CFLAGS += -DBCMWPA2
159endif
160export CFLAGS += -DRESTART_ALL_PROCESSES
161#export CFLAGS += -DRESTART_ALL_PROCESSES_DEBUG
162
163ifeq ("$(CONFIG_USBAP)","y")
164export CFLAGS += -D__CONFIG_USBAP__
165endif
166
167ifeq ($(CONFIG_BCMQOS),y)
168export CFLAGS += -DBCMQOS
169endif
170ifeq ($(CONFIG_WPS),y)
171export CFLAGS += -D__CONFIG_WPS__
172# WFA WPS 2.0 Testbed extra caps
173#export CFLAGS += -DWFA_WPS_20_TESTBED
174endif
175
176ifeq ($(CONFIG_EMF),y)
177export CFLAGS += -D__CONFIG_EMF__
178endif
179
180ifeq ($(CONFIG_IGMP_PROXY),y)
181export CFLAGS += -D__CONFIG_IGMP_PROXY__
182endif
183
184#ifdef __CONFIG_NORTON__
185ifeq ($(CONFIG_NORTON),y)
186export CFLAGS += -D__CONFIG_NORTON__
187endif
188#endif /* __CONFIG_NORTON__ */
189
190ifeq ($(CONFIG_TRAFFIC_MGMT_RSSI_POLICY),y)
191export CFLAGS += -DTRAFFIC_MGMT_RSSI_POLICY
192endif
193
194obj-$(CONFIG_UTELNETD) += utelnetd
195
196MNL_CFLAGS:="-I$(LIBMNL_DIR)/install/include"
197MNL_LIBS:="-L$(LIBMNL_DIR)/install/lib -lmnl"
198
199NFNETLINK_CFLAGS:="-I$(LIBNFNETLINK_DIR)/install/include"
200NFNETLINK_LIBS:="-L$(LIBNFNETLINK_DIR)/install/lib -lnfnetlink"
201
202NETFILTER_CONNTRACK_CFLAGS:="-I$(LIBNETFILTER_CONNTRACK_DIR)/install/include"
203NETFILTER_CONNTRACK_LIBS:="-L$(LIBNETFILTER_CONNTRACK_DIR)/install/lib -lnetfilter_conntrack"
204
205NETFILTER_QUEUE_CFLAGS:="-I$(LIBNETFILTER_QUEUE_DIR)/install/include"
206NETFILTER_QUEUE_LIBS:="-L$(LIBNETFILTER_QUEUE_DIR)/install/lib -lnetfilter_queue"
207
208# add probsup for NTGR SmartMesh
209#ifdef WLPROBSUP
210export CFLAGS += -DWLPROBSUP
211#endif
212
213ifeq ($(CONFIG_SOUND),y)
214export CFLAGS += -D__CONFIG_SOUND__
215endif
216
217ifeq ($(CONFIG_VOIP),y)
218export CFLAGS += -DBCMVOIP
219endif
220
221ifeq ($(CONFIG_SQUASHFS), y)
222ROOT_IMG :=target.squashfs
223else
224ROOT_IMG := target.cramfs
225endif
226
227ifeq ($(CONFIG_WAPI),y)
228export CFLAGS += -DBCMWAPI_WAI -DBCMWAPI_WPI
229endif
230
231ifeq ($(CONFIG_PHYMON_UTILITY),y)
232export CFLAGS += -DPHYMON
233endif
234
235ifeq ($(CONFIG_OPENSSL),y)
236export CFLAGS += -DSUPPORT_REMOTE_HTTPS
237endif
238
239
240ifeq ($(CONFIG_NETFLIX_QOS_RULE),y)
241export CFLAGS += -DNETFLIX_QOS_RULE
242endif
243
244
245
246ifeq ($(CONFIG_QOS_AUTO_CHECK_BW),y)
247export CFLAGS += -DQOS_AUTO_CHECK_BANDWIDTH
248endif
249
250ifeq ($(CONFIG_WPS_V20),y)
251export CFLAGS += -DINCLUDE_WPS_V20
252endif
253
254ifeq ($(CONFIG_5G_AUTO_CHANNEL),y)
255export CFLAGS += -DINCLUDE_5G_AUTO_CHANNEL
256endif
257
258ifneq (2_4,$(LINUX_VERSION))
259CRAMFSDIR := cramfs
260else
261CRAMFSDIR := $(LINUXDIR)/scripts/cramfs
262endif
263
264ifeq ($(CONFIG_OPENDNS),y)
265export CFLAGS += -DOPENDNS_PARENTAL_CONTROL
266endif
267
268
269ifeq ($(CONFIG_ACCESSCONTROL),y)
270export CFLAGS += -DINCLUDE_ACCESSCONTROL
271endif
272
273
274ifeq ($(PROFILE),WNDR4500REV)
275export CFLAGS += -DU12H189 -DWNDR4500REV
276export CFLAGS += -DMULTIPLE_SSID
277export CFLAGS += -DENABLE_ML
278#export CFLAGS += -DWIFI_DISABLE
279export CFLAGS += -DBCM53125
280export CFLAGS +=  -DCONFIG_RUSSIA_IPTV
281
282
283export CFLAGS += -DINCLUDE_UCP
284
285ifeq ($(CONFIG_DLNA),y)
286export CFLAGS += -DDLNA
287#export CFLAGS += -DDLNA_DEBUG
288endif
289export CFLAGS += -DHTTP_ACCESS_USB
290#export CFLAGS += -DMAX_USB_ACCESS
291export CFLAGS += -DSAMBA_ENABLE
292export CFLAGS += -DUSB_NEW_SPEC
293export CFLAGS += -DINCLUDE_WIFI_BUTTON
294export CONFIG_LIBNSL=y
295export CFLAGS += -DINCLUDE_USB_LED
296export CFLAGS += -DINCLUDE_DUAL_BAND
297export CFLAGS += -DSINGLE_FIRMWARE
298export CFLAGS += -DINCLUDE_GET_ST_CHKSUM
299export CFLAGS += -DUNIFIED_STR_TBL
300export CFLAGS += -DFIRST_MTD_ROTATION
301export CFLAGS += -DWIFI_ON_OFF_SCHE
302export CFLAGS += -DAUTO_CONN_24HR
303export CFLAGS += -DIGMP_PROXY
304export CFLAGS += -DAP_MODE
305export CFLAGS += -D__CONFIG_IGMP_SNOOPING__
306ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
307export CFLAGS += -DLINUX26
308export CFLAGS += -DINCLUDE_IPV6
309endif
310export CFLAGS += -DPRESET_WL_SECURITY
311export CFLAGS += -DNEW_BCM_WPS_IPC
312endif
313
314ifeq ($(PROFILE),WNDR4500v2)
315export CFLAGS += -DU12H189 -DWNDR4500REV -DWNDR4500v2
316export CFLAGS += -DMULTIPLE_SSID
317export CFLAGS += -DENABLE_ML
318#export CFLAGS += -DWIFI_DISABLE #Foxconn, [DEBUG][MJ] disable wifi.
319export CFLAGS += -DBCM53125
320export CFLAGS +=  -DCONFIG_RUSSIA_IPTV
321#added by dennis ,01/02/2013, for ap mode detection
322#export CFLAGS += -DINCLUDE_DETECT_AP_MODE
323
324export CFLAGS += -DINCLUDE_UCP
325ifeq ($(CONFIG_DLNA),y)
326export CFLAGS += -DDLNA
327#export CFLAGS += -DDLNA_DEBUG
328endif
329export CFLAGS += -DHTTP_ACCESS_USB
330#export CFLAGS += -DMAX_USB_ACCESS
331export CFLAGS += -DSAMBA_ENABLE
332export CFLAGS += -DUSB_NEW_SPEC
333export CFLAGS += -DINCLUDE_WIFI_BUTTON
334export CONFIG_LIBNSL=y
335
336export CFLAGS += -DINCLUDE_USB_LED
337export CFLAGS += -DINCLUDE_DUAL_BAND
338export CFLAGS += -DSINGLE_FIRMWARE
339export CFLAGS += -DINCLUDE_GET_ST_CHKSUM
340export CFLAGS += -DUNIFIED_STR_TBL
341export CFLAGS += -DFIRST_MTD_ROTATION
342export CFLAGS += -DWIFI_ON_OFF_SCHE
343export CFLAGS += -DAUTO_CONN_24HR
344export CFLAGS += -DIGMP_PROXY
345export CFLAGS += -DAP_MODE
346export CFLAGS += -D__CONFIG_IGMP_SNOOPING__
347ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
348export CFLAGS += -DLINUX26
349export CFLAGS += -DINCLUDE_IPV6
350endif
351export CFLAGS += -DPRESET_WL_SECURITY
352export CFLAGS += -DNEW_BCM_WPS_IPC
353export CFLAGS += -DSTA_MODE
354endif
355
356
357ifeq ($(FW_TYPE),NA)
358export CFLAGS += -DFW_VERSION_NA
359endif
360
361ifeq ($(CONFIG_BCMDCS),y)
362export CFLAGS += -DBCM_DCS
363endif
364
365ifeq ($(CONFIG_EXTACS),y)
366export CFLAGS += -DEXT_ACS
367endif
368
369ifeq ($(CONFIG_BCMBSD),y)
370export CFLAGS += -DBCM_BSD
371endif
372
373ifeq ($(CONFIG_MFP),y)
374export CFLAGS += -DMFP
375endif
376
377ifeq ($(CONFIG_HSPOT),y)
378export CFLAGS += -DNAS_GTK_PER_STA
379endif
380
381ifeq ($(CONFIG_MFP_TEST),y)
382export CFLAGS += -DMFP_TEST
383endif
384
385ifeq ($(CONFIG_SIGMA),y)
386export CFLAGS += -D__CONFIG_SIGMA__
387endif
388
389ifeq ($(CONFIG_MINI_ROUTER), y)
390export CFLAGS += -D__CONFIG_ROUTER_MINI__
391endif
392
393ifeq ($(CONFIG_WNM), y)
394export CFLAGS += -DWLWNM
395endif
396
397ifeq ($(CONFIG_TIMEMACHINE),y)
398export CFLAGS += -DINCLUDE_AFP
399endif
400
401export CC := $(CROSS_COMPILE)gcc
402export CXX := $(CROSS_COMPILE)g++
403export AR := $(CROSS_COMPILE)ar
404export AS := $(CROSS_COMPILE)as
405export LD := $(CROSS_COMPILE)ld
406export NM := $(CROSS_COMPILE)nm
407export RANLIB := $(CROSS_COMPILE)ranlib
408export STRIP := $(CROSS_COMPILE)strip
409export SIZE := $(CROSS_COMPILE)size
410export OBJCOPY := $(CROSS_COMPILE)objcopy
411
412ifneq ("$(LINUX_VERSION)","2_4")
413export MKSYM := $(shell which $(TOP)/misc/mksym.pl)
414endif
415
416#
417# Install and target directories
418#
419
420export PLATFORMDIR := $(TOP)/$(PLATFORM)
421export INSTALLDIR := $(PLATFORMDIR)/install
422export TARGETDIR := $(PLATFORMDIR)/target
423
424define STRIP_DEBUG_SYMBOLS
425	@dbgsymf=$(basename $(1))_dbgsym$(suffix $(1)); \
426	if [ "$(1)" -nt "$${dbgsymf}" ]; then \
427	   echo "#- $0"; \
428	   ls -ln $1 | awk '{printf "Orig  size: %10d bytes, %s\n",$$5,$$NF}'; \
429	   cp -p -v $1 $$dbgsymf; $(STRIP) -d $(1); touch $$dbgsymf; \
430	   ls -ln $1 | awk '{printf "Strip size: %10d bytes, %s\n",$$5,$$NF}'; \
431	fi
432endef
433
434# USB AP support
435# note : the dongle target is only for after pre-build 
436obj-$(CONFIG_USBAP) += bmac dongle
437
438# always build libbcmcrypto
439#obj-y += libbcmcrypto
440
441#
442# Configuration
443#
444
445#ifdef BCMSOUND
446obj-$(CONFIG_SIGMA) += sigma
447obj-$(CONFIG_SALSA) += salsa
448obj-$(CONFIG_LIBZ) += libz
449obj-$(CONFIG_LIBID3TAG) += libid3tag
450obj-$(CONFIG_LIBMAD) += libmad
451obj-$(CONFIG_MADPLAY) += madplay
452obj-$(CONFIG_APLAY) += alsa-utils/aplay
453#endif
454obj-$(CONFIG_NVRAM) += nvram
455obj-$(CONFIG_SHARED) += shared
456#obj-$(CONFIG_LIBBCM) += libbcm
457
458obj-$(CONFIG_OPENSSL) += openssl
459
460ifeq ($(CONFIG_ACOS_MODULES),y)
461#obj-y += ../../ap/acos
462obj-y += ../../ap/gpl
463fw_cfg_file := ../../../project/acos/include/ambitCfg.h
464else
465obj-$(CONFIG_HTTPD) += httpd
466obj-$(CONFIG_WWW) += www
467endif
468
469obj-$(CONFIG_RC) += rc
470obj-$(CONFIG_GLIBC) += lib
471obj-$(CONFIG_UCLIBC) += lib
472obj-$(CONFIG_WLCONF) += wlconf
473obj-$(CONFIG_BRIDGE) += bridge
474obj-$(CONFIG_BUSYBOX) += busybox
475obj-$(CONFIG_DNSMASQ) += dnsmasq
476obj-$(CONFIG_IPTABLES) += iptables
477obj-$(CONFIG_LIBIPT) += iptables
478# Build only for kernel >= 2.6.36.
479ifeq ($(call wlan_version_ge,$(BCM_KVERSIONSTRING),2.6.36),TRUE)
480#ifdef __CONFIG_NORTON__
481obj-$(CONFIG_NORTON) += norton
482#endif /* __CONFIG_NORTON__ */
483obj-$(CONFIG_LIBSTDCPP) += libstdcpp
484obj-$(CONFIG_LIBFLOW) += libflow
485obj-$(CONFIG_LIBMNL) += libmnl
486obj-$(CONFIG_LIBNFNETLINK) += libnfnetlink
487obj-$(CONFIG_LIBNETFILTER_CONNTRACK) += libnetfilter_conntrack
488obj-$(CONFIG_LIBNETFILTER_QUEUE) += libnetfilter_queue
489endif
490obj-$(CONFIG_HSPOT) += hspot_ap
491obj-$(CONFIG_NAS) += nas
492obj-$(CONFIG_WAPI) += wapi/wapid
493obj-$(CONFIG_WAPI_IAS) += wapi/as
494obj-$(CONFIG_SES) += ses/ses
495obj-$(CONFIG_SES_CL) += ses/ses_cl
496obj-$(CONFIG_EZC) += ezc
497#obj-$(CONFIG_NETCONF) += netconf
498#obj-$(CONFIG_NTP) += ntpclient
499#obj-$(CONFIG_PPP) += ppp
500obj-$(CONFIG_UDHCPD) += udhcpd
501#obj-$(CONFIG_IGD) += igd
502obj-$(CONFIG_LIBUPNP) += libupnp
503obj-$(CONFIG_FFMPEG) += ffmpeg
504obj-$(CONFIG_DLNA_DMR) += dlna/dmr
505obj-$(CONFIG_DLNA_DMS) += dlna/dms
506obj-$(CONFIG_SAMBA) += samba
507obj-$(CONFIG_UTILS) += utils
508obj-$(CONFIG_ETC) += etc
509obj-$(CONFIG_VLAN) += vlan
510obj-$(CONFIG_WPS) += wps
511#obj-$(CONFIG_NFC) += nfc
512obj-$(CONFIG_EMF) += emf
513obj-$(CONFIG_EMF) += igs
514#obj-$(CONFIG_IGMP_PROXY) += igmp
515obj-$(CONFIG_WL_ACI) += aci
516ifeq (2_6,$(LINUX_VERSION))
517obj-y += udev
518obj-y += hotplug2
519endif
520obj-$(CONFIG_LLD2D) += lltd/wrt54g-linux
521#obj-$(CONFIG_ACL_LOGD) += acl_log
522obj-$(CONFIG_GPIO) += gpio
523obj-$(CONFIG_SWRESETD) += swresetd
524#if defined(PHYMON)
525obj-$(CONFIG_PHYMON_UTILITY) += phymon
526#endif
527#if defined(EXT_ACS)
528obj-$(CONFIG_EXTACS) += acsd
529#endif
530
531obj-$(CONFIG_RADVD) += radvd
532obj-$(CONFIG_IPROUTE2) += iproute2
533obj-$(CONFIG_IPUTILS) += iputils
534obj-$(CONFIG_DHCPV6S) += dhcp6s
535obj-$(CONFIG_DHCPV6C) += dhcp6c
536ifeq ($(LINUX_VERSION)$(PLT),2_6_36arm)
537obj-$(CONFIG_MPSTAT) += mpstat
538obj-$(CONFIG_TASKSET) += taskset
539endif
540
541
542# BUZZZ tools: function call tracing, performance monitoring, event history
543obj-$(CONFIG_BUZZZ) += buzzz
544# Gigle apps
545obj-$(CONFIG_PLC) += plc
546ifeq ($(CONFIG_PLC),y)
547export CFLAGS += -D__CONFIG_PLC__ -D__CONFIG_URE__
548CFLAGS	+= -DPLC -DWPS_LONGPUSH_DISABLE
549endif
550
551# always build eap dispatcher
552obj-y += eapd/linux
553
554ifeq ($(CONFIG_VOIP),y)
555obj-y += voipd
556endif
557
558
559obj-clean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-clean)
560obj-install := $(foreach obj,$(obj-y),$(obj)-install)
561
562# separate the libraries which need to be built first
563obj-prelibs =$(filter nvram libbcmcrypto shared netconf libupnp libz libid3tag ffmpeg libbcm, $(obj-y)) 
564# remaining libraries that are built next
565obj-postlibs := $(filter-out $(obj-prelibs), $(obj-y))
566
567ifneq ($(WLTEST),1)
568ifneq ($(shell grep "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config),)
569export WLTEST := 1
570endif
571endif
572
573ifeq ($(WLTEST),1)
574export CFLAGS += -DWLTEST
575endif
576
577ifneq (2_4,$(LINUX_VERSION))
578ifneq ($(shell grep "CONFIG_BLK_DEV_INITRD=y" $(LINUXDIR)/.config),)
579ifeq ($(shell grep "CONFIG_BLK_DEV_RAM=y" $(LINUXDIR)/.config),)
580export BUILD_MFG := 1
581endif
582endif
583endif
584
585#
586# Basic rules
587#
588
589
590all: acos_link version $(LINUXDIR)/.config $(obj-y)
591        # Also build kernel
592ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
593	$(MAKE) -C $(LINUXDIR) zImage
594	$(MAKE) CONFIG_SQUASHFS=$(CONFIG_SQUASHFS) -C $(SRCBASE)/router/compressed
595else
596	if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
597	    $(MAKE) -C $(LINUXDIR) zImage ; \
598	fi
599endif
600	if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
601	    $(MAKE) -C $(LINUXDIR) modules ; \
602	fi
603	# Preserve the debug versions of these and strip for release
604	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/vmlinux)
605ifneq (2_4,$(LINUX_VERSION))
606	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl.ko)
607ifeq ("$(CONFIG_USBAP)","y")
608	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl_high/wl_high.ko)
609endif # CONFIG_USBAP
610	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/et/et.ko)
611	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ctf/ctf.ko)
612	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/bcm57xx/bcm57xx.ko)
613	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/emf/emf.ko)
614	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/igs/igs.ko)
615else # LINUXDIR
616	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl.o)
617ifeq ("$(CONFIG_USBAP)","y")
618	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl_high/wl_high.o)
619endif # CONFIG_USBAP
620	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/et/et.o)
621	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ctf/ctf.o)
622	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/bcm57xx/bcm57xx.o)
623	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/emf/emf.o)
624	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/igs/igs.o)
625endif # LINUXDIR
626
627
628# well, we should always be able to use the BOM, but right now, the last build step on
629# the build machine doesn't have it, so we don't rerun this is the file already 
630# exists
631
632version:  $(SRCBASE)/router/shared/router_version.h
633
634# this could fail if the bom doesn't exist. We don't care as long as there is a valid router_version.h
635# if not, the build will fail anyway.
636$(SRCBASE)/router/shared/router_version.h: $(SRCBASE)/router/shared/version.h.in
637	[ ! -e $(SRCBASE)/tools/release/linux-router-bom.mk  ] ||  make SRCBASE=$(SRCBASE) -f $(SRCBASE)/tools/release/linux-router-bom.mk version
638
639
640
641router-clean: $(obj-clean) config-clean
642	rm -rf $(TARGETDIR)
643	#rm -f $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/target.cramfs
644	rm -f $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/target.squashfs
645	rm -rf $(INSTALLDIR)/busybox
646
647clean: router-clean
648	@echo cleaning LINUXDIR = $(LINUXDIR)
649ifneq (2_4,$(LINUX_VERSION))
650	# we need to pass some conf file for cleaning 2.6. The kbuild clean doesn't seem to 
651	# to load the .config the way our wl Makefile  is expecting.
652	$(MAKE) CONFIG_WL_CONF=wlconfig_lx_router_ap -C $(LINUXDIR) clean
653	$(MAKE) -C $(SRCBASE)/router/compressed clean
654else
655	$(MAKE) -C $(LINUXDIR) clean
656endif
657#	$(MAKE) -C $(SRCBASE)/cfe/build/broadcom/bcm947xx clean
658#	$(MAKE) -C $(SRCBASE)/tools/misc clean#water, @make clean error, 11/10/2008
659
660distclean mrproper: clean
661	rm -f .config $(LINUXDIR)/.config
662
663install package: $(filter-out lib-install,$(obj-install)) $(LINUXDIR)/.config
664        # Install binaries into target directory
665	install -d $(TARGETDIR)
666	for dir in $(wildcard $(patsubst %,$(INSTALLDIR)/%,$(obj-y))) ; do \
667	    (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
668	done
669	# optimize the crypto library by removing unneeded symbols
670	#[ ! -d libbcmcrypto ] || $(MAKE) -C libbcmcrypto optimize
671ifneq ("$(CONFIG_WAPI)$(CONFIG_WAPI_IAS)","")
672	# optimize the OPENSSL library by removing unneeded symbols
673#	[ ! -d wapi/wapid ] || $(MAKE) -C wapi/wapid optimize
674endif
675        # Install (and possibly optimize) C library
676	$(MAKE) lib-install
677        # Install modules into filesystem
678	if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
679	    $(MAKE) -C $(LINUXDIR) modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=$(TARGETDIR) ; \
680	fi
681	#$(MAKE) acos-install
682	for dir in $(SRCBASE)/prebuilt/$(FW_TYPE); do \
683            (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
684        done
685	#water, 08/11/2009
686	rm -rf $(TARGETDIR)/lib/modules/2.6.22/build
687	rm -rf $(TARGETDIR)/lib/modules/2.6.22/source
688	rm -rf $(TARGETDIR)/lib/modules/2.6.22/modules.*
689	rm -rf $(TARGETDIR)/lib/modules/2.6.22/extra
690	find $(TARGETDIR) -name .svn  | xargs rm -rf
691	rm -rf $(TARGETDIR)/usr/bin/[
692	rm -rf $(TARGETDIR)/usr/bin/[[
693	rm -rf $(TARGETDIR)/usr/bin/test
694	rm -rf $(TARGETDIR)/bin/false
695	rm -rf $(TARGETDIR)/bin/true
696	rm -rf $(TARGETDIR)/usr/sbin/upnpnat
697	rm -rf $(TARGETDIR)/usr/sbin/epi_ttcp
698	$(STRIP) $(TARGETDIR)/bin/eapd
699	install -d $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/usbprinter
700	install usbprinter/NetUSB.ko $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/usbprinter
701	install ookla/ookla $(TARGETDIR)/bin
702	install -d $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/ufsd
703	install ufsd/ufsd.ko $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/ufsd
704	install ufsd/chkntfs $(TARGETDIR)/bin
705
706ifneq (2_4,$(LINUX_VERSION))
707ifeq ("$(CONFIG_USBAP)","y")
708	# Don't delete wl_high.ko for USBAP
709	find $(TARGETDIR) -name "wl_*.ko" | sed s/\.\*wl_high\\\.ko//g | xargs rm -rf
710else
711	find $(TARGETDIR) -name "wl_*.ko" | xargs rm -rf
712endif
713else # Linux 2.4
714ifeq ("$(CONFIG_USBAP)","y")
715	# Don't delete wl_high.o for USBAP
716	find $(TARGETDIR) -name "wl_*.o" | sed s/\.\*wl_high\\\.o//g | xargs rm -rf
717else
718	find $(TARGETDIR) -name "wl_*.o" | xargs rm -rf
719endif
720endif
721	# Prepare filesystem
722	cd $(TARGETDIR) && $(TOP)/misc/rootprep.sh
723
724ifeq ($(CONFIG_SQUASHFS), y)
725	###########################################
726	### Create Squashfs filesystem ############
727	rm -f $(PLATFORMDIR)/$(ROOT_IMG)
728	rm -f $(PLATFORMDIR)/$(ROOT_IMG).trim
729	rm -f $(TARGETDIR)/sbin/st*
730	find $(TARGETDIR) -name ".svn" | xargs rm -rf
731	cd $(TARGETDIR)/etc && ln -s /tmp/resolv.conf resolv.conf
732endif
733ifeq ($(CONFIG_SQUASHFS), y)
734	# Make sure mksquashfs 3.0 is used
735	$(MAKE) -C squashfs mksquashfs
736	find $(TARGETDIR) -name ".svn" | xargs rm -rf
737	squashfs/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG) -noappend -all-root
738	# for i in $(shell ls $(INSTALLDIR)/utils/usr/sbin) ; do \
739	# 	rm -f $(TARGETDIR)/usr/sbin/$${i} ; \
740	# done
741	# squashfs/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG).trim -noappend -all-root
742else
743	# Make sure mkcramfs-2.0 is used
744	$(MAKE) -C $(CRAMFSDIR) mkcramfs
745	# '-u 0 -g 0' will set the uid and gid of all the files to 0 (root)
746	# These options are currently only available on our version of mkcramfs
747	$(CRAMFSDIR)/mkcramfs -u 0 -g 0 $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG)
748endif
749
750ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
751	# Package kernel and filesystem
752ifeq ($(BUILD_MFG), 1)
753	cd $(TARGETDIR) ; \
754	find . | cpio -o -H newc | gzip > $(LINUXDIR)/usr/initramfs_data.cpio.gz
755	ls -l $(LINUXDIR)/usr/initramfs_data.cpio.gz
756	$(MAKE) -C $(LINUXDIR) zImage
757	$(MAKE) -C $(SRCBASE)/router/compressed
758else
759	cp $(SRCBASE)/router/compressed/vmlinuz $(PLATFORMDIR)/
760	trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG)
761	    addpattern -i $(PLATFORMDIR)/linux.trx -o $(PLATFORMDIR)/linux_lsys.bin ; \
762	if grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
763		cp $(SRCBASE)/router/compressed/vmlinuz-lzma $(PLATFORMDIR)/ ; \
764		trx -o $(PLATFORMDIR)/linux-lzma.trx $(PLATFORMDIR)/vmlinuz-lzma $(PLATFORMDIR)/$(ROOT_IMG) ; \
765	fi
766endif
767	# Pad self-booting Linux to a 64 KB boundary
768	cp $(SRCBASE)/router/compressed/zImage $(PLATFORMDIR)/
769else
770	# Package kernel and filesystem
771	if grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
772	    cp $(PLATFORMDIR)/$(ROOT_IMG) $(LINUXDIR)/arch/mips/ramdisk/$${CONFIG_EMBEDDED_RAMDISK_IMAGE} ; \
773	    $(MAKE) -C $(LINUXDIR) zImage ; \
774	else \
775	    cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz $(PLATFORMDIR)/ ; \
776	    trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG) ; \
777		if grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
778			cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz-lzma $(PLATFORMDIR)/ ; \
779			trx -o $(PLATFORMDIR)/linux-lzma.trx $(PLATFORMDIR)/vmlinuz-lzma $(PLATFORMDIR)/$(ROOT_IMG) ; \
780		fi \
781	fi
782	# Pad self-booting Linux to a 64 KB boundary
783	cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/zImage $(PLATFORMDIR)/
784endif
785	dd conv=sync bs=64k < $(PLATFORMDIR)/zImage > $(PLATFORMDIR)/linux.bin
786	# Append filesystem to self-booting Linux
787	cat $(PLATFORMDIR)/$(ROOT_IMG) >> $(PLATFORMDIR)/linux.bin
788
789	###########################################
790	### Create LZMA kernel ####################
791	$(OBJCOPY) -O binary -g $(LINUXDIR)/vmlinux $(PLATFORMDIR)/vmlinux.bin
792	../../tools/lzma e $(PLATFORMDIR)/vmlinux.bin $(PLATFORMDIR)/vmlinux.lzma
793	trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinux.lzma $(PLATFORMDIR)/$(ROOT_IMG)
794	rm -f $(PLATFORMDIR)/vmlinux.bin $(PLATFORMDIR)/vmlinux.lzma
795
796	###########################################
797	### Create .chk files for Web UI upgrade ##
798	cd $(PLATFORMDIR) && touch rootfs && \
799	../../../tools/packet -k linux.trx -f rootfs -b $(BOARDID_FILE) \
800	-ok kernel_image -oall kernel_rootfs_image -or rootfs_image \
801	-i $(fw_cfg_file) && \
802	rm -f rootfs && \
803	cp kernel_rootfs_image.chk $(FW_NAME)_`date +%m%d%H%M`.chk
804
805#ifeq ($(BOARDID_FILE), compatible_WNR3500v2.txt)
806#	cd $(PLATFORMDIR) && touch rootfs && \
807#	../../../tools/packet -k linux.trx -f rootfs -b compatible_WNR3500v2VCNA.txt \
808#	-ok kernel_image -oall kernel_rootfs_image -or rootfs_image \
809#	-i $(fw_cfg_file) && \
810#	rm -f rootfs && \
811#	cp kernel_rootfs_image.chk WNR3500v2vcna_`date +%m%d%H%M`.chk   
812#endif
813
814#
815# Configuration rules
816#
817
818conf mconf:
819	$(MAKE) -C config
820	@./config/$@ ./config/Config
821        # Also configure kernel
822	$(MAKE) k$@
823
824oldconf: .config
825	$(MAKE) -C config
826	@./config/conf -o ./config/Config
827        # Also configure kernel
828	$(MAKE) k$@
829
830kconf:
831	$(MAKE) -C $(LINUXDIR) config
832
833kmconf: $(LINUXDIR)/.config 
834	$(MAKE) -C $(LINUXDIR) menuconfig
835
836koldconf: $(LINUXDIR)/.config
837	$(MAKE) -C $(LINUXDIR) oldconfig
838
839# Convenience
840config: conf
841
842menuconfig: mconf
843
844oldconfig: oldconf
845
846# Default configurations
847ifneq ("$(LINUX_VERSION)","2_6")
848.config:
849	cp config/defconfig $@
850	$(MAKE) oldconfig
851else
852.config:
853	cp config/defconfig-2.6 $@
854	$(MAKE) oldconfig
855endif
856
857ifneq ("$(CONFIG_USBAP)","y")
858ifneq ("$(LINUX_VERSION)","2_6")
859$(LINUXDIR)/.config:
860	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx $@
861else
862$(LINUXDIR)/.config:
863	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx-$(if $(CPU),$(CPU)-,)slimrtr $@
864endif
865else
866ifneq ("LINUX_VERSION","2_6")
867$(LINUXDIR)/.config:
868	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx-usbap $@
869else
870$(LINUXDIR)/.config:
871	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx-slimrtr-usbap $@
872endif
873endif
874
875# Overwrite Kernel .config
876check_kernel_config: $(LINUXDIR)/.config
877	cp $(LINUXDIR)/.config $(LINUXDIR)/.config.tmp
878ifeq ($(CONFIG_SQUASHFS), y)
879	if ! grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
880		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
881		sed -e "s/CONFIG_CRAMFS=y/# CONFIG_CRAMFS is not set/g" $(LINUXDIR)/.config.chk | \
882		sed -e "s/# CONFIG_SQUASHFS is not set/CONFIG_SQUASHFS=y/g" > \
883		$(LINUXDIR)/.config ; \
884		rm -f $(LINUXDIR)/.config.chk ; \
885	fi
886endif
887ifeq ($(CONFIG_CRAMFS), y)
888	if ! grep -q "CONFIG_CRAMFS=y" $(LINUXDIR)/.config ; then \
889		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
890		sed -e "s/CONFIG_SQUASHFS=y/# CONFIG_SQUASHFS is not set/g" $(LINUXDIR)/.config.chk | \
891		sed -e "s/# CONFIG_CRAMFS is not set/CONFIG_CRAMFS=y/g" > \
892		$(LINUXDIR)/.config ; \
893		rm -f $(LINUXDIR)/.config.chk ; \
894	fi
895endif
896ifeq ($(CONFIG_SHRINK_MEMORY), y)
897	if ! grep -q "CONFIG_SHRINKMEM=y" $(LINUXDIR)/.config ; then \
898		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
899		sed -e "s/# CONFIG_SHRINKMEM is not set/CONFIG_SHRINKMEM=y/g" $(LINUXDIR)/.config.chk > \
900		$(LINUXDIR)/.config ; \
901		rm -f $(LINUXDIR)/.config.chk ; \
902	fi
903else
904	if grep -q "CONFIG_SHRINKMEM=y" $(LINUXDIR)/.config ; then \
905		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
906		sed -e "s/CONFIG_SHRINKMEM=y/# CONFIG_SHRINKMEM is not set/g" $(LINUXDIR)/.config.chk > \
907		$(LINUXDIR)/.config ; \
908		rm -f $(LINUXDIR)/.config.chk ; \
909	fi
910endif
911	# Make kernel config again if changed
912	if ! cmp $(LINUXDIR)/.config $(LINUXDIR)/.config.tmp ; then \
913		$(MAKE) -C $(LINUXDIR) oldconfig ; \
914	fi
915
916#
917# Overrides
918#
919
920ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
921busybox-1.x/Config.h: dummy
922	cd busybox-1.x && rm -f Config.h && ln -sf include/autoconf.h Config.h && touch Config.h
923ifeq ($(PROFILE),WNDR4500REV)
924	cd busybox-1.x && cp configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG)_$(PROFILE) .config && make clean
925else
926ifeq ($(PROFILE),WNDR4500v2)
927	cd busybox-1.x && cp configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG)_$(PROFILE) .config && make clean	
928else
929	cd busybox-1.x && cp configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG) .config && make clean
930endif
931endif
932
933busybox: busybox-1.x/Config.h
934	$(MAKE) -C busybox-1.x ARCH=mips INSTALL
935
936busybox-install:
937	$(MAKE) -C busybox-1.x ARCH=mips CONFIG_PREFIX=$(INSTALLDIR)/busybox install
938
939
940rc: netconf nvram shared
941	make LINUXDIR=$(LINUXDIR)  -C rc
942ifneq ($(CONFIG_BUSYBOX),)
943rc: busybox-1.x/Config.h
944endif
945else #linux-2.6
946CURBBCFG=$(CONFIG_BUSYBOX_CONFIG).h
947OLDBBCFG=$(shell basename $$(readlink busybox/Config.h) 2> /dev/null)
948busybox/Config.h: dummy
949ifneq ($(OLDBBCFG),$(CURBBCFG))
950	cd busybox && rm -f Config.h && ln -sf configs/$(CURBBCFG) Config.h && touch Config.h
951endif
952
953busybox: busybox/Config.h
954	$(MAKE) -C busybox STRIPTOOL=$(STRIP)
955
956busybox-install:
957	$(MAKE) -C busybox STRIPTOOL=$(STRIP) PREFIX=$(INSTALLDIR)/busybox install
958
959# rc: netconf nvram shared
960rc: nvram shared
961ifneq ($(CONFIG_BUSYBOX),)
962rc: busybox/Config.h
963endif
964endif #linux-2.6
965
966rc-install:
967	make LINUXDIR=$(LINUXDIR) INSTALLDIR=$(INSTALLDIR)/rc -C rc install
968
969lib-install:
970	make LX_VERS=$(LINUX_VERSION) INSTALLDIR=$(INSTALLDIR)/lib -C lib install
971
972www www-%:
973	$(MAKE) -C www/$(CONFIG_VENDOR) $* INSTALLDIR=$(INSTALLDIR)/www
974
975
976
977
978
979# To re-build bcmdl target, uncomment and exchange libusb and  bcmdl targets
980# libusb :
981#	cd $(SRCBASE)/usbdev/libusb; ./configure  --host=mipsel-linux CC=mipsel-uclibc-gcc; make
982
983
984# bcmdl :
985#	make TARGETENV=linuxmips -C $(SRCBASE)/usbdev/usbdl
986
987# bcmdl-install :
988#	install -d $(TARGETDIR)/bin
989#	install -D $(SRCBASE)/usbdev/usbdl/bcmdl $(TARGETDIR)/bin/bcmdl
990
991libusb :
992
993bcmdl :
994
995bcmdl-install :	
996	install -d $(INSTALLDIR)/dongle/sbin
997	install -D $(SRCBASE)/usbdev/usbdl/mips_$(LINUX_VERSION)/bcmdl $(INSTALLDIR)/dongle/sbin/bcmdl
998
999bridge:
1000ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
1001	$(MAKE) -C bridge-1.x
1002else
1003	$(MAKE) -C bridge brctl/brctl
1004endif
1005
1006dongle :
1007
1008bridge-install:
1009ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
1010	install -D bridge-1.x/brctl/brctl $(INSTALLDIR)/bridge/usr/sbin/brctl
1011else
1012	install -D bridge/brctl/brctl $(INSTALLDIR)/bridge/usr/sbin/brctl
1013endif
1014	$(STRIP) $(INSTALLDIR)/bridge/usr/sbin/brctl
1015
1016dnsmasq-install:
1017	install -D dnsmasq/dnsmasq $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
1018	$(STRIP) $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
1019
1020ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
1021iptables:
1022	$(MAKE) -C iptables-1.x BINDIR=/usr/sbin LIBDIR=/usr/lib KERNEL_DIR=$(LINUXDIR)
1023
1024iptables-install:
1025ifeq ($(CONFIG_IPTABLES),y)
1026	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
1027	install iptables-1.x/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
1028	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
1029	install -D iptables-1.x/iptables $(INSTALLDIR)/iptables/usr/sbin/iptables
1030	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables
1031else
1032        # So that generic rule does not take precedence
1033	@true
1034endif
1035iptables-clean:
1036	-$(MAKE) -C iptables-1.x KERNEL_DIR=$(LINUXDIR) clean
1037else # linux-2.6
1038iptables:
1039	$(MAKE) -C iptables BINDIR=/usr/sbin LIBDIR=/usr/lib KERNEL_DIR=$(LINUXDIR)
1040
1041iptables-install:
1042ifeq ($(CONFIG_IPTABLES),y)
1043	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
1044	install iptables/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
1045	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
1046	install -D iptables/iptables $(INSTALLDIR)/iptables/usr/sbin/iptables
1047	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables
1048else
1049        # So that generic rule does not take precedence
1050	@true
1051endif
1052iptables-clean:
1053	-$(MAKE) -C iptables KERNEL_DIR=$(LINUXDIR) clean
1054endif # linux-2.6
1055
1056
1057netconf: iptables
1058ifeq ($(CONFIG_NETCONF),y)
1059	make LINUXDIR=$(LINUXDIR) -C netconf
1060else
1061	# In case of "Prerequisite 'iptables' is newer than target 'netconf'"
1062	@true
1063endif
1064
1065ntpclient-install:
1066	install -D ntpclient/ntpclient $(INSTALLDIR)/ntpclient/usr/sbin/ntpclient
1067	$(STRIP) $(INSTALLDIR)/ntpclient/usr/sbin/ntpclient
1068
1069ppp ppp-%:
1070	$(MAKE) -C ppp/pppoecd $* INSTALLDIR=$(INSTALLDIR)/ppp
1071
1072udhcpd-install:
1073	install -D udhcpd/udhcpd $(INSTALLDIR)/udhcpd/usr/sbin/udhcpd
1074	$(STRIP) $(INSTALLDIR)/udhcpd/usr/sbin/udhcpd
1075	cd $(INSTALLDIR)/udhcpd/usr/sbin && ln -sf udhcpd udhcpc
1076
1077upnp: netconf nvram shared
1078
1079bcmupnp: netconf nvram shared
1080	[ ! -f bcmupnp/Makefile ] || $(MAKE) -C bcmupnp
1081
1082bcmupnp-install:
1083	[ ! -f bcmupnp/Makefile ] || $(MAKE) -C bcmupnp install INSTALLDIR=$(INSTALLDIR)/bcmupnp
1084
1085bcmupnp-clean:
1086	[ ! -f bcmupnp/Makefile ] || $(MAKE) -C bcmupnp clean
1087
1088wlconf: nvram shared
1089
1090vlan:
1091	$(MAKE) -C vlan CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
1092
1093vlan-install:
1094	$(MAKE) -C vlan CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR) install
1095
1096vlan-clean:
1097	$(MAKE) -C vlan clean
1098
1099
1100
1101
1102emf:
1103	+$(MAKE) -C emf/emfconf CROSS=$(CROSS_COMPILE)
1104
1105emf-install:
1106ifeq ($(CONFIG_EMF),y)
1107	install -d $(TARGETDIR)
1108	+$(MAKE) install -C emf/emfconf \
1109	    CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR)
1110
1111endif
1112
1113emf-clean:
1114	#$(MAKE) -C emf/emfconf clean
1115
1116igs:
1117	+$(MAKE) -C emf/igsconf CROSS=$(CROSS_COMPILE)
1118
1119igs-install:
1120ifeq ($(CONFIG_EMF),y)
1121	install -d $(TARGETDIR)
1122	+$(MAKE) -C emf/igsconf CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
1123
1124endif
1125
1126igs-clean:
1127	#$(MAKE) -C emf/igsconf clean
1128
1129igmp:
1130	$(MAKE) -C igmp CROSS=$(CROSS_COMPILE)
1131
1132igmp-install:
1133ifeq ($(CONFIG_IGMP_PROXY),y)
1134#	install -d $(TARGETDIR)
1135	+$(MAKE) -C igmp CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
1136endif
1137
1138igmp-clean:
1139	$(MAKE) -C igmp clean
1140
1141wps: nvram shared
1142ifeq ($(PROFILE),WNDR4500REV)
1143	[ ! -f wps/Makefile ] || $(MAKE) -C wps
1144else
1145ifeq ($(PROFILE),WNDR4500v2)
1146	[ ! -f wps/Makefile ] || $(MAKE) -C wps	
1147else
1148	# Prevent to use generic rules"
1149	@true
1150endif
1151endif
1152
1153wps-install:
1154ifeq ($(PROFILE),WNDR4500REV)
1155	[ ! -f wps/Makefile ] || $(MAKE) -C wps install INSTALLDIR=$(INSTALLDIR)/wps
1156else
1157ifeq ($(PROFILE),WNDR4500v2)
1158	[ ! -f wps/Makefile ] || $(MAKE) -C wps install INSTALLDIR=$(INSTALLDIR)/wps	
1159else
1160	# Prevent to use generic rules"
1161	@true
1162endif
1163endif
1164wps-clean:
1165ifeq ($(PROFILE),WNDR4500REV)
1166	[ ! -f wps/Makefile ] || $(MAKE) -C wps clean
1167else
1168ifeq ($(PROFILE),WNDR4500v2)
1169	[ ! -f wps/Makefile ] || $(MAKE) -C wps clean	
1170else
1171	# Prevent to use generic rules"
1172	@true
1173endif
1174endif
1175# Foxconn Add, Jasmine Yang, 03/23/2006
1176acos_link:
1177ifneq ($(PROFILE),)
1178	cp ../../ap/gpl/minidlna/minidlna.07.26/config_$(PROFILE).h ../../ap/gpl/minidlna/minidlna.07.26/config.h 
1179	cd ../../project/acos/include; rm -f ambitCfg.h; ln -s ambitCfg_$(FW_TYPE)_$(PROFILE).h ambitCfg.h
1180else
1181	cd ../../project/acos/include; rm -f ambitCfg.h; ln -s ambitCfg_$(FW_TYPE).h ambitCfg.h
1182endif
1183
1184ifneq ($(PROFILE),)
1185ifneq ($(PROFILE), WNR3500v2VCNA)
1186#	cp ../../project/acos/config_$(PROFILE).in ../../project/acos/config.in
1187#	cp ../../project/acos/config_$(PROFILE).mk ../../project/acos/config.mk
1188#	cp ../../project/acos/Makefile_$(PROFILE) ../../project/acos/Makefile
1189	cp $(LINUXDIR)/.config_$(PROFILE) $(LINUXDIR)/.config
1190#	cp $(LINUXDIR)/autoconf.h_$(PROFILE) $(LINUXDIR)/include/linux/autoconf.h
1191endif
1192else
1193#	cp ../../project/acos/config_WNR3500v2.in ../../project/acos/config.in
1194#	cp ../../project/acos/config_WNR3500v2.mk ../../project/acos/config.mk
1195#	cp ../../project/acos/Makefile_WNR3500v2 ../../project/acos/Makefile
1196#	cp $(LINUXDIR)/.config_WNR3500v2 $(LINUXDIR)/.config
1197#	cp $(LINUXDIR)/autoconf.h_WNR3500v2 $(LINUXDIR)/include/linux/autoconf.h
1198endif
1199
1200
1201acos:
1202
1203acos-install:
1204
1205acos-clean:
1206
1207gpl:
1208	$(MAKE) -C ../../ap/gpl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
1209
1210gpl-install:
1211	$(MAKE) -C ../../ap/gpl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR) install
1212
1213gpl-clean:
1214	$(MAKE) -C ../../ap/gpl clean
1215
1216#Leon Lv Add below for UBD,Apr 15,2008
1217.PHONY:ubd opendns
1218ubd:
1219	$(MAKE) -C ubd CROSS=$(CROSS_COMPILE)
1220
1221ubd-install:
1222ifeq ($(CONFIG_UBD),y)
1223	install -d $(TARGETDIR)
1224#	$(MAKE) -C ubd CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
1225	install -D ubd/ubd $(INSTALLDIR)/ubdu/usr/sbin/ubd
1226	$(STRIP) $(INSTALLDIR)/ubdu/usr/sbin/ubd
1227endif
1228
1229ubd-clean:
1230	$(MAKE) -C ubd clean
1231
1232opendns:
1233	$(MAKE) -C ../../ap/acos/opendns
1234
1235opendns-install:
1236	$(MAKE) -C ../../ap/acos/opendns install
1237
1238opendns-clean:
1239	$(MAKE) -C ../../ap/acos/opendns clean
1240
1241
1242netflix_tc:
1243
1244
1245acos_nat:
1246
1247acos_nat-install:
1248
1249acos_nat-clean:
1250
1251ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
1252udev:
1253	$(MAKE) -C udev CROSS_COMPILE=$(CROSS_COMPILE)
1254
1255udev-install:
1256	install -d $(TARGETDIR)
1257	$(MAKE) -C udev CROSS_COMPILE=$(CROSS_COMPILE) DESTDIR=$(INSTALLDIR) prefix=/udev install-udevtrigger
1258
1259udev-clean:
1260	$(MAKE) -C udev clean
1261
1262hotplug2:
1263	$(MAKE) -C hotplug2 CROSS_COMPILE=$(CROSS_COMPILE)
1264
1265hotplug2-install:
1266	install -d $(TARGETDIR)
1267	install -d $(INSTALLDIR)/hotplug2
1268	$(MAKE) -C hotplug2 CROSS_COMPILE=$(CROSS_COMPILE) PREFIX=$(INSTALLDIR) install
1269
1270hotplug2-clean:
1271	$(MAKE) -C hotplug2 clean
1272endif
1273
1274openssl:
1275	$(MAKE) -C ../../ap/gpl/openssl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
1276
1277openssl-install:
1278	$(MAKE) -C ../../ap/gpl/openssl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR) install
1279
1280openssl-clean:
1281	$(MAKE) -C ../../ap/gpl/openssl clean
1282
1283
1284
1285ifeq ($(LINUX_VERSION),2_4)
1286UCLIBC_IPV6=../lib/mipsel-uclibc/libc.so.0
1287endif
1288
1289radvd: flex dummy
1290	[ ! -d $@ ] || [ -f $@/Makefile ] || ( cd $@ && CC=$(CC) ./configure --host=mipsel-linux && cd .. )
1291	[ ! -d $@ ] || $(MAKE) -C radvd CC=$(CC) radvd_LDADD="-L../flex -lfl"
1292
1293radvd-install:
1294	[ ! -d radvd ] || install -D -m 755 radvd/radvd $(INSTALLDIR)/radvd/usr/sbin/radvd
1295	[ ! -d radvd ] || $(STRIP) $(INSTALLDIR)/radvd/usr/sbin/radvd
1296
1297radvd-clean:
1298	[ ! -f radvd/Makefile ] || $(MAKE) -C radvd distclean
1299
1300flex: dummy
1301	[ ! -d $@ ] || [ -f $@/Makefile ] || ( cd $@ && CC=$(CC) ./configure --host=mipsel-linux && cd .. )
1302	[ ! -d $@ ] || $(MAKE) -C flex CC=$(CC) RANLIB=$(RANLIB)
1303
1304iproute2:
1305	[ ! -d $@ ] || $(MAKE) -C iproute2 KERNEL_INCLUDE=$(LINUXDIR)/include CC=$(CC) AR=$(AR) LDLIBS=
1306
1307iproute2-install:
1308	[ ! -d iproute2 ] || install -D -m 755 iproute2/ip/ip $(INSTALLDIR)/iproute2/usr/sbin/ip
1309	[ ! -d iproute2 ] || $(STRIP) $(INSTALLDIR)/iproute2/usr/sbin/ip
1310
1311iputils:
1312	[ ! -d $@ ] || [ -f $@/include-glibc/bits/socket.h ] || ( cd $@/include-glibc/bits && ln -s ../socketbits.h socket.h && cd ../../.. )
1313	[ ! -d $@ ] || $(MAKE) -C iputils KERNEL_INCLUDE=$(LINUXDIR)/include CC=$(CC) LDLIBS=
1314
1315iputils-install:
1316	[ ! -d iputils ] || install -D -m 755 iputils/ping6 $(INSTALLDIR)/iputils/usr/sbin/ping6
1317	[ ! -d iputils ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/ping6
1318	[ ! -d iputils ] || install -D -m 755 iputils/traceroute6 $(INSTALLDIR)/iputils/usr/sbin/traceroute6
1319	[ ! -d iputils ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/traceroute6
1320	[ ! -d iputils ] || install -D -m 755 iputils/tracepath6 $(INSTALLDIR)/iputils/usr/sbin/tracepath6
1321	[ ! -d iputils ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/tracepath6
1322
1323dhcp6s dhcp6c: dummy
1324	[ ! -d dhcp6 ] || [ -f dhcp6/Makefile ] || ( cd dhcp6 && ./configure CC=gcc CFLAGS+="-I../shared" && cd .. )
1325ifeq ($(CONFIG_UCLIBC),y)
1326#	[ ! -d dhcp6 ] || $(MAKE) -C dhcp6 CC=$(CC) LIBS="$(UCLIBC_IPV6)" $@
1327	[ ! -d dhcp6 ] || $(MAKE) -C dhcp6 CC=$(CC) LIBS="-L lib" $@
1328else
1329	[ ! -d dhcp6 ] || $(MAKE) -C dhcp6 CC=$(CC) LIBS="-lresolv -L../libbcmcrypto -lbcmcrypto -L$(INSTALLDIR)/libbcmcrypto/usr/lib" $@
1330endif
1331
1332dhcp6s-install:
1333	[ ! -d dhcp6 ] || install -D -m 755 dhcp6/dhcp6s $(INSTALLDIR)/dhcp6s/usr/sbin/dhcp6s
1334	[ ! -d dhcp6 ] || $(STRIP) $(INSTALLDIR)/dhcp6s/usr/sbin/dhcp6s
1335
1336dhcp6c-install:
1337	[ ! -d dhcp6 ] || install -D -m 755 dhcp6/dhcp6c $(INSTALLDIR)/dhcp6c/usr/sbin/dhcp6c
1338	[ ! -d dhcp6 ] || $(STRIP) $(INSTALLDIR)/dhcp6c/usr/sbin/dhcp6c
1339
1340dhcp6s-clean dhcp6c-clean:
1341	[ ! -f dhcp6/Makefile ] || $(MAKE) -C dhcp6 distclean
1342
1343swresetd-install:
1344swresetd-clean:
1345
1346acl_log-install:
1347acl_log-clean:
1348
1349gpio-install:
1350gpio-clean:
1351#
1352# Generic rules
1353#
1354
1355%:
1356	[ ! -d $* ] || $(MAKE) -C $*
1357
1358%-clean:
1359	[ ! -d $* ] || $(MAKE) -C $* clean
1360
1361%-install:
1362	[ ! -d $* ] || $(MAKE) -C $* install INSTALLDIR=$(INSTALLDIR)/$*
1363
1364$(obj-y) $(obj-n) $(obj-clean) $(obj-install): dummy
1365
1366.PHONY: all clean distclean mrproper install package
1367.PHONY: conf mconf oldconf kconf kmconf config menuconfig oldconfig
1368.PHONY: dummy
1369