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
23export PROFILE = WNDR4500REV
24export FW_TYPE = WW
25
26BOARDID_FILE=compatible_WNDR4500rev.txt
27FW_NAME=WNDR4500REV
28
29
30#
31# Paths
32#
33
34
35CPU ?=
36LINUX_VERSION = 2_6
37
38# Source bases
39export PLATFORM LIBDIR USRLIBDIR LINUX_VERSION
40export TOP := $(shell pwd)
41export SRCBASE := $(shell (cd $(TOP)/.. && pwd -P))
42
43ifeq ($(LINUX_VERSION),2_6)
44export 	LINUXDIR := $(SRCBASE)/linux/linux-2.6
45export 	KBUILD_VERBOSE := 1
46export PATH := /projects/hnd/tools/linux/hndtools-mipsel-linux-uclibc-4.2.3/bin:$(PATH)
47else
48export 	LINUXDIR := $(SRCBASE)/linux/linux
49endif
50
51
52#
53# Cross-compile environment variables
54#
55
56# Build platform
57export BUILD := i386-pc-linux-gnu
58export HOSTCC := gcc
59
60# uClibc wrapper
61ifeq ($(CONFIG_UCLIBC),y)
62export PLATFORM := $(PLATFORM)-uclibc
63endif
64
65ifeq ($(PLATFORM),mipsel)
66export CROSS_COMPILE := mipsel-linux-
67export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
68export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
69endif
70
71ifeq ($(PLATFORM),mipsel-uclibc)
72ifeq ($(LINUX_VERSION),2_6)
73export CROSS_COMPILE := mipsel-uclibc-linux26-
74else
75export CROSS_COMPILE := mipsel-uclibc-
76endif
77export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
78export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
79endif
80
81CFLAGS = -Os
82
83ifeq ($(CONFIG_RTR_OPTIMIZE_SIZE),y)
84export CFLAGS += -Os
85export OPTCFLAGS = -Os
86else
87export CFLAGS += -O2
88export OPTCFLAGS = -O2
89endif
90
91#look at driver configuration
92WLCFGDIR=$(SRCBASE)/wl/config
93
94ifeq ($(CONFIG_BCMWPA2),y)
95export CFLAGS += -DBCMWPA2
96endif
97export CFLAGS += -DRESTART_ALL_PROCESSES
98#export CFLAGS += -DRESTART_ALL_PROCESSES_DEBUG
99
100ifeq ("$(CONFIG_USBAP)","y")
101export CFLAGS += -D__CONFIG_USBAP__
102endif
103
104ifeq ($(CONFIG_BCMQOS),y)
105export CFLAGS += -DBCMQOS
106endif
107ifeq ($(CONFIG_WSCCMD),y)
108export CONFIG_WSCCMD
109export CFLAGS += -DBCMWPS
110# WFA WPS 2.0 Testbed extra caps
111#export CFLAGS += -DWFA_WPS_20_TESTBED
112endif
113
114ifeq ($(CONFIG_EMF),y)
115export CFLAGS += -D__CONFIG_EMF__
116endif
117
118ifeq ($(CONFIG_IGMP_PROXY),y)
119export CFLAGS += -D__CONFIG_IGMP_PROXY__
120endif
121
122ifeq ($(CONFIG_WL_ACI),y)
123export CFLAGS += -D__CONFIG_WL_ACI__
124endif
125
126ifeq ($(CONFIG_MEDIA_IPTV),y)
127export CFLAGS += -D__CONFIG_MEDIA_IPTV__
128endif
129
130ifeq ($(CONFIG_SOUND),y)
131export CFLAGS += -D__CONFIG_SOUND__
132endif
133
134ifeq ($(CONFIG_VOIP),y)
135export CFLAGS += -DBCMVOIP
136endif
137
138ifeq ($(CONFIG_SQUASHFS), y)
139ROOT_IMG :=target.squashfs
140else
141ROOT_IMG := target.cramfs
142endif
143
144ifeq ($(CONFIG_WAPI),y)
145export CFLAGS += -DBCMWAPI_WAI -DBCMWAPI_WPI
146endif
147
148ifeq ($(CONFIG_PHYMON_UTILITY),y)
149export CFLAGS += -DPHYMON
150endif
151
152ifeq ($(CONFIG_OPENSSL),y)
153export CFLAGS += -DSUPPORT_REMOTE_HTTPS
154endif
155
156ifeq ($(CONFIG_QOS_AUTO_CHECK_BW),y)
157export CFLAGS += -DQOS_AUTO_CHECK_BANDWIDTH
158endif
159
160ifeq ($(CONFIG_WPS_V20),y)
161export CFLAGS += -DINCLUDE_WPS_V20
162endif
163
164ifeq ($(CONFIG_5G_AUTO_CHANNEL),y)
165export CFLAGS += -DINCLUDE_5G_AUTO_CHANNEL
166endif
167
168ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
169CRAMFSDIR := cramfs
170else
171CRAMFSDIR := $(LINUXDIR)/scripts/cramfs
172endif
173
174ifeq ($(CONFIG_OPENDNS),y)
175export CFLAGS += -DOPENDNS_PARENTAL_CONTROL
176endif
177
178export CFLAGS += -DU12H189 -DWNDR4500REV
179export CFLAGS += -DMULTIPLE_SSID
180export CFLAGS += -DENABLE_ML
181#export CFLAGS += -DWIFI_DISABLE
182export CFLAGS += -DBCM53125
183export CFLAGS +=  -DCONFIG_RUSSIA_IPTV
184
185ifeq ($(CONFIG_DLNA),y)
186export CFLAGS += -DDLNA
187#export CFLAGS += -DDLNA_DEBUG
188endif
189export CFLAGS += -DHTTP_ACCESS_USB
190#export CFLAGS += -DMAX_USB_ACCESS
191export CFLAGS += -DSAMBA_ENABLE
192export CFLAGS += -DUSB_NEW_SPEC
193export CFLAGS += -DINCLUDE_WIFI_BUTTON
194export CONFIG_LIBNSL=y
195export CFLAGS += -DINCLUDE_USB_LED
196export CFLAGS += -DINCLUDE_DUAL_BAND
197export CFLAGS += -DSINGLE_FIRMWARE
198export CFLAGS += -DINCLUDE_GET_ST_CHKSUM
199export CFLAGS += -DUNIFIED_STR_TBL
200export CFLAGS += -DFIRST_MTD_ROTATION
201export CFLAGS += -DWIFI_ON_OFF_SCHE
202export CFLAGS += -DAUTO_CONN_24HR
203export CFLAGS += -DIGMP_PROXY
204export CFLAGS += -DAP_MODE
205export CFLAGS += -D__CONFIG_IGMP_SNOOPING__
206ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
207export CFLAGS += -DLINUX26
208export CFLAGS += -DINCLUDE_IPV6
209endif
210export CFLAGS += -DPRESET_WL_SECURITY
211export CFLAGS += -DNEW_BCM_WPS_IPC
212
213ifeq ($(FW_TYPE),NA)
214export CFLAGS += -DFW_VERSION_NA
215endif
216
217ifeq ($(CONFIG_MFP),y)
218export CFLAGS += -DMFP
219endif
220
221ifeq ($(CONFIG_SIGMA),y)
222export CFLAGS += -D__CONFIG_SIGMA__
223endif
224
225
226export CC := $(CROSS_COMPILE)gcc
227export AR := $(CROSS_COMPILE)ar
228export AS := $(CROSS_COMPILE)as
229export LD := $(CROSS_COMPILE)ld
230export NM := $(CROSS_COMPILE)nm
231export RANLIB := $(CROSS_COMPILE)ranlib
232export STRIP := $(CROSS_COMPILE)strip
233export SIZE := $(CROSS_COMPILE)size
234export OBJCOPY := $(CROSS_COMPILE)objcopy
235
236#
237# Install and target directories
238#
239
240export PLATFORMDIR := $(TOP)/$(PLATFORM)
241export INSTALLDIR := $(PLATFORMDIR)/install
242export TARGETDIR := $(PLATFORMDIR)/target
243
244define STRIP_DEBUG_SYMBOLS
245	@dbgsymf=$(basename $(1))_dbgsym$(suffix $(1)); \
246	if [ "$(1)" -nt "$${dbgsymf}" ]; then \
247	   echo "#- $0"; \
248	   ls -ln $1 | awk '{printf "Orig  size: %10d bytes, %s\n",$$5,$$NF}'; \
249	   cp -p -v $1 $$dbgsymf; $(STRIP) -d $(1); touch $$dbgsymf; \
250	   ls -ln $1 | awk '{printf "Strip size: %10d bytes, %s\n",$$5,$$NF}'; \
251	fi
252endef
253
254
255
256# USB AP support
257# note : the dongle target is only for after pre-build 
258obj-$(CONFIG_USBAP) += bmac dongle
259
260# always build libbcmcrypto
261obj-y += libbcmcrypto
262
263#
264# Configuration
265#
266
267#ifdef BCMSOUND
268obj-$(CONFIG_SIGMA) += sigma
269obj-$(CONFIG_SALSA) += salsa
270obj-$(CONFIG_LIBZ) += libz
271obj-$(CONFIG_LIBID3TAG) += libid3tag
272obj-$(CONFIG_LIBMAD) += libmad
273obj-$(CONFIG_MADPLAY) += madplay
274obj-$(CONFIG_APLAY) += alsa-utils/aplay
275#endif
276obj-$(CONFIG_NVRAM) += nvram
277obj-$(CONFIG_SHARED) += shared
278obj-$(CONFIG_LIBBCM) += libbcm
279
280obj-$(CONFIG_OPENSSL) += openssl
281
282ifeq ($(CONFIG_ACOS_MODULES),y)
283#obj-y += ../../ap/acos
284obj-y += ../../ap/gpl
285fw_cfg_file := ../../../project/acos/include/ambitCfg.h
286else
287obj-$(CONFIG_HTTPD) += httpd
288obj-$(CONFIG_WWW) += www
289endif
290
291obj-$(CONFIG_RC) += rc
292obj-$(CONFIG_GLIBC) += lib
293obj-$(CONFIG_UCLIBC) += lib
294obj-$(CONFIG_WLCONF) += wlconf
295obj-$(CONFIG_BRIDGE) += bridge
296obj-$(CONFIG_BUSYBOX) += busybox
297obj-$(CONFIG_DNSMASQ) += dnsmasq
298obj-$(CONFIG_IPTABLES) += iptables
299obj-$(CONFIG_LIBIPT) += iptables
300obj-$(CONFIG_NAS) += nas
301obj-$(CONFIG_WAPI) += wapi/wapid
302obj-$(CONFIG_WAPI_IAS) += wapi/as
303obj-$(CONFIG_SES) += ses/ses
304obj-$(CONFIG_SES_CL) += ses/ses_cl
305obj-$(CONFIG_EZC) += ezc
306#obj-$(CONFIG_NETCONF) += netconf
307obj-$(CONFIG_NTP) += ntpclient
308obj-$(CONFIG_PPP) += ppp
309obj-$(CONFIG_UDHCPD) += udhcpd
310obj-$(CONFIG_UPNP) += upnp
311obj-$(CONFIG_LIBUPNP) += libupnp
312obj-$(CONFIG_FFMPEG) += ffmpeg
313obj-$(CONFIG_DLNA_DMR) += dlna/dmr
314obj-$(CONFIG_DLNA_DMS) += dlna/dms
315obj-$(CONFIG_SAMBA) += samba
316obj-$(CONFIG_UTILS) += utils
317obj-$(CONFIG_ETC) += etc
318obj-$(CONFIG_VLAN) += vlan
319obj-y += wps
320obj-$(CONFIG_WSCCMD) += netconf
321obj-$(CONFIG_WSCCMD) += iptables
322#obj-$(CONFIG_WSCCMD) += bcmupnp
323obj-$(CONFIG_EMF) += emf
324obj-$(CONFIG_EMF) += igs
325obj-$(CONFIG_IGMP_PROXY) += igmp
326obj-$(CONFIG_WL_ACI) += aci
327ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
328obj-y += udev
329obj-y += hotplug2
330endif
331obj-$(CONFIG_LLD2D) += lltd/wrt54g-linux
332obj-$(CONFIG_ACL_LOGD) += acl_log
333obj-$(CONFIG_GPIO) += gpio
334obj-$(CONFIG_SWRESETD) += swresetd
335#if defined(PHYMON)
336obj-$(CONFIG_PHYMON_UTILITY) += phymon
337#endif
338#if defined(EXT_ACS)
339obj-$(CONFIG_EXTACS) += acsd
340#endif
341
342obj-$(CONFIG_RADVD) += radvd
343obj-$(CONFIG_IPROUTE2) += iproute2
344obj-$(CONFIG_IPUTILS) += iputils
345obj-$(CONFIG_DHCPV6S) += dhcp6s
346obj-$(CONFIG_DHCPV6C) += dhcp6c
347
348# Gigle apps
349obj-$(CONFIG_PLC) += gigled libgigle gigle_util
350ifeq ($(CONFIG_PLC),y)
351CFLAGS	+= -DPLC
352endif
353
354# always build eap dispatcher
355obj-y += eapd/linux
356
357ifeq ($(CONFIG_VOIP),y)
358obj-y += voipd
359endif
360
361obj-clean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-clean)
362obj-install := $(foreach obj,$(obj-y),$(obj)-install)
363
364ifneq ($(WLTEST),1)
365ifneq ($(shell grep "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config),)
366export WLTEST := 1
367endif
368endif
369
370#
371# Basic rules
372#
373
374
375all: acos_link version $(LINUXDIR)/.config $(obj-y)
376        # Also build kernel
377ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
378	$(MAKE) -C $(LINUXDIR) zImage
379	$(MAKE) CONFIG_SQUASHFS=$(CONFIG_SQUASHFS) -C $(SRCBASE)/router/compressed
380else
381	if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
382	    $(MAKE) -C $(LINUXDIR) zImage ; \
383	fi
384endif
385	if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
386	    $(MAKE) -C $(LINUXDIR) modules ; \
387	fi
388	# Preserve the debug versions of these and strip for release
389	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/vmlinux)
390ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
391	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl.ko)
392ifeq ("$(CONFIG_USBAP)","y")
393	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl_high.ko)
394#$(STRIP) $(LINUXDIR)/drivers/net/wl/wl_high.ko
395endif
396	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/et/et.ko)
397	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ctf/ctf.ko)
398	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/bcm57xx/bcm57xx.ko)
399	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/emf/emf.ko)
400	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/igs/igs.ko)
401else
402	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl.o)
403ifeq ("$(CONFIG_USBAP)","y")
404	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl_high/wl_high.o)
405endif
406	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/et/et.o)
407	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ctf/ctf.o)
408	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/bcm57xx/bcm57xx.o)
409	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/emf/emf.o)
410	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/igs/igs.o)
411	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ubd/ubd.o)
412endif
413
414
415# well, we should always be able to use the BOM, but right now, the last build step on
416# the build machine doesn't have it, so we don't rerun this is the file already 
417# exists
418
419version:  $(SRCBASE)/router/shared/router_version.h
420
421# this could fail if the bom doesn't exist. We don't care as long as there is a valid router_version.h
422# if not, the build will fail anyway.
423$(SRCBASE)/router/shared/router_version.h: $(SRCBASE)/router/shared/version.h.in
424	[ ! -e $(SRCBASE)/tools/release/linux-router-bom.mk  ] ||  make SRCBASE=$(SRCBASE) -f $(SRCBASE)/tools/release/linux-router-bom.mk version
425
426
427
428router-clean: $(obj-clean) config-clean
429	rm -rf $(TARGETDIR)
430	#rm -f $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/target.cramfs
431	rm -f $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/target.squashfs
432	rm -rf $(INSTALLDIR)/busybox
433
434clean: router-clean
435	@echo cleaning LINUXDIR = $(LINUXDIR)
436ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
437	# we need to pass some conf file for cleaning 2.6. The kbuild clean doesn't seem to 
438	# to load the .config the way our wl Makefile  is expecting.
439	$(MAKE) CONFIG_WL_CONF=wlconfig_lx_router_ap -C $(LINUXDIR) clean
440	$(MAKE) -C $(SRCBASE)/router/compressed clean
441else
442	$(MAKE) -C $(LINUXDIR) clean
443endif
444#	$(MAKE) -C $(SRCBASE)/cfe/build/broadcom/bcm947xx clean
445#	$(MAKE) -C $(SRCBASE)/tools/misc clean#water, @make clean error, 11/10/2008
446
447distclean mrproper: clean
448	rm -f .config $(LINUXDIR)/.config
449
450install package: $(filter-out lib-install,$(obj-install)) $(LINUXDIR)/.config
451        # Install binaries into target directory
452	install -d $(TARGETDIR)
453	for dir in $(wildcard $(patsubst %,$(INSTALLDIR)/%,$(obj-y))) ; do \
454	    (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
455	done
456	# optimize the crypto library by removing unneeded symbols
457	[ ! -d libbcmcrypto ] || $(MAKE) -C libbcmcrypto optimize
458ifneq ("$(CONFIG_WAPI)$(CONFIG_WAPI_IAS)","")
459	# optimize the OPENSSL library by removing unneeded symbols
460#	[ ! -d wapi/wapid ] || $(MAKE) -C wapi/wapid optimize
461endif
462        # Install (and possibly optimize) C library
463	$(MAKE) lib-install
464        # Install modules into filesystem
465	if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
466	    $(MAKE) -C $(LINUXDIR) modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=$(TARGETDIR) ; \
467	fi
468	#$(MAKE) acos-install
469	for dir in $(SRCBASE)/prebuilt/$(FW_TYPE); do \
470            (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
471        done
472	#water, 08/11/2009
473	rm -rf $(TARGETDIR)/lib/modules/2.6.22/build
474	rm -rf $(TARGETDIR)/lib/modules/2.6.22/source
475	rm -rf $(TARGETDIR)/lib/modules/2.6.22/modules.*
476	rm -rf $(TARGETDIR)/lib/modules/2.6.22/extra
477	find $(TARGETDIR) -name .svn  | xargs rm -rf
478	rm -rf $(TARGETDIR)/usr/bin/[
479	rm -rf $(TARGETDIR)/usr/bin/[[
480	rm -rf $(TARGETDIR)/usr/bin/test
481	rm -rf $(TARGETDIR)/bin/false
482	rm -rf $(TARGETDIR)/bin/true
483	rm -rf $(TARGETDIR)/usr/sbin/upnpnat
484	rm -rf $(TARGETDIR)/usr/sbin/epi_ttcp
485	$(STRIP) $(TARGETDIR)/bin/eapd
486	install -d $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/usbprinter
487	install usbprinter/NetUSB.ko $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/usbprinter
488	
489	install -d $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/ufsd
490	install ufsd/ufsd.ko $(TARGETDIR)/lib/modules/2.6.22/kernel/drivers/ufsd
491	install ufsd/chkntfs $(TARGETDIR)/bin
492
493ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
494ifeq ("$(CONFIG_USBAP)","y")
495	echo "=====> Don't delete wl_high.ko for USBAP"
496	find $(TARGETDIR) -name "wl_*.ko" | sed s/\.\*wl_high\\\.ko//g | xargs rm -rf
497else
498	echo "=====> delete wl_high.ko"
499	find $(TARGETDIR) -name "wl_*.ko" | xargs rm -rf
500endif
501else # Linux 2.4
502ifeq ("$(CONFIG_USBAP)","y")
503	echo "=====> Don't delete wl_high.o for USBAP"
504	find $(TARGETDIR) -name "wl_*.o" | sed s/\.\*wl_high\\\.o//g | xargs rm -rf
505else
506	echo "=====> delete"
507	find $(TARGETDIR) -name "wl_*.o" | xargs rm -rf
508endif
509endif
510        # Prepare filesystem
511	cd $(TARGETDIR) && $(TOP)/misc/rootprep.sh
512	# Foxconn add start by Hank for ecosystem support 08/14/2012
513	cp -f $(PLATFORMDIR)/cp_installer.sh $(TARGETDIR)/usr/sbin/cp_installer.sh
514	cp -f $(PLATFORMDIR)/cp_checkbox.sh $(TARGETDIR)/usr/sbin/cp_checkbox.sh
515	cp -f $(PLATFORMDIR)/cp_platform.sh $(TARGETDIR)/usr/sbin/cp_platform.sh
516	cp -f $(PLATFORMDIR)/CAs.txt $(TARGETDIR)/etc/CAs.txt
517	# Foxconn add end by Hank for ecosystem support 08/14/2012 
518ifeq ($(CONFIG_SQUASHFS), y)
519	###########################################
520	### Create Squashfs filesystem ############
521	rm -f $(PLATFORMDIR)/$(ROOT_IMG)
522	rm -f $(PLATFORMDIR)/$(ROOT_IMG).trim
523	rm -f $(TARGETDIR)/sbin/st*
524	find $(TARGETDIR) -name ".svn" | xargs rm -rf
525endif
526ifeq ($(CONFIG_SQUASHFS), y)
527	# Make sure mksquashfs 3.0 is used
528	$(MAKE) -C squashfs mksquashfs
529	find $(TARGETDIR) -name ".svn" | xargs rm -rf
530	squashfs/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG) -noappend -all-root
531	# for i in $(shell ls $(INSTALLDIR)/utils/usr/sbin) ; do \
532	# 	rm -f $(TARGETDIR)/usr/sbin/$${i} ; \
533	# done
534	# squashfs/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG).trim -noappend -all-root
535else
536	# Make sure mkcramfs-2.0 is used
537	$(MAKE) -C $(CRAMFSDIR) mkcramfs
538	# '-u 0 -g 0' will set the uid and gid of all the files to 0 (root)
539	# These options are currently only available on our version of mkcramfs
540	$(CRAMFSDIR)/mkcramfs -u 0 -g 0 $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG)
541endif
542
543ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
544	# Package kernel and filesystem
545ifeq ($(BUILD_MFG), 1)
546	cd $(TARGETDIR) ; \
547	find . | cpio -o -H newc | gzip > $(LINUXDIR)/usr/initramfs_data.cpio.gz
548	ls -l $(LINUXDIR)/usr/initramfs_data.cpio.gz
549	$(MAKE) -C $(LINUXDIR) zImage
550	$(MAKE) -C $(SRCBASE)/router/compressed
551else
552	cp $(SRCBASE)/router/compressed/vmlinuz $(PLATFORMDIR)/
553	trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG)
554	    addpattern -i $(PLATFORMDIR)/linux.trx -o $(PLATFORMDIR)/linux_lsys.bin ; \
555	if grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
556		cp $(SRCBASE)/router/compressed/vmlinuz-lzma $(PLATFORMDIR)/ ; \
557		trx -o $(PLATFORMDIR)/linux-lzma.trx $(PLATFORMDIR)/vmlinuz-lzma $(PLATFORMDIR)/$(ROOT_IMG) ; \
558	fi
559endif
560	# Pad self-booting Linux to a 64 KB boundary
561	cp $(SRCBASE)/router/compressed/zImage $(PLATFORMDIR)/
562else
563	# Package kernel and filesystem
564	if grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
565	    cp $(PLATFORMDIR)/$(ROOT_IMG) $(LINUXDIR)/arch/mips/ramdisk/$${CONFIG_EMBEDDED_RAMDISK_IMAGE} ; \
566	    $(MAKE) -C $(LINUXDIR) zImage ; \
567	else \
568	    cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz $(PLATFORMDIR)/ ; \
569	    trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG) ; \
570		if grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
571			cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz-lzma $(PLATFORMDIR)/ ; \
572			trx -o $(PLATFORMDIR)/linux-lzma.trx $(PLATFORMDIR)/vmlinuz-lzma $(PLATFORMDIR)/$(ROOT_IMG) ; \
573		fi \
574	fi
575	# Pad self-booting Linux to a 64 KB boundary
576	cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/zImage $(PLATFORMDIR)/
577endif
578	dd conv=sync bs=64k < $(PLATFORMDIR)/zImage > $(PLATFORMDIR)/linux.bin
579	# Append filesystem to self-booting Linux
580	cat $(PLATFORMDIR)/$(ROOT_IMG) >> $(PLATFORMDIR)/linux.bin
581
582	###########################################
583	### Create LZMA kernel ####################
584	$(OBJCOPY) -O binary -g $(LINUXDIR)/vmlinux $(PLATFORMDIR)/vmlinux.bin
585	../../tools/lzma e $(PLATFORMDIR)/vmlinux.bin $(PLATFORMDIR)/vmlinux.lzma
586	trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinux.lzma $(PLATFORMDIR)/$(ROOT_IMG)
587	rm -f $(PLATFORMDIR)/vmlinux.bin $(PLATFORMDIR)/vmlinux.lzma
588
589	###########################################
590	### Create .chk files for Web UI upgrade ##
591	cd $(PLATFORMDIR) && touch rootfs && \
592	../../../tools/packet -k linux.trx -f rootfs -b $(BOARDID_FILE) \
593	-ok kernel_image -oall kernel_rootfs_image -or rootfs_image \
594	-i $(fw_cfg_file) && \
595	rm -f rootfs && \
596	cp kernel_rootfs_image.chk $(FW_NAME)_`date +%m%d%H%M`.chk
597
598#ifeq ($(BOARDID_FILE), compatible_WNR3500v2.txt)
599#	cd $(PLATFORMDIR) && touch rootfs && \
600#	../../../tools/packet -k linux.trx -f rootfs -b compatible_WNR3500v2VCNA.txt \
601#	-ok kernel_image -oall kernel_rootfs_image -or rootfs_image \
602#	-i $(fw_cfg_file) && \
603#	rm -f rootfs && \
604#	cp kernel_rootfs_image.chk WNR3500v2vcna_`date +%m%d%H%M`.chk   
605#endif
606
607#
608# Configuration rules
609#
610
611conf mconf:
612	$(MAKE) -C config
613	@./config/$@ ./config/Config
614        # Also configure kernel
615	$(MAKE) k$@
616
617oldconf: .config
618	$(MAKE) -C config
619	@./config/conf -o ./config/Config
620        # Also configure kernel
621	$(MAKE) k$@
622
623kconf:
624	$(MAKE) -C $(LINUXDIR) config
625
626kmconf: $(LINUXDIR)/.config 
627	$(MAKE) -C $(LINUXDIR) menuconfig
628
629koldconf: $(LINUXDIR)/.config
630	$(MAKE) -C $(LINUXDIR) oldconfig
631
632# Convenience
633config: conf
634
635menuconfig: mconf
636
637oldconfig: oldconf
638
639# Default configurations
640ifneq ("$(LINUX_VERSION)","2_6")
641.config:
642	cp config/defconfig $@
643	$(MAKE) oldconfig
644else
645.config:
646	cp config/defconfig-2.6 $@
647	$(MAKE) oldconfig
648endif
649
650ifneq ("$(CONFIG_USBAP)","y")
651ifneq ("$(LINUX_VERSION)","2_6")
652$(LINUXDIR)/.config:
653	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx $@
654else
655$(LINUXDIR)/.config:
656	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx-$(if $(CPU),$(CPU)-,)slimrtr $@
657endif
658else
659ifneq ("LINUX_VERSION","2_6")
660$(LINUXDIR)/.config:
661	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx-usbap $@
662else
663$(LINUXDIR)/.config:
664	cp $(LINUXDIR)/arch/mips/defconfig-bcm947xx-slimrtr-usbap $@
665endif
666endif
667
668# Overwrite Kernel .config
669check_kernel_config: $(LINUXDIR)/.config
670	cp $(LINUXDIR)/.config $(LINUXDIR)/.config.tmp
671ifeq ($(CONFIG_SQUASHFS), y)
672	if ! grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
673		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
674		sed -e "s/CONFIG_CRAMFS=y/# CONFIG_CRAMFS is not set/g" $(LINUXDIR)/.config.chk | \
675		sed -e "s/# CONFIG_SQUASHFS is not set/CONFIG_SQUASHFS=y/g" > \
676		$(LINUXDIR)/.config ; \
677		rm -f $(LINUXDIR)/.config.chk ; \
678	fi
679endif
680ifeq ($(CONFIG_CRAMFS), y)
681	if ! grep -q "CONFIG_CRAMFS=y" $(LINUXDIR)/.config ; then \
682		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
683		sed -e "s/CONFIG_SQUASHFS=y/# CONFIG_SQUASHFS is not set/g" $(LINUXDIR)/.config.chk | \
684		sed -e "s/# CONFIG_CRAMFS is not set/CONFIG_CRAMFS=y/g" > \
685		$(LINUXDIR)/.config ; \
686		rm -f $(LINUXDIR)/.config.chk ; \
687	fi
688endif
689ifeq ($(CONFIG_SHRINK_MEMORY), y)
690	if ! grep -q "CONFIG_SHRINKMEM=y" $(LINUXDIR)/.config ; then \
691		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
692		sed -e "s/# CONFIG_SHRINKMEM is not set/CONFIG_SHRINKMEM=y/g" $(LINUXDIR)/.config.chk > \
693		$(LINUXDIR)/.config ; \
694		rm -f $(LINUXDIR)/.config.chk ; \
695	fi
696else
697	if grep -q "CONFIG_SHRINKMEM=y" $(LINUXDIR)/.config ; then \
698		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
699		sed -e "s/CONFIG_SHRINKMEM=y/# CONFIG_SHRINKMEM is not set/g" $(LINUXDIR)/.config.chk > \
700		$(LINUXDIR)/.config ; \
701		rm -f $(LINUXDIR)/.config.chk ; \
702	fi
703endif
704	# Make kernel config again if changed
705	if ! cmp $(LINUXDIR)/.config $(LINUXDIR)/.config.tmp ; then \
706		$(MAKE) -C $(LINUXDIR) oldconfig ; \
707	fi
708
709#
710# Overrides
711#
712
713ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
714busybox-1.x/Config.h: dummy
715	cd busybox-1.x && rm -f Config.h && ln -sf include/autoconf.h Config.h && touch Config.h
716	cd busybox-1.x && cp configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG)_$(PROFILE) .config && make clean
717
718busybox: busybox-1.x/Config.h
719	$(MAKE) -C busybox-1.x ARCH=mips INSTALL
720
721busybox-install:
722	$(MAKE) -C busybox-1.x ARCH=mips CONFIG_PREFIX=$(INSTALLDIR)/busybox install
723
724
725rc: netconf nvram shared
726	make LINUXDIR=$(LINUXDIR)  -C rc
727ifneq ($(CONFIG_BUSYBOX),)
728rc: busybox-1.x/Config.h
729endif
730else #linux-2.6
731CURBBCFG=$(CONFIG_BUSYBOX_CONFIG).h
732OLDBBCFG=$(shell basename $$(readlink busybox/Config.h) 2> /dev/null)
733busybox/Config.h: dummy
734ifneq ($(OLDBBCFG),$(CURBBCFG))
735	cd busybox && rm -f Config.h && ln -sf configs/$(CURBBCFG) Config.h && touch Config.h
736endif
737
738busybox: busybox/Config.h
739	$(MAKE) -C busybox STRIPTOOL=$(STRIP)
740
741busybox-install:
742	$(MAKE) -C busybox STRIPTOOL=$(STRIP) PREFIX=$(INSTALLDIR)/busybox install
743
744# rc: netconf nvram shared
745rc: nvram shared
746ifneq ($(CONFIG_BUSYBOX),)
747rc: busybox/Config.h
748endif
749endif #linux-2.6
750
751rc-install:
752	make LINUXDIR=$(LINUXDIR) INSTALLDIR=$(INSTALLDIR)/rc -C rc install
753
754lib-install:
755	make LX_VERS=$(LINUX_VERSION) INSTALLDIR=$(INSTALLDIR)/lib -C lib install
756
757www www-%:
758	$(MAKE) -C www/$(CONFIG_VENDOR) $* INSTALLDIR=$(INSTALLDIR)/www
759
760
761
762
763
764# To re-build bcmdl target, uncomment and exchange libusb and  bcmdl targets
765# libusb :
766#	cd $(SRCBASE)/usbdev/libusb; ./configure  --host=mipsel-linux CC=mipsel-uclibc-gcc; make
767
768
769# bcmdl :
770#	make TARGETENV=linuxmips -C $(SRCBASE)/usbdev/usbdl
771
772# bcmdl-install :
773#	install -d $(TARGETDIR)/bin
774#	install -D $(SRCBASE)/usbdev/usbdl/bcmdl $(TARGETDIR)/bin/bcmdl
775
776libusb :
777
778bcmdl :
779
780bcmdl-install :	
781	install -d $(INSTALLDIR)/dongle/sbin
782	install -D $(SRCBASE)/usbdev/usbdl/mips_$(LINUX_VERSION)/bcmdl $(INSTALLDIR)/dongle/sbin/bcmdl
783
784bridge:
785ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
786	$(MAKE) -C bridge-1.x
787else
788	$(MAKE) -C bridge brctl/brctl
789endif
790
791dongle :
792
793bridge-install:
794ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
795	install -D bridge-1.x/brctl/brctl $(INSTALLDIR)/bridge/usr/sbin/brctl
796else
797	install -D bridge/brctl/brctl $(INSTALLDIR)/bridge/usr/sbin/brctl
798endif
799	$(STRIP) $(INSTALLDIR)/bridge/usr/sbin/brctl
800
801dnsmasq-install:
802	install -D dnsmasq/dnsmasq $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
803	$(STRIP) $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
804
805ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
806iptables:
807	$(MAKE) -C iptables-1.x BINDIR=/usr/sbin LIBDIR=/usr/lib KERNEL_DIR=$(LINUXDIR)
808
809iptables-install:
810ifeq ($(CONFIG_IPTABLES),y)
811	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
812	install iptables-1.x/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
813	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
814	install -D iptables-1.x/iptables $(INSTALLDIR)/iptables/usr/sbin/iptables
815	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables
816else
817        # So that generic rule does not take precedence
818	@true
819endif
820iptables-clean:
821	-$(MAKE) -C iptables-1.x KERNEL_DIR=$(LINUXDIR) clean
822else # linux-2.6
823iptables:
824	$(MAKE) -C iptables BINDIR=/usr/sbin LIBDIR=/usr/lib KERNEL_DIR=$(LINUXDIR)
825
826iptables-install:
827ifeq ($(CONFIG_IPTABLES),y)
828	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
829	install iptables/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
830	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
831	install -D iptables/iptables $(INSTALLDIR)/iptables/usr/sbin/iptables
832	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables
833else
834        # So that generic rule does not take precedence
835	@true
836endif
837iptables-clean:
838	-$(MAKE) -C iptables KERNEL_DIR=$(LINUXDIR) clean
839endif # linux-2.6
840
841
842netconf: iptables
843ifeq ($(CONFIG_NETCONF),y)
844	make LINUXDIR=$(LINUXDIR) -C netconf
845else
846	# In case of "Prerequisite 'iptables' is newer than target 'netconf'"
847	@true
848endif
849
850ntpclient-install:
851	install -D ntpclient/ntpclient $(INSTALLDIR)/ntpclient/usr/sbin/ntpclient
852	$(STRIP) $(INSTALLDIR)/ntpclient/usr/sbin/ntpclient
853
854ppp ppp-%:
855	$(MAKE) -C ppp/pppoecd $* INSTALLDIR=$(INSTALLDIR)/ppp
856
857udhcpd-install:
858	install -D udhcpd/udhcpd $(INSTALLDIR)/udhcpd/usr/sbin/udhcpd
859	$(STRIP) $(INSTALLDIR)/udhcpd/usr/sbin/udhcpd
860	cd $(INSTALLDIR)/udhcpd/usr/sbin && ln -sf udhcpd udhcpc
861
862upnp: netconf nvram shared
863
864bcmupnp: netconf nvram shared
865	[ ! -f bcmupnp/Makefile ] || $(MAKE) -C bcmupnp
866
867bcmupnp-install:
868	[ ! -f bcmupnp/Makefile ] || $(MAKE) -C bcmupnp install INSTALLDIR=$(INSTALLDIR)/bcmupnp
869
870bcmupnp-clean:
871	[ ! -f bcmupnp/Makefile ] || $(MAKE) -C bcmupnp clean
872
873wlconf: nvram shared
874
875vlan:
876	$(MAKE) -C vlan CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
877
878vlan-install:
879	$(MAKE) -C vlan CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR) install
880
881vlan-clean:
882	$(MAKE) -C vlan clean
883
884
885emf:
886	$(MAKE) -C emf/emfconf CROSS=$(CROSS_COMPILE)
887
888emf-install:
889ifeq ($(CONFIG_EMF),y)
890	install -d $(TARGETDIR)
891	$(MAKE) -C emf/emfconf CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
892endif
893
894emf-clean:
895	#$(MAKE) -C emf/emfconf clean
896
897igs:
898	$(MAKE) -C emf/igsconf CROSS=$(CROSS_COMPILE)
899
900igs-install:
901ifeq ($(CONFIG_EMF),y)
902	install -d $(TARGETDIR)
903	$(MAKE) -C emf/igsconf CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
904endif
905
906igs-clean:
907	#$(MAKE) -C emf/igsconf clean
908igmp:
909	$(MAKE) -C igmp CROSS=$(CROSS_COMPILE)
910
911igmp-install:
912ifeq ($(CONFIG_IGMP_PROXY),y)
913	install -d $(TARGETDIR)
914	$(MAKE) -C igmp CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
915endif
916
917igmp-clean:
918	$(MAKE) -C igmp clean
919
920wps: nvram shared
921	[ ! -f wps/Makefile ] || $(MAKE) -C wps
922
923wps-install:
924	[ ! -f wps/Makefile ] || $(MAKE) -C wps install INSTALLDIR=$(INSTALLDIR)/wps
925
926wps-clean:
927	[ ! -f wps/Makefile ] || $(MAKE) -C wps clean
928
929acos_link:
930ifneq ($(PROFILE),)
931	cp ../../ap/gpl/minidlna/minidlna.07.26/config_$(PROFILE).h ../../ap/gpl/minidlna/minidlna.07.26/config.h 
932	cd ../../project/acos/include; rm -f ambitCfg.h; ln -s ambitCfg_$(FW_TYPE)_$(PROFILE).h ambitCfg.h
933else
934	cd ../../project/acos/include; rm -f ambitCfg.h; ln -s ambitCfg_$(FW_TYPE).h ambitCfg.h
935endif
936
937ifneq ($(PROFILE),)
938ifneq ($(PROFILE), WNR3500v2VCNA)
939#	cp ../../project/acos/config_$(PROFILE).in ../../project/acos/config.in
940#	cp ../../project/acos/config_$(PROFILE).mk ../../project/acos/config.mk
941#	cp ../../project/acos/Makefile_$(PROFILE) ../../project/acos/Makefile
942	cp $(LINUXDIR)/.config_$(PROFILE) $(LINUXDIR)/.config
943#	cp $(LINUXDIR)/autoconf.h_$(PROFILE) $(LINUXDIR)/include/linux/autoconf.h
944endif
945else
946#	cp ../../project/acos/config_WNR3500v2.in ../../project/acos/config.in
947#	cp ../../project/acos/config_WNR3500v2.mk ../../project/acos/config.mk
948#	cp ../../project/acos/Makefile_WNR3500v2 ../../project/acos/Makefile
949#	cp $(LINUXDIR)/.config_WNR3500v2 $(LINUXDIR)/.config
950#	cp $(LINUXDIR)/autoconf.h_WNR3500v2 $(LINUXDIR)/include/linux/autoconf.h
951endif
952
953
954acos:
955
956acos-install:
957
958acos-clean:
959
960gpl:
961	$(MAKE) -C ../../ap/gpl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
962
963gpl-install:
964	$(MAKE) -C ../../ap/gpl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR) install
965
966gpl-clean:
967	$(MAKE) -C ../../ap/gpl clean
968
969#Leon Lv Add below for UBD,Apr 15,2008
970.PHONY:ubd opendns
971ubd:
972	$(MAKE) -C ubd CROSS=$(CROSS_COMPILE)
973
974ubd-install:
975ifeq ($(CONFIG_UBD),y)
976	install -d $(TARGETDIR)
977#	$(MAKE) -C ubd CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
978	install -D ubd/ubd $(INSTALLDIR)/ubdu/usr/sbin/ubd
979	$(STRIP) $(INSTALLDIR)/ubdu/usr/sbin/ubd
980endif
981
982ubd-clean:
983	$(MAKE) -C ubd clean
984
985opendns:
986	$(MAKE) -C ../../ap/acos/opendns
987
988opendns-install:
989	$(MAKE) -C ../../ap/acos/opendns install
990
991opendns-clean:
992	$(MAKE) -C ../../ap/acos/opendns clean
993
994acos_nat:
995
996acos_nat-install:
997
998acos_nat-clean:
999
1000ifeq ($(LINUXDIR), $(SRCBASE)/linux/linux-2.6)
1001udev:
1002	$(MAKE) -C udev CROSS_COMPILE=$(CROSS_COMPILE)
1003
1004udev-install:
1005	install -d $(TARGETDIR)
1006	$(MAKE) -C udev CROSS_COMPILE=$(CROSS_COMPILE) DESTDIR=$(INSTALLDIR) prefix=/udev install-udevtrigger
1007
1008udev-clean:
1009	$(MAKE) -C udev clean
1010
1011hotplug2:
1012	$(MAKE) -C hotplug2 CROSS_COMPILE=$(CROSS_COMPILE)
1013
1014hotplug2-install:
1015	install -d $(TARGETDIR)
1016	install -d $(INSTALLDIR)/hotplug2
1017	$(MAKE) -C hotplug2 CROSS_COMPILE=$(CROSS_COMPILE) PREFIX=$(INSTALLDIR) install
1018
1019hotplug2-clean:
1020	$(MAKE) -C hotplug2 clean
1021endif
1022
1023openssl:
1024	$(MAKE) -C ../../ap/gpl/openssl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
1025
1026openssl-install:
1027	$(MAKE) -C ../../ap/gpl/openssl CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR) install
1028
1029openssl-clean:
1030	$(MAKE) -C ../../ap/gpl/openssl clean
1031
1032
1033
1034ifeq ($(LINUX_VERSION),2_4)
1035UCLIBC_IPV6=../lib/mipsel-uclibc/libc.so.0
1036endif
1037
1038radvd: flex dummy
1039	[ ! -d $@ ] || [ -f $@/Makefile ] || ( cd $@ && CC=$(CC) ./configure --host=mipsel-linux && cd .. )
1040	[ ! -d $@ ] || $(MAKE) -C radvd CC=$(CC) radvd_LDADD="-L../flex -lfl"
1041
1042radvd-install:
1043	[ ! -d radvd ] || install -D -m 755 radvd/radvd $(INSTALLDIR)/radvd/usr/sbin/radvd
1044	[ ! -d radvd ] || $(STRIP) $(INSTALLDIR)/radvd/usr/sbin/radvd
1045
1046radvd-clean:
1047	[ ! -f radvd/Makefile ] || $(MAKE) -C radvd distclean
1048
1049flex: dummy
1050	[ ! -d $@ ] || [ -f $@/Makefile ] || ( cd $@ && CC=$(CC) ./configure --host=mipsel-linux && cd .. )
1051	[ ! -d $@ ] || $(MAKE) -C flex CC=$(CC) RANLIB=$(RANLIB)
1052
1053iproute2:
1054	[ ! -d $@ ] || $(MAKE) -C iproute2 KERNEL_INCLUDE=$(LINUXDIR)/include CC=$(CC) AR=$(AR) LDLIBS=
1055
1056iproute2-install:
1057	[ ! -d iproute2 ] || install -D -m 755 iproute2/ip/ip $(INSTALLDIR)/iproute2/usr/sbin/ip
1058	[ ! -d iproute2 ] || $(STRIP) $(INSTALLDIR)/iproute2/usr/sbin/ip
1059
1060iputils:
1061	[ ! -d $@ ] || [ -f $@/include-glibc/bits/socket.h ] || ( cd $@/include-glibc/bits && ln -s ../socketbits.h socket.h && cd ../../.. )
1062	[ ! -d $@ ] || $(MAKE) -C iputils KERNEL_INCLUDE=$(LINUXDIR)/include CC=$(CC) LDLIBS=
1063
1064iputils-install:
1065	[ ! -d iputils ] || install -D -m 755 iputils/ping6 $(INSTALLDIR)/iputils/usr/sbin/ping6
1066	[ ! -d iputils ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/ping6
1067	[ ! -d iputils ] || install -D -m 755 iputils/traceroute6 $(INSTALLDIR)/iputils/usr/sbin/traceroute6
1068	[ ! -d iputils ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/traceroute6
1069	[ ! -d iputils ] || install -D -m 755 iputils/tracepath6 $(INSTALLDIR)/iputils/usr/sbin/tracepath6
1070	[ ! -d iputils ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/tracepath6
1071
1072dhcp6s dhcp6c: dummy
1073	[ ! -d dhcp6 ] || [ -f dhcp6/Makefile ] || ( cd dhcp6 && ./configure CC=gcc CFLAGS+="-I../shared" && cd .. )
1074ifeq ($(CONFIG_UCLIBC),y)
1075#	[ ! -d dhcp6 ] || $(MAKE) -C dhcp6 CC=$(CC) LIBS="$(UCLIBC_IPV6)" $@
1076	[ ! -d dhcp6 ] || $(MAKE) -C dhcp6 CC=$(CC) LIBS="-L lib" $@
1077else
1078	[ ! -d dhcp6 ] || $(MAKE) -C dhcp6 CC=$(CC) LIBS="-lresolv -L../libbcmcrypto -lbcmcrypto -L$(INSTALLDIR)/libbcmcrypto/usr/lib" $@
1079endif
1080
1081dhcp6s-install:
1082	[ ! -d dhcp6 ] || install -D -m 755 dhcp6/dhcp6s $(INSTALLDIR)/dhcp6s/usr/sbin/dhcp6s
1083	[ ! -d dhcp6 ] || $(STRIP) $(INSTALLDIR)/dhcp6s/usr/sbin/dhcp6s
1084
1085dhcp6c-install:
1086	[ ! -d dhcp6 ] || install -D -m 755 dhcp6/dhcp6c $(INSTALLDIR)/dhcp6c/usr/sbin/dhcp6c
1087	[ ! -d dhcp6 ] || $(STRIP) $(INSTALLDIR)/dhcp6c/usr/sbin/dhcp6c
1088
1089dhcp6s-clean dhcp6c-clean:
1090	[ ! -f dhcp6/Makefile ] || $(MAKE) -C dhcp6 distclean
1091
1092swresetd-install:
1093swresetd-clean:
1094
1095acl_log-install:
1096acl_log-clean:
1097
1098gpio-install:
1099gpio-clean:
1100#
1101# Generic rules
1102#
1103
1104%:
1105	[ ! -d $* ] || $(MAKE) -C $*
1106
1107%-clean:
1108	[ ! -d $* ] || $(MAKE) -C $* clean
1109
1110%-install:
1111	[ ! -d $* ] || $(MAKE) -C $* install INSTALLDIR=$(INSTALLDIR)/$*
1112
1113$(obj-y) $(obj-n) $(obj-clean) $(obj-install): dummy
1114
1115.PHONY: all clean distclean mrproper install package
1116.PHONY: conf mconf oldconf kconf kmconf config menuconfig oldconfig
1117.PHONY: dummy
1118