1#
2# Broadcom Linux Router Makefile
3#
4# Copyright (C) 2015, 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 545800 2015-04-01 18:23:25Z $
19#
20
21ifneq (true,$(parallel))
22  .NOTPARALLEL:
23endif
24
25include .config
26include .config.plt
27
28CPU ?=
29MAKE_ARGS ?=
30
31LINUX_VERSION ?= 2_6_36
32
33ARCH = arm
34PLT ?= arm
35
36# Get ARCH from PLT argument
37ifneq ($(findstring arm,$(PLT)),)
38ARCH := arm
39endif
40
41# uClibc wrapper
42ifeq ($(CONFIG_UCLIBC),y)
43PLATFORM := $(PLT)-uclibc
44else ifeq ($(CONFIG_GLIBC),y)
45PLATFORM := $(PLT)-glibc
46else
47PLATFORM := $(PLT)
48endif
49
50# Source bases
51export PLATFORM LIBDIR USRLIBDIR LINUX_VERSION
52
53export BCM_KVERSIONSTRING := $(subst _,.,$(LINUX_VERSION))
54
55WLAN_ComponentsInUse := bcmwifi clm ppr olpc
56include ../makefiles/WLAN_Common.mk
57export SRCBASE := $(WLAN_SrcBaseA)
58export BASEDIR := $(WLAN_TreeBaseA)
59export TOP = $(CURDIR)
60
61ifeq (2_6_36,$(LINUX_VERSION))
62export 	LINUXDIR := $(BASEDIR)/components/opensource/linux/linux-2.6.36
63export 	KBUILD_VERBOSE := 1
64export	BUILD_MFG := 0
65SUBMAKE_SETTINGS = SRCBASE=$(SRCBASE) BASEDIR=$(BASEDIR)
66else ifeq (2_6,$(LINUX_VERSION))
67export 	LINUXDIR := $(SRCBASE)/linux/linux-2.6
68export 	KBUILD_VERBOSE := 1
69export	BUILD_MFG := 0
70SUBMAKE_SETTINGS  = SRCBASE=$(SRCBASE)
71else
72export 	LINUXDIR := $(SRCBASE)/linux/linux
73SUBMAKE_SETTINGS  = SRCBASE=$(SRCBASE)
74endif
75
76# Router Source Base Directory
77export SRCBASE_ROUTER := $(abspath $(BASEDIR)/src/router)
78
79# Opensource bases
80OPENSOURCE_BASE_DIR := $(BASEDIR)/components/opensource
81DNSMASQ_DIR := $(OPENSOURCE_BASE_DIR)/dnsmasq
82LIBNFNETLINK_DIR := $(OPENSOURCE_BASE_DIR)/netfilter/libnfnetlink
83LIBMNL_DIR := $(OPENSOURCE_BASE_DIR)/netfilter/libmnl
84LIBNETFILTER_QUEUE_DIR := $(OPENSOURCE_BASE_DIR)/netfilter/libnetfilter_queue
85LIBNETFILTER_CONNTRACK_DIR := $(OPENSOURCE_BASE_DIR)/netfilter/libnetfilter_conntrack
86SALSA_DIR := $(OPENSOURCE_BASE_DIR)/salsa
87ALSALIB_DIR := $(OPENSOURCE_BASE_DIR)/alsa-lib
88ALSAUTILS_DIR := $(OPENSOURCE_BASE_DIR)/alsa-utils
89APLAY_DIR := $(ALSAUTILS_DIR)/aplay
90AMIXER_DIR := $(ALSAUTILS_DIR)/amixer
91ALSACTL_DIR := $(ALSAUTILS_DIR)/alsactl
92MDNSRESPONDERDIR := $(OPENSOURCE_BASE_DIR)/mDNSResponder
93LIBSQLITE3_DIR := $(OPENSOURCE_BASE_DIR)/sqlite3
94LIBJSONC_DIR := $(OPENSOURCE_BASE_DIR)/jsonc
95LIBXML2_DIR := $(OPENSOURCE_BASE_DIR)/libxml2
96
97#Visualization Directories
98VISSOURCE_BASE_DIR := $(BASEDIR)/components/apps/visualization
99VISDCOLL_DIR := $(VISSOURCE_BASE_DIR)/datacollector
100VISDCON_DIR := $(VISSOURCE_BASE_DIR)/dataconcentrator
101#
102# Cross-compile environment variables
103#
104
105# Build platform
106export BUILD := i386-pc-linux-gnu
107export HOSTCC := gcc
108
109ifeq ($(PLATFORM),mipsel)
110export CROSS_COMPILE := mipsel-linux-
111export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
112export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
113endif
114
115ifeq ($(PLATFORM),mipsel-uclibc)
116ifeq (2_6_36,$(LINUX_VERSION))
117export CROSS_COMPILE := mipsel-uclibc-linux-2.6.36-
118CFLAGS += -D__EXPORTED_HEADERS__ -fPIC
119else ifeq (2_6,$(LINUX_VERSION))
120export CROSS_COMPILE := mipsel-uclibc-linux26-
121else
122export CROSS_COMPILE := mipsel-uclibc-
123endif
124export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
125export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
126endif
127
128ifeq ($(PLATFORM),mipsel-glibc)
129ifeq (2_6_36,$(LINUX_VERSION))
130export CROSS_COMPILE := mipsel-glibc-linux-2.6.36-
131export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
132CFLAGS += -D__EXPORTED_HEADERS__ -fPIC
133else ifeq (2_6,$(LINUX_VERSION))
134export CROSS_COMPILE := mipsel-linux-linux26-
135else
136export CROSS_COMPILE := mipsel-linux-
137export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
138export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
139endif
140endif
141
142ifeq ($(PLATFORM),arm-uclibc)
143export CROSS_COMPILE := arm-brcm-linux-uclibcgnueabi-
144export CONFIGURE := ./configure arm-linux --build=$(BUILD)
145export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
146export CFLAGS += -fno-strict-aliasing
147SUBMAKE_SETTINGS += ARCH=$(ARCH)
148EXTRA_LDFLAGS := -lgcc_s
149endif
150
151
152ifeq ($(CONFIG_RTR_OPTIMIZE_SIZE),y)
153export CFLAGS += -Os
154export OPTCFLAGS = -Os
155else
156export CFLAGS += -O2
157export OPTCFLAGS = -O2
158endif
159
160#look at driver configuration
161WLCFGDIR=$(SRCBASE)/wl/config
162
163ifeq ($(CONFIG_NVRAM),y)
164export CFLAGS += -DBCMNVRAM
165endif
166
167ifeq ($(CONFIG_BCMWPA2),y)
168export CFLAGS += -DBCMWPA2
169endif
170
171ifeq ($(RTCONFIG_DHDAP),y)
172export CONFIG_DHDAP
173export CFLAGS += -D__CONFIG_DHDAP__
174
175export SRCBASE_DHD := $(abspath $(SRCBASE)/../dhd/src)
176export SRCBASE_SYS := $(SRCBASE_DHD)
177
178# include toplevel Make for firmware
179include Makefile.fw
180endif
181
182
183ifeq ($(RTCONFIG_GMAC3),y)
184export CFLAGS += -D__CONFIG_GMAC3__
185endif
186
187ifeq ($(CONFIG_USBAP),y)
188export CFLAGS += -D__CONFIG_USBAP__
189endif
190
191ifeq ($(CONFIG_BCMQOS),y)
192export CFLAGS += -DBCMQOS
193endif
194
195ifeq ($(LINUX_VERSION)$(PLT),2_6_36arm)
196ifeq ($(CONFIG_VISUALIZATION),y)
197export CFLAGS += -D__CONFIG_VISUALIZATION__ -DCONFIG_VISUALIZATION_ENABLED
198endif
199endif
200
201ifeq ($(CONFIG_WPS),y)
202export CFLAGS += -D__CONFIG_WPS__
203# WFA WPS 2.0 Testbed extra caps
204#export CFLAGS += -DWFA_WPS_20_TESTBED
205endif
206
207ifeq ($(CONFIG_NFC),y)
208# WPS_NFC
209export CFLAGS += -D__CONFIG_NFC__
210endif
211
212ifeq ($(CONFIG_EMF),y)
213export CFLAGS += -D__CONFIG_EMF__
214export CONFIG_EMF_ENABLED := $(CONFIG_EMF)
215endif
216
217ifeq ($(CONFIG_IGMP_PROXY),y)
218export CFLAGS += -D__CONFIG_IGMP_PROXY__
219endif
220
221ifeq ($(CONFIG_WL_ACI),y)
222export CFLAGS += -D__CONFIG_WL_ACI__
223endif
224
225ifeq ($(CONFIG_TRAFFIC_MGMT_RSSI_POLICY),y)
226export CFLAGS += -DTRAFFIC_MGMT_RSSI_POLICY
227endif
228
229#if !defined(BCMDBG)
230obj-$(CONFIG_UTELNETD) += utelnetd
231#endif
232
233MNL_CFLAGS:="-I$(LIBMNL_DIR)/install/include"
234MNL_LIBS:="-L$(LIBMNL_DIR)/install/lib -lmnl"
235
236NFNETLINK_CFLAGS:="-I$(LIBNFNETLINK_DIR)/install/include"
237NFNETLINK_LIBS:="-L$(LIBNFNETLINK_DIR)/install/lib -lnfnetlink"
238
239NETFILTER_CONNTRACK_CFLAGS:="-I$(LIBNETFILTER_CONNTRACK_DIR)/install/include"
240NETFILTER_CONNTRACK_LIBS:="-L$(LIBNETFILTER_CONNTRACK_DIR)/install/lib -lnetfilter_conntrack"
241
242NETFILTER_QUEUE_CFLAGS:="-I$(LIBNETFILTER_QUEUE_DIR)/install/include"
243NETFILTER_QUEUE_LIBS:="-L$(LIBNETFILTER_QUEUE_DIR)/install/lib -lnetfilter_queue"
244
245ifeq ($(CONFIG_SOUND),y)
246export CFLAGS += -D__CONFIG_SOUND__
247endif
248
249ifeq ($(CONFIG_VOIP),y)
250export CFLAGS += -DBCMVOIP
251endif
252
253ifeq ($(CONFIG_SQUASHFS), y)
254ROOT_IMG := target.squashfs
255else
256ROOT_IMG := target.cramfs
257endif
258
259ifeq ($(CONFIG_WAPI),y)
260export CFLAGS += -DBCMWAPI_WAI -DBCMWAPI_WPI
261endif
262
263ifeq ($(CONFIG_PHYMON_UTILITY),y)
264export CFLAGS += -DPHYMON
265endif
266
267ifneq (2_4,$(LINUX_VERSION))
268CRAMFSDIR := cramfs
269else
270CRAMFSDIR := $(LINUXDIR)/scripts/cramfs
271endif
272
273ifeq ($(CONFIG_BCMDCS),y)
274export CFLAGS += -DBCM_DCS
275endif
276
277ifeq ($(CONFIG_EXTACS),y)
278export CFLAGS += -DEXT_ACS
279endif
280
281ifeq ($(CONFIG_BCMBSD),y)
282export CFLAGS += -DBCM_BSD
283endif
284
285ifeq ($(CONFIG_BCMSSD),y)
286export CFLAGS += -DBCM_SSD
287endif
288
289ifeq ($(CONFIG_TOAD),y)
290export CFLAGS += -D__CONFIG_TOAD__
291endif
292
293ifeq ($(CONFIG_MFP),y)
294export CFLAGS += -DMFP
295endif
296
297ifeq ($(CONFIG_HSPOT),y)
298export CFLAGS += -DNAS_GTK_PER_STA -DHSPOT_OSEN
299endif
300
301ifeq ($(CONFIG_SIGMA),y)
302export CFLAGS += -D__CONFIG_SIGMA__
303endif
304
305ifeq ($(CONFIG_MINI_ROUTER), y)
306export CFLAGS += -D__CONFIG_ROUTER_MINI__
307endif
308
309ifeq ($(CONFIG_WNM), y)
310export CFLAGS += -DWLWNM
311endif
312
313export CC := $(CROSS_COMPILE)gcc
314export AR := $(CROSS_COMPILE)ar
315export AS := $(CROSS_COMPILE)as
316export LD := $(CROSS_COMPILE)ld
317export NM := $(CROSS_COMPILE)nm
318export RANLIB := $(CROSS_COMPILE)ranlib
319export STRIP := $(CROSS_COMPILE)strip
320export SIZE := $(CROSS_COMPILE)size
321
322ifneq ("$(LINUX_VERSION)","2_4")
323export MKSYM := $(shell which $(TOP)/misc/mksym.pl)
324endif
325
326#
327# Install and target directories
328#
329
330export PLATFORMDIR := $(TOP)/$(PLATFORM)
331export INSTALLDIR := $(PLATFORMDIR)/install
332export TARGETDIR := $(PLATFORMDIR)/target
333
334define STRIP_DEBUG_SYMBOLS
335	@dbgsymf=$(basename $(1))_dbgsym$(suffix $(1)); \
336	if [ "$(1)" -nt "$${dbgsymf}" ]; then \
337	   echo "#- $0"; \
338	   ls -ln $1 | awk '{printf "Orig  size: %10d bytes, %s\n",$$5,$$NF}'; \
339	   cp -p -v $1 $$dbgsymf; $(STRIP) -d $(1); touch $$dbgsymf; \
340	   ls -ln $1 | awk '{printf "Strip size: %10d bytes, %s\n",$$5,$$NF}'; \
341	fi
342endef
343
344# USB AP support
345# note : the dongle target is only for after pre-build
346obj-$(CONFIG_USBAP) += bmac dongle
347
348# DHD AP support (PCIe full dongle)
349obj-$(RTCONFIG_DHDAP) += dhd pciefd dhd_monitor
350
351# always build libbcmcrypto
352obj-y += libbcmcrypto
353
354#
355# Configuration
356#
357
358#ifdef BCMSOUND
359obj-$(CONFIG_SIGMA) += sigma
360obj-$(CONFIG_SALSA) += salsa
361obj-$(CONFIG_ALSALIB) += alsalib
362obj-$(CONFIG_LIBZ) += libz
363obj-$(CONFIG_LIBID3TAG) += libid3tag
364obj-$(CONFIG_LIBMAD) += libmad
365obj-$(CONFIG_MADPLAY) += madplay
366obj-$(CONFIG_APLAY) += aplay
367obj-$(CONFIG_AMIXER) += amixer
368obj-$(CONFIG_ALSACTL) += alsactl
369obj-$(CONFIG_AIRPLAY) += airplay
370#endif
371obj-$(CONFIG_MDNSRESPONDER) += mdnsresponder
372obj-$(CONFIG_NVRAM) += nvram
373obj-$(CONFIG_SHARED) += shared
374obj-$(CONFIG_LIBBCM) += libbcm
375obj-$(CONFIG_HTTPD) += httpd
376obj-$(CONFIG_RC) += rc
377ifeq ($(LINUX_VERSION)$(PLT),2_6_36arm)
378obj-$(CONFIG_VISUALIZATION) += libsqlite3 libjsonc libxml2 visdcoll visdcon
379obj-$(CONFIG_TREND_IQOS) += libjsonc
380endif
381obj-$(CONFIG_WWW) += www
382obj-$(CONFIG_GLIBC) += lib
383obj-$(CONFIG_UCLIBC) += lib
384obj-$(CONFIG_WLCONF) += wlconf
385obj-$(CONFIG_BRIDGE) += bridge
386obj-$(CONFIG_BUSYBOX) += busybox
387obj-$(CONFIG_DNSMASQ) += dnsmasq
388obj-$(CONFIG_IPTABLES) += iptables
389obj-$(CONFIG_LIBIPT) += iptables
390# Build only for kernel >= 2.6.36.
391ifeq ($(call wlan_version_ge,$(BCM_KVERSIONSTRING),2.6.36),TRUE)
392obj-$(CONFIG_LIBSTDCPP) += libstdcpp
393obj-$(CONFIG_LIBFLOW) += libflow
394obj-$(CONFIG_LIBMNL) += libmnl
395obj-$(CONFIG_LIBNFNETLINK) += libnfnetlink
396obj-$(CONFIG_LIBNETFILTER_CONNTRACK) += libnetfilter_conntrack
397obj-$(CONFIG_LIBNETFILTER_QUEUE) += libnetfilter_queue
398endif
399obj-$(CONFIG_HSPOT) += hspot_ap
400obj-$(CONFIG_NAS) += nas
401obj-$(CONFIG_WAPI) += wapi/wapid
402obj-$(CONFIG_WAPI_IAS) += wapi/as
403obj-$(CONFIG_SES) += ses/ses
404obj-$(CONFIG_SES_CL) += ses/ses_cl
405obj-$(CONFIG_EZC) += ezc
406obj-$(CONFIG_NETCONF) += netconf
407obj-$(CONFIG_NTP) += ntpclient
408obj-$(CONFIG_PPP) += ppp
409obj-$(CONFIG_UDHCPD) += udhcpd
410obj-$(CONFIG_IGD) += igd
411obj-$(CONFIG_LIBUPNP) += libupnp
412obj-$(CONFIG_FFMPEG) += ffmpeg
413obj-$(CONFIG_DLNA_DMR) += dlna/dmr
414obj-$(CONFIG_DLNA_DMS) += dlna/dms
415obj-$(CONFIG_SAMBA) += samba
416obj-$(CONFIG_UTILS) += utils
417ifeq ($(RTCONFIG_DHDAP),y)
418obj-$(CONFIG_WLEXE) += wlexe
419endif
420obj-$(CONFIG_ETC) += etc
421obj-$(CONFIG_VLAN) += vlan
422obj-$(CONFIG_WPS) += wps
423obj-$(CONFIG_NFC) += nfc
424obj-$(CONFIG_EMF) += emf
425obj-$(CONFIG_EMF) += igs
426obj-$(CONFIG_IGMP_PROXY) += igmp
427obj-$(CONFIG_WL_ACI) += aci
428ifeq (2_6,$(LINUX_VERSION))
429obj-y += udev
430obj-y += hotplug2
431#if defined(BCMDBG)
432obj-$(CONFIG_NVRAM) += crashlog
433#endif
434endif
435obj-$(CONFIG_LLD2D) += lltd/wrt54g-linux
436#if defined(BCMDBG)
437obj-$(CONFIG_UTELNETD) += utelnetd
438#endif
439#if defined(PHYMON)
440obj-$(CONFIG_PHYMON_UTILITY) += phymon
441#endif
442#if defined(EXT_ACS)
443obj-$(CONFIG_EXTACS) += acsd
444#endif
445#if defined(BCM_BSD)
446obj-$(CONFIG_BCMBSD) += bsd
447#endif
448#if defined(BCM_SSD)
449obj-$(CONFIG_BCMSSD) += ssd
450#endif
451#if defined(TOAD)
452obj-$(CONFIG_TOAD) += toad
453#endif
454
455obj-$(CONFIG_VMSTAT) += vmstat
456ifeq ($(LINUX_VERSION)$(PLT),2_6_36arm)
457obj-$(CONFIG_MPSTAT) += mpstat
458obj-$(CONFIG_TASKSET) += taskset
459endif
460
461ifeq ($(LINUX_VERSION),2_6_36)
462IPROUTE2_DIR = iproute2-3.1.0
463IPUTILS_DIR = iputils-s20101006
464else
465IPROUTE2_DIR = iproute2
466IPUTILS_DIR = iputils
467endif
468obj-$(CONFIG_RADVD) += radvd
469ifneq (,${CONFIG_IPROUTE2}${CONFIG_BCMQOS})
470  obj-y += iproute2
471endif
472obj-$(CONFIG_IPUTILS) += iputils
473ifneq (,$(filter y,${CONFIG_DHCPV6S} ${CONFIG_DHCPV6C}))
474  obj-y += dhcp6
475endif
476#obj-$(CONFIG_DHCPV6S) += dhcp6s
477#obj-$(CONFIG_DHCPV6C) += dhcp6c
478
479# BUZZZ tools: function call tracing, performance monitoring, event history
480obj-$(CONFIG_BUZZZ) += buzzz
481
482# Gigle apps
483obj-$(CONFIG_PLC) += plc
484ifeq ($(CONFIG_PLC),y)
485export CFLAGS += -D__CONFIG_PLC__ -D__CONFIG_URE__
486CFLAGS	+= -DPLC -DWPS_LONGPUSH_DISABLE
487endif
488
489#ifdef __CONFIG_TREND_IQOS__
490ifeq ($(LINUX_VERSION),2_6_36)
491ifeq ($(CONFIG_TREND_IQOS),y)
492export IQOS_DIR := $(BASEDIR)/components/vendor/trend/iqos
493obj-$(CONFIG_TREND_IQOS) += iqos
494obj-$(CONFIG_TREND_IQOS) += bcmiqosd
495# Speedtest_cli
496obj-$(CONFIG_TREND_IQOS) += speedtest-cli
497# curl
498obj-$(CONFIG_TREND_IQOS) += curl
499export CFLAGS += -D__CONFIG_TREND_IQOS__ -DCONFIG_TREND_IQOS_ENABLED
500endif
501endif
502#endif /* __CONFIG_TREND_IQOS__ */
503
504# always build eap dispatcher
505obj-y += eapd/linux
506
507ifeq ($(CONFIG_VOIP),y)
508obj-y += voipd
509endif
510
511
512obj-clean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-clean)
513obj-install := $(foreach obj,$(obj-y),$(obj)-install)
514
515# separate the libraries which need to be built first
516obj-prelibs =$(filter nvram libbcmcrypto shared netconf libupnp libz libid3tag ffmpeg libbcm nfc libsqlite3 libjsonc libxml2 pciefd, $(obj-y))
517# remaining libraries that are built next
518obj-postlibs := $(filter-out $(obj-prelibs), $(obj-y))
519
520ifneq (2_4,$(LINUX_VERSION))
521ifneq ($(shell grep "CONFIG_BLK_DEV_INITRD=y" $(LINUXDIR)/.config),)
522ifeq ($(shell grep "CONFIG_BLK_DEV_RAM=y" $(LINUXDIR)/.config),)
523export BUILD_MFG := 1
524export WLTEST := 1
525endif
526endif
527endif
528
529ifneq ($(WLTEST),1)
530ifneq ($(shell grep "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config),)
531export WLTEST := 1
532endif
533endif
534
535ifeq ($(WLTEST),1)
536export CFLAGS += -DWLTEST
537endif
538
539ifeq ($(RTCONFIG_DHDAP),y)
540ifeq ($(RTCONFIG_WLEXE),y)
541export CONFIG_WLEXE
542export RWL ?= 0
543endif
544endif
545
546#
547# Basic rules
548#
549
550# Following export values will be used in wl/config/wlconfig_apdef
551export CONFIG_MFP
552export CONFIG_HSPOT
553export CONFIG_WNM
554
555all: version check_kernel_config obj_prelibs
556	+$(MAKE) $(MAKE_ARGS) post_preplibs
557
558obj_prelibs:
559	+$(MAKE) parallel=true $(MAKE_ARGS) ARCH=$(ARCH) $(obj-prelibs)
560
561obj_postlibs:
562	+$(MAKE) parallel=true $(MAKE_ARGS) ARCH=$(ARCH) $(obj-postlibs)
563
564post_preplibs:  obj_postlibs
565        # Also build kernel
566
567ifneq (2_4,$(LINUX_VERSION))
568ifneq ($(BUILD_MFG), 1)
569ifdef ECLOUD_BUILD_ID
570	# EMAKE build
571	$(MAKE) -C ${LINUXDIR} $(SUBMAKE_SETTINGS) zImage
572else # ECLOUD_BUILD_ID
573	# GMAKE build
574	(echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) |\
575	    $(MAKE) -C ${LINUXDIR} -f - $(SUBMAKE_SETTINGS) zImage
576endif # ECLOUD_BUILD_ID
577	+$(MAKE) CONFIG_SQUASHFS=$(CONFIG_SQUASHFS) -C $(SRCBASE)/router/compressed ARCH=$(ARCH)
578endif # BUILD_MFG
579else  # LINUXDIR
580ifdef ECLOUD_BUILD_ID
581	# EMAKE build
582	$(if $(shell grep "CONFIG_EMBEDDED_RAMDISK=y" ${LINUXDIR}/.config),,\
583	  $(MAKE) -C ${LINUXDIR} $(SUBMAKE_SETTINGS) zImage)
584else # ECLOUD_BUILD_ID
585	# GMAKE build
586	$(if $(shell grep "CONFIG_EMBEDDED_RAMDISK=y" ${LINUXDIR}/.config),, \
587	  (echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) | \
588	  $(MAKE) -C ${LINUXDIR} -f - $(SUBMAKE_SETTINGS) zImage \
589	 )
590endif # ECLOUD_BUILD_ID
591endif # LINUXDIR
592ifdef ECLOUD_BUILD_ID
593	# EMAKE build
594ifeq (2_6_36,$(LINUX_VERSION))
595	# The each Kernel modules xx.mod.c need the symbols in vmlinux,
596	# So how can we do the make modules before the vmlinux is ready?
597	$(if $(shell grep "CONFIG_MODULES=y" ${LINUXDIR}/.config), \
598	  $(MAKE) -C ${LINUXDIR} modules)
599else
600	$(if $(shell grep "CONFIG_MODULES=y" ${LINUXDIR}/.config), \
601	  $(MAKE) -C ${LINUXDIR} -f - $(SUBMAKE_SETTINGS) MFG_WAR=1 zImage ; \
602	  $(MAKE) -C ${LINUXDIR} modules)
603endif
604else # ECLOUD_BUILD_ID
605	# GMAKE build
606ifeq (2_6_36,$(LINUX_VERSION))
607	# The each Kernel modules xx.mod.c need the symbols in vmlinux,
608	# So how can we do the make modules before the vmlinux is ready?
609	$(if $(shell grep "CONFIG_MODULES=y" ${LINUXDIR}/.config), \
610	  (echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) | $(MAKE) -C ${LINUXDIR} -f - $(SUBMAKE_SETTINGS) MFG_WAR=1 zImage ; \
611	  (echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) | $(MAKE) -C ${LINUXDIR} -f - ARCH=$(ARCH) modules)
612else
613	$(if $(shell grep "CONFIG_MODULES=y" ${LINUXDIR}/.config), \
614	  (echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) | $(MAKE) -C ${LINUXDIR} -f - ARCH=$(ARCH) modules \
615	 )
616endif
617endif # ECLOUD_BUILD_ID
618	# Preserve the debug versions of these and strip for release
619	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/vmlinux)
620ifneq (2_4,$(LINUX_VERSION))
621	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl.ko)
622ifeq ("$(CONFIG_USBAP)","y")
623	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl_high/wl_high.ko)
624endif # CONFIG_USBAP
625	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/et/et.ko)
626	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ctf/ctf.ko)
627	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/dhd/dhd.ko)
628	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/bcm57xx/bcm57xx.ko)
629	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/emf/emf.ko)
630	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/igs/igs.ko)
631	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/dpsta/dpsta.ko)
632	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/connector/cn.ko)
633	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/scsi/scsi_wait_scan.ko)
634	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/usb/host/xhci-hcd.ko)
635	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/usb/host/ehci-hcd.ko)
636	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/usb/host/ohci-hcd.ko)
637	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/lib/libcrc32c.ko)
638	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/net/sched/sch_tbf.ko)
639	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/net/sched/sch_hfsc.ko)
640else # LINUXDIR
641	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl.o)
642ifeq ("$(CONFIG_USBAP)","y")
643	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/wl/wl_high/wl_high.o)
644endif # CONFIG_USBAP
645	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/et/et.o)
646	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/ctf/ctf.o)
647	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/dhd/dhd.ko)
648	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/bcm57xx/bcm57xx.o)
649	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/emf/emf.o)
650	$(call STRIP_DEBUG_SYMBOLS,$(LINUXDIR)/drivers/net/igs/igs.o)
651endif # LINUXDIR
652
653
654# well, we should always be able to use the BOM, but right now, the last build step on
655# the build machine doesn't have it, so we don't rerun this is the file already
656# exists
657
658version:  $(SRCBASE)/include/epivers.h
659
660$(SRCBASE)/include/epivers.h:
661	$(MAKE) -C $(SRCBASE)/include
662ifeq ($(RTCONFIG_DHDAP),y)
663	$(MAKE) -C $(SRCBASE_DHD)/include
664	$(MAKE) pciefd-version
665endif
666
667
668router-clean: $(obj-clean) config-clean
669	rm -rf $(TARGETDIR)
670	rm -f $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/linux-gzip.trx
671	rm -f $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/vmlinuz-gzip
672	rm -f $(PLATFORMDIR)/target.cramfs $(PLATFORMDIR)/target.squashfs
673	rm -rf $(INSTALLDIR)/busybox
674
675clean: router-clean
676	@echo cleaning LINUXDIR = $(LINUXDIR)
677ifneq (2_4,$(LINUX_VERSION))
678	# we need to pass some conf file for cleaning 2.6. The kbuild clean doesn't seem to
679	# to load the .config the way our wl Makefile  is expecting.
680	$(MAKE) CONFIG_WL_CONF=wlconfig_lx_router_ap -C $(LINUXDIR) $(SUBMAKE_SETTINGS) clean
681	$(MAKE) -C $(SRCBASE)/router/compressed ARCH=$(ARCH) clean
682else
683	$(MAKE) -C $(LINUXDIR) $(SUBMAKE_SETTINGS) clean
684endif
685	$(MAKE) -C $(SRCBASE)/cfe/build/broadcom/bcm947xx ARCH=$(ARCH) clean
686	[ ! -f $(SRCBASE)/tools/misc/Makefile ] || $(MAKE) -C $(SRCBASE)/tools/misc clean
687
688distclean mrproper: clean
689	rm -f .config .config.plt $(LINUXDIR)/.config
690
691install package: $(filter-out lib-install,$(obj-install)) check_kernel_config
692	# Install binaries into target directory
693	install -d $(TARGETDIR)
694	for dir in $(wildcard $(patsubst %,$(INSTALLDIR)/%,$(obj-y))) ; do \
695	    (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
696	done
697	# optimize the crypto library by removing unneeded symbols
698	$(if $(wildcard libbcmcrypto),+$(MAKE) -C libbcmcrypto optimize)
699ifneq ("$(CONFIG_WAPI)$(CONFIG_WAPI_IAS)","")
700	# optimize the OPENSSL library by removing unneeded symbols
701#	[ ! -d wapi/wapid ] || $(MAKE) -C wapi/wapid optimize
702endif
703	# Install (and possibly optimize) C library
704	+$(MAKE) lib-install
705	# Install modules into filesystem
706	if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
707	    $(MAKE) -C $(LINUXDIR) $(SUBMAKE_SETTINGS) \
708		modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=$(TARGETDIR) ; \
709	fi
710ifneq (2_4,$(LINUX_VERSION))
711ifeq ("$(CONFIG_USBAP)","y")
712	# Don't delete wl_high.ko for USBAP
713	find $(TARGETDIR) -name "wl_*.ko" | sed s/\.\*wl_high\\\.ko//g | xargs rm -rf
714else
715	find $(TARGETDIR) -name "wl_*.ko" | xargs rm -rf
716endif
717else # Linux 2.4
718ifeq ("$(CONFIG_USBAP)","y")
719	# Don't delete wl_high.o for USBAP
720	find $(TARGETDIR) -name "wl_*.o" | sed s/\.\*wl_high\\\.o//g | xargs rm -rf
721else
722	find $(TARGETDIR) -name "wl_*.o" | xargs rm -rf
723endif
724endif
725	# Prepare filesystem
726	cd $(TARGETDIR) && $(TOP)/misc/rootprep.sh
727
728ifeq ($(CONFIG_SQUASHFS), y)
729ifeq (2_6_36,$(LINUX_VERSION))
730	+$(MAKE) -C squashfs-4.2 mksquashfs
731	squashfs-4.2/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG) -noappend -all-root
732else
733	# Make sure mksquashfs 3.0 is used
734	+$(MAKE) -C squashfs mksquashfs
735	squashfs/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG) -noappend -all-root
736endif
737else # CONFIG_SQUASHFS
738	# Make sure mkcramfs-2.0 is used
739	+$(MAKE) -C $(CRAMFSDIR) mkcramfs
740	# '-u 0 -g 0' will set the uid and gid of all the files to 0 (root)
741	# These options are currently only available on our version of mkcramfs
742	$(CRAMFSDIR)/mkcramfs -u 0 -g 0 $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG)
743endif # CONFIG_SQUASHFS
744
745ifneq (2_4,$(LINUX_VERSION))
746	# Package kernel and filesystem
747ifeq ($(BUILD_MFG), 1)
748	cd $(TARGETDIR) ; \
749	find . | cpio -o -H newc | gzip > $(LINUXDIR)/usr/initramfs_data.cpio.gz
750	ls -l $(LINUXDIR)/usr/initramfs_data.cpio.gz
751ifdef ECLOUD_BUILD_ID
752	# EMAKE build
753	$(MAKE) -C ${LINUXDIR} $(SUBMAKE_SETTINGS) zImage
754	+$(MAKE) CONFIG_SQUASHFS=$(CONFIG_SQUASHFS) -C $(SRCBASE)/router/compressed ARCH=$(ARCH)
755else # ECLOUD_BUILD_ID
756	# GMAKE build
757	(echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) | $(MAKE) -C ${LINUXDIR} -f - $(SUBMAKE_SETTINGS) zImage
758	+$(MAKE) CONFIG_SQUASHFS=$(CONFIG_SQUASHFS) -C $(SRCBASE)/router/compressed ARCH=$(ARCH)
759endif # ECLOUD_BUILD_ID
760else # BUILD_MFG
761	cp $(SRCBASE)/router/compressed/vmlinuz $(PLATFORMDIR)/
762	trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG)
763	cp $(SRCBASE)/router/compressed/vmlinuz-gzip $(PLATFORMDIR)/
764	trx -o $(PLATFORMDIR)/linux-gzip.trx $(PLATFORMDIR)/vmlinuz-gzip $(PLATFORMDIR)/$(ROOT_IMG)
765endif # BUILD_MFG
766	# Pad self-booting Linux to a 64 KB boundary
767	cp $(SRCBASE)/router/compressed/zImage $(PLATFORMDIR)/
768else # LINUXDIR
769ifdef ECLOUD_BUILD_ID
770	# EMAKE build
771	# Package kernel and filesystem
772	$(if $(shell grep "CONFIG_EMBEDDED_RAMDISK=y" ${LINUXDIR}/.config), \
773		cp ${PLATFORMDIR}/${ROOT_IMG} ${LINUXDIR}/arch/mips/ramdisk/$${CONFIG_EMBEDDED_RAMDISK_IMAGE} ; \
774		$(MAKE) -C ${LINUXDIR} $(SUBMAKE_SETTINGS) zImage \
775		, \
776		cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz $(PLATFORMDIR)/ ; \
777		trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG) ; \
778		cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz-gzip $(PLATFORMDIR)/ ; \
779		trx -o $(PLATFORMDIR)/linux-gzip.trx $(PLATFORMDIR)/vmlinuz-gzip $(PLATFORMDIR)/$(ROOT_IMG) ; \
780	)
781else # ECLOUD_BUILD_ID
782	# GMAKE build
783	# Package kernel and filesystem
784	$(if $(shell grep "CONFIG_EMBEDDED_RAMDISK=y" ${LINUXDIR}/.config), \
785		cp ${PLATFORMDIR}/${ROOT_IMG} ${LINUXDIR}/arch/mips/ramdisk/$${CONFIG_EMBEDDED_RAMDISK_IMAGE} ; \
786		(echo '.NOTPARALLEL:' ; cat ${LINUXDIR}/Makefile) | \
787		$(MAKE) -C ${LINUXDIR} -f - $(SUBMAKE_SETTINGS) zImage \
788		, \
789		cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz $(PLATFORMDIR)/ ; \
790		trx -o $(PLATFORMDIR)/linux.trx $(PLATFORMDIR)/vmlinuz $(PLATFORMDIR)/$(ROOT_IMG) ; \
791		cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz-gzip $(PLATFORMDIR)/ ; \
792		trx -o $(PLATFORMDIR)/linux-gzip.trx $(PLATFORMDIR)/vmlinuz-gzip $(PLATFORMDIR)/$(ROOT_IMG) ; \
793	)
794endif # ECLOUD_BUILD_ID
795	# Pad self-booting Linux to a 64 KB boundary
796	cp $(LINUXDIR)/arch/mips/brcm-boards/bcm947xx/compressed/zImage $(PLATFORMDIR)/
797endif # LINUXDIR
798	dd conv=sync bs=64k < $(PLATFORMDIR)/zImage > $(PLATFORMDIR)/linux.bin
799	# Append filesystem to self-booting Linux
800	cat $(PLATFORMDIR)/$(ROOT_IMG) >> $(PLATFORMDIR)/linux.bin
801
802# sibling target is specific for release build scripts used. src/router/misc/toplevel-release.mk will do it.
803# Create linux-ap.trx or linux-apsta.trx and copy to $(SIBLING_INSTALL_DIR) foldir.
804sibling:
805ifneq ($(BUILD_MFG), 1)
806	if grep -q "CONFIG_WL_USE_AP=y" $(LINUXDIR)/.config ; then \
807                cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
808                sed -e "s/CONFIG_WL_USE_AP=y/# CONFIG_WL_USE_AP is not set/g" $(LINUXDIR)/.config.chk | \
809                sed -e "s/# CONFIG_WL_USE_APSTA is not set/CONFIG_WL_USE_APSTA=y/g" > \
810                $(LINUXDIR)/.config ; \
811                rm -f $(LINUXDIR)/.config.chk ; \
812		cp $(SIBLING_INSTALL_DIR)/linux.trx $(SIBLING_INSTALL_DIR)/linux-ap.trx ; \
813		$(MAKE) oldconfig ; \
814		$(MAKE) wps-clean ; \
815		$(MAKE) all ; \
816		$(MAKE) install ; \
817		cp $(PLATFORMDIR)/linux.trx $(SIBLING_INSTALL_DIR)/linux-apsta.trx ; \
818		cp $(PLATFORMDIR)/linux-gzip.trx $(SIBLING_INSTALL_DIR)/linux-apsta-gzip.trx ; \
819	elif grep -q "CONFIG_WL_USE_APSTA=y" $(LINUXDIR)/.config ; then \
820                cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
821                sed -e "s/CONFIG_WL_USE_APSTA=y/# CONFIG_WL_USE_APSTA is not set/g" $(LINUXDIR)/.config.chk | \
822                sed -e "s/# CONFIG_WL_USE_AP is not set/CONFIG_WL_USE_AP=y/g" > \
823                $(LINUXDIR)/.config ; \
824                rm -f $(LINUXDIR)/.config.chk ; \
825		cp $(SIBLING_INSTALL_DIR)/linux.trx $(SIBLING_INSTALL_DIR)/linux-apsta.trx ; \
826		$(MAKE) oldconfig ; \
827		$(MAKE) wps-clean ; \
828		$(MAKE) all ; \
829		$(MAKE) install ; \
830		cp $(PLATFORMDIR)/linux.trx $(SIBLING_INSTALL_DIR)/linux-ap.trx ; \
831		cp $(PLATFORMDIR)/linux-gzip.trx $(SIBLING_INSTALL_DIR)/linux-ap-gzip.trx ; \
832	fi
833endif
834	# MFG will not build TRX
835	@true;
836
837#
838# Configuration rules
839#
840
841conf mconf:
842	+$(MAKE) -C config LINUXDIR=${LINUXDIR}
843	@LINUXDIR=${LINUXDIR} ./config/$@ ./config/Config
844	# Also configure kernel
845	+$(MAKE) LINUXDIR=${LINUXDIR} k$@
846
847oldconf: .config
848	+$(MAKE) -C config LINUXDIR=${LINUXDIR}
849	@LINUXDIR=${LINUXDIR} ./config/conf -o ./config/Config
850	# Also configure kernel
851	+$(MAKE) LINUXDIR=${LINUXDIR} k$@
852
853kconf:
854	+$(MAKE) -C $(LINUXDIR) $(SUBMAKE_SETTINGS) config
855
856kmconf: check_kernel_config
857	+$(MAKE) -C $(LINUXDIR) $(SUBMAKE_SETTINGS) menuconfig
858
859koldconf: check_kernel_config
860	+$(MAKE) -C $(LINUXDIR) $(SUBMAKE_SETTINGS) oldconfig
861
862# Convenience
863config: conf
864
865menuconfig: mconf
866
867oldconfig: oldconf
868
869# Platform file
870.config.plt:
871	@echo "PLT=$(PLT)" > $@
872	@echo "LINUX_VERSION=$(LINUX_VERSION)" >> $@
873
874# Default configurations
875.config:
876ifneq (2_4,$(LINUX_VERSION))
877	cp config/defconfig-2.6 $@
878else
879	cp config/defconfig $@
880endif
881	+$(MAKE) SRCBASE=$(SRCBASE) LINUXDIR=$(LINUXDIR) oldconfig
882
883$(LINUXDIR)/.config:
884ifneq (2_4,$(LINUX_VERSION))
885	cp $(LINUXDIR)/arch/$(ARCH)/defconfig-2.6-bcm947xx $@
886else
887	cp $(LINUXDIR)/arch/$(ARCH)/defconfig-bcm947xx $@
888endif
889
890# Overwrite Kernel .config
891check_kernel_config: $(LINUXDIR)/.config
892	cp $(LINUXDIR)/.config $(LINUXDIR)/.config.tmp
893ifeq ($(CONFIG_SQUASHFS), y)
894	if ! grep -q "CONFIG_SQUASHFS=y" $(LINUXDIR)/.config ; then \
895		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
896		sed -e "s/CONFIG_CRAMFS=y/# CONFIG_CRAMFS is not set/g" $(LINUXDIR)/.config.chk | \
897		sed -e "s/# CONFIG_SQUASHFS is not set/CONFIG_SQUASHFS=y/g" > \
898		$(LINUXDIR)/.config ; \
899		rm -f $(LINUXDIR)/.config.chk ; \
900	fi
901endif
902ifeq ($(CONFIG_CRAMFS), y)
903	if ! grep -q "CONFIG_CRAMFS=y" $(LINUXDIR)/.config ; then \
904		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
905		sed -e "s/CONFIG_SQUASHFS=y/# CONFIG_SQUASHFS is not set/g" $(LINUXDIR)/.config.chk | \
906		sed -e "s/# CONFIG_CRAMFS is not set/CONFIG_CRAMFS=y/g" > \
907		$(LINUXDIR)/.config ; \
908		rm -f $(LINUXDIR)/.config.chk ; \
909	fi
910endif
911ifeq ($(CONFIG_SHRINK_MEMORY), y)
912	if ! grep -q "CONFIG_SHRINKMEM=y" $(LINUXDIR)/.config ; then \
913		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
914		sed -e "s/# CONFIG_SHRINKMEM is not set/CONFIG_SHRINKMEM=y/g" $(LINUXDIR)/.config.chk > \
915		$(LINUXDIR)/.config ; \
916		rm -f $(LINUXDIR)/.config.chk ; \
917	fi
918else
919	if grep -q "CONFIG_SHRINKMEM=y" $(LINUXDIR)/.config ; then \
920		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
921		sed -e "s/CONFIG_SHRINKMEM=y/# CONFIG_SHRINKMEM is not set/g" $(LINUXDIR)/.config.chk > \
922		$(LINUXDIR)/.config ; \
923		rm -f $(LINUXDIR)/.config.chk ; \
924	fi
925endif
926ifeq ($(CONFIG_PLC), y)
927	if ! grep -q "CONFIG_PLC=y" $(LINUXDIR)/.config ; then \
928		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
929		sed -e "s/# CONFIG_PLC is not set/CONFIG_PLC=y/g" $(LINUXDIR)/.config.chk > \
930		$(LINUXDIR)/.config ; \
931		rm -f $(LINUXDIR)/.config.chk ; \
932	fi
933else
934	if grep -q "CONFIG_PLC=y" $(LINUXDIR)/.config ; then \
935		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
936		sed -e "s/CONFIG_PLC=y/# CONFIG_PLC is not set/g" $(LINUXDIR)/.config.chk > \
937		$(LINUXDIR)/.config ; \
938		rm -f $(LINUXDIR)/.config.chk ; \
939	fi
940endif
941	# Do not override CONFIG_PLAT_MUX_CONSOLE if CONFIG_NFC is disable, others may enable it.
942ifeq ($(CONFIG_NFC), y)
943	if ! grep -q "CONFIG_PLAT_MUX_CONSOLE=y" $(LINUXDIR)/.config ; then \
944		cp $(LINUXDIR)/.config $(LINUXDIR)/.config.chk ; \
945		sed -e "s/# CONFIG_PLAT_MUX_CONSOLE is not set/CONFIG_PLAT_MUX_CONSOLE=y/g" $(LINUXDIR)/.config.chk > \
946		$(LINUXDIR)/.config ; \
947		rm -f $(LINUXDIR)/.config.chk ; \
948	fi
949endif
950	# Make kernel config again if changed
951	$(if $(shell [ ! cmp ${LINUXDIR}/.config ${LINUXDIR}/.config.tmp >/dev/null 2>&1 ] && echo "y"), \
952	+$(MAKE) -C ${LINUXDIR} $(SUBMAKE_SETTINGS) oldconfig < /dev/null \
953	)
954
955#
956# Overrides
957#
958
959ifneq (2_4,$(LINUX_VERSION))
960# See if .config has changed. This file gets a new date stamp at each build,
961# so we always have exactly 4 lines of diffs. Anything else, we rebuild.
962BB_DIFF_LINES=$(shell diff busybox-1.x/.config busybox-1.x/configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG) | wc -l)
963
964busybox-1.x/.config:
965	cd $(@D) && cp configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG) .config && $(MAKE) oldconfig
966
967busybox-1.x/Config.h: dummy
968	cd $(@D) && rm -f Config.h && ln -sf include/autoconf.h Config.h && touch Config.h
969ifneq ($(BB_DIFF_LINES),4)
970	cd $(@D) && cp configs/bbconfig-$(CONFIG_BUSYBOX_CONFIG) .config && $(MAKE) clean
971endif
972
973.PHONY: busybox
974busybox: busybox-1.x/.config busybox-1.x/Config.h
975	+$(MAKE) -C busybox-1.x ARCH=$(ARCH) INSTALL
976
977busybox-install:
978	+$(MAKE) -C busybox-1.x ARCH=$(ARCH) CONFIG_PREFIX=$(INSTALLDIR)/busybox install
979
980busybox-clean:
981	+$(MAKE) -C busybox-1.x ARCH=$(ARCH) clean
982
983rc: netconf nvram shared
984	+$(MAKE) LINUXDIR=$(LINUXDIR) EXTRA_LDFLAGS=$(EXTRA_LDFLAGS) -C rc
985ifneq ($(CONFIG_BUSYBOX),)
986rc: busybox-1.x/Config.h
987endif
988else #linux-2.6
989CURBBCFG := $(CONFIG_BUSYBOX_CONFIG).h
990OLDBBCFG := $(shell basename $$(readlink busybox/Config.h) 2> /dev/null)
991busybox/Config.h: dummy
992ifneq ($(OLDBBCFG),$(CURBBCFG))
993	cd busybox && rm -f Config.h && ln -sf configs/$(CURBBCFG) Config.h && touch Config.h
994endif
995
996busybox: busybox/Config.h
997	+$(MAKE) -C busybox STRIPTOOL=$(STRIP)
998
999busybox-install:
1000	+$(MAKE) -C busybox STRIPTOOL=$(STRIP) PREFIX=$(INSTALLDIR)/busybox install
1001
1002rc: netconf nvram shared
1003ifneq ($(CONFIG_BUSYBOX),)
1004rc: busybox/Config.h
1005endif
1006endif #linux-2.6
1007
1008rc-install: rc
1009	+$(MAKE) LINUXDIR=$(LINUXDIR) INSTALLDIR=$(INSTALLDIR)/rc -C rc install
1010
1011lib-install:
1012	+$(MAKE) LX_VERS=$(LINUX_VERSION) INSTALLDIR=$(INSTALLDIR)/lib ARCH=$(ARCH) -C lib install
1013
1014www:
1015	+$(MAKE) -C www/$(CONFIG_VENDOR) INSTALLDIR=$(INSTALLDIR)/www
1016
1017www-install:
1018	+$(MAKE) -C www/$(CONFIG_VENDOR) install INSTALLDIR=$(INSTALLDIR)/www
1019
1020www-clean:
1021	+$(MAKE) -C www/$(CONFIG_VENDOR) clean INSTALLDIR=$(INSTALLDIR)/www
1022
1023ifeq ($(CONFIG_MDNSRESPONDER),y)
1024mdnsresponder:
1025	+$(MAKE) -C $(MDNSRESPONDERDIR)/mDNSPosix HAVE_UCLIBC=1 os=linux-$(ARCH)
1026
1027mdnsresponder-install:
1028	+$(MAKE) -C $(MDNSRESPONDERDIR)/mDNSPosix \
1029		HAVE_UCLIBC=1 \
1030		os=linux-$(ARCH) \
1031		DISTDIR=$(INSTALLDIR)/mdnsresponder \
1032		dist
1033	echo -e "hosts: files mdns dns" > $(INSTALLDIR)/mdnsresponder/etc/nsswitch.conf
1034
1035mdnsresponder-clean:
1036	+$(MAKE) -C $(MDNSRESPONDERDIR)/mDNSPosix HAVE_UCLIBC=1 os=linux-$(ARCH) clean
1037endif
1038
1039#ifdef BCMSOUND
1040ifeq ($(CONFIG_SOUND),y)
1041
1042ALSALIB_INSTALL_DIR := $(INSTALLDIR)/alsalib/usr
1043ifeq ($(CONFIG_SALSA),y)
1044ALSA_IMPL_DIR := $(SALSA_DIR)
1045else
1046ifeq ($(CONFIG_ALSALIB),y)
1047ALSA_IMPL_DIR := $(ALSALIB_INSTALL_DIR)
1048endif
1049endif
1050
1051ifeq ($(CONFIG_SALSA),y)
1052# Soft-link libasound.a to libsalsa.a because alsa-utils (aplay, amixer) link against -lasound.
1053salsa:
1054	[ -f $(SALSA_DIR)/Makefile ] || \
1055	(cd $(SALSA_DIR); ./configure --host=$(ARCH)-uclibc-linux26 --disable-dependency-tracking --prefix=$(SALSA_DIR) CC=$(CROSS_COMPILE)gcc)
1056	[ -f $(SALSA_DIR)/src/.libs/libsalsa.so.0.0.1 ] || \
1057	($(MAKE) -C $(SALSA_DIR) ; $(MAKE) -C $(SALSA_DIR) install ; rm -f $(SALSA_DIR)/lib/libasound.a ; ln -s $(SALSA_DIR)/lib/libsalsa.a $(SALSA_DIR)/lib/libasound.a)
1058
1059salsa-install:
1060	install -d $(INSTALLDIR)/usr/lib
1061	install -m 755  $(SALSA_DIR)/lib/libsalsa.so.0.0.1 $(INSTALLDIR)/usr/lib/libsalsa.so
1062	$(STRIP) $(INSTALLDIR)/usr/lib/libsalsa.so
1063
1064salsa-clean:
1065	$(MAKE) -C $(SALSA_DIR) clean
1066	$(MAKE) -C $(SALSA_DIR) distclean
1067	rm -rf $(SALSA_DIR)/src/.libs
1068	rm -f $(SALSA_DIR)/Makefile
1069else
1070ifeq ($(CONFIG_ALSALIB),y)
1071alsalib:
1072	[ -f $(ALSALIB_DIR)/Makefile ] || \
1073	(cd $(ALSALIB_DIR); ./configure \
1074	--host=$(ARCH)-uclibc-linux26 \
1075	--without-versioned \
1076	--disable-dependency-tracking \
1077	--disable-python \
1078	--disable-alisp \
1079	--prefix=$(ALSALIB_INSTALL_DIR) \
1080	CC=$(CROSS_COMPILE)gcc \
1081	CPP=$(CROSS_COMPILE)cpp \
1082	CXX=$(CROSS_COMPILE)g++)
1083	[ -f $(ALSALIB_DIR)/src/.libs/libasound.so.2.0.0 ] || \
1084	($(MAKE) -C $(ALSALIB_DIR) ; $(MAKE) -C $(ALSALIB_DIR) install)
1085
1086alsalib-install:
1087	[ -f $(ALSALIB_DIR)/Makefile ] && \
1088	($(MAKE) -C $(ALSALIB_DIR) distclean)
1089	cd $(ALSALIB_DIR) && \
1090	./configure \
1091	--host=$(ARCH)-uclibc-linux26 \
1092	--without-versioned \
1093	--disable-dependency-tracking \
1094	--disable-python \
1095	--disable-alisp \
1096	--prefix=/usr \
1097	CC=$(CROSS_COMPILE)gcc \
1098	CPP=$(CROSS_COMPILE)cpp \
1099	CXX=$(CROSS_COMPILE)g++
1100	$(MAKE) -C $(ALSALIB_DIR)
1101	install -m 755 $(ALSALIB_DIR)/src/.libs/libasound.so.2.0.0 $(ALSALIB_INSTALL_DIR)/lib
1102	install -m 755 $(ALSALIB_DIR)/modules/mixer/simple/.libs/*.so $(ALSALIB_INSTALL_DIR)/lib/alsa-lib/smixer
1103	rm -rf $(ALSALIB_INSTALL_DIR)/include
1104	rm -rf $(ALSALIB_INSTALL_DIR)/bin
1105	rm -rf $(ALSALIB_INSTALL_DIR)/lib/pkgconfig
1106	rm -rf $(ALSALIB_INSTALL_DIR)/share/aclocal
1107	rm -f $(ALSALIB_INSTALL_DIR)/lib/*.la
1108	rm -f $(ALSALIB_INSTALL_DIR)/lib/alsa-lib/smixer/*.la
1109	$(STRIP) $(ALSALIB_INSTALL_DIR)/lib/libasound.so.2.0.0
1110	$(STRIP) \
1111	$(ALSALIB_INSTALL_DIR)/lib/alsa-lib/smixer/smixer-sbase.so \
1112	$(ALSALIB_INSTALL_DIR)/lib/alsa-lib/smixer/smixer-hda.so \
1113	$(ALSALIB_INSTALL_DIR)/lib/alsa-lib/smixer/smixer-ac97.so
1114
1115alsalib-clean:
1116	$(MAKE) -C $(ALSALIB_DIR) clean
1117	$(MAKE) -C $(ALSALIB_DIR) distclean
1118	rm -rf $(ALSALIB_DIR)/src/.libs
1119	rm -f $(ALSALIB_DIR)/Makefile
1120endif
1121endif
1122ifeq ($(CONFIG_APLAY),y)
1123aplay:
1124	[ -f $(APLAY_DIR)/Makefile ] || \
1125	(cd $(ALSAUTILS_DIR); \
1126	./configure \
1127	--host=$(ARCH)-uclibc-linux26 \
1128	--disable-dependency-tracking \
1129	--disable-nls \
1130	--disable-alsamixer \
1131	--disable-alsatest \
1132	--disable-xmlto \
1133	--with-alsa-prefix=$(ALSA_IMPL_DIR)/lib \
1134	--with-alsa-inc-prefix=$(ALSA_IMPL_DIR)/include \
1135	--prefix=$(ALSAUTILS_DIR) \
1136	CC=$(CROSS_COMPILE)gcc)
1137	($(MAKE) -C $(APLAY_DIR) ; $(MAKE) -C $(APLAY_DIR) install)
1138
1139aplay-install:
1140	install -d $(INSTALLDIR)/aplay/usr/sbin
1141	install -m 755 $(APLAY_DIR)/aplay $(INSTALLDIR)/aplay/usr/sbin
1142
1143aplay-clean:
1144	$(MAKE) -C $(APLAY_DIR) clean
1145	rm -f $(APLAY_DIR)/Makefile
1146endif
1147ifeq ($(CONFIG_AMIXER),y)
1148amixer:
1149	[ -f $(AMIXER_DIR)/Makefile ] || \
1150	(cd $(ALSAUTILS_DIR); \
1151	./configure \
1152	--host=$(ARCH)-uclibc-linux26 \
1153	--disable-dependency-tracking \
1154	--disable-nls \
1155	--disable-alsamixer \
1156	--disable-alsatest \
1157	--disable-xmlto \
1158	--with-alsa-prefix=$(ALSA_IMPL_DIR)/lib \
1159	--with-alsa-inc-prefix=$(ALSA_IMPL_DIR)/include \
1160	--prefix=$(ALSAUTILS_DIR) \
1161	CC=$(CROSS_COMPILE)gcc)
1162	($(MAKE) -C $(AMIXER_DIR) ; $(MAKE) -C $(AMIXER_DIR) install)
1163
1164amixer-install:
1165	install -d $(INSTALLDIR)/amixer/usr/sbin
1166	install -m 755 $(AMIXER_DIR)/amixer $(INSTALLDIR)/amixer/usr/sbin
1167
1168amixer-clean:
1169	$(MAKE) -C $(AMIXER_DIR) clean
1170	rm -f $(AMIXER_DIR)/Makefile
1171endif
1172
1173ifeq ($(CONFIG_ALSALIB),y)
1174ifeq ($(CONFIG_ALSACTL),y)
1175alsactl:
1176	[ -f $(ALSACTL_DIR)/Makefile ] || \
1177	(cd $(ALSAUTILS_DIR); \
1178	./configure \
1179	--host=$(ARCH)-uclibc-linux26 \
1180	--disable-dependency-tracking \
1181	--disable-nls \
1182	--disable-alsamixer \
1183	--disable-alsatest \
1184	--disable-xmlto \
1185	--with-alsa-prefix=$(ALSA_IMPL_DIR)/lib \
1186	--with-alsa-inc-prefix=$(ALSA_IMPL_DIR)/include \
1187	--prefix=$(ALSAUTILS_DIR) \
1188	CC=$(CROSS_COMPILE)gcc)
1189	($(MAKE) -C $(ALSACTL_DIR) ; $(MAKE) -C $(ALSACTL_DIR) install)
1190
1191alsactl-install:
1192	install -d $(INSTALLDIR)/alsactl/usr/sbin
1193	install -m 755 $(ALSACTL_DIR)/alsactl $(INSTALLDIR)/alsactl/usr/sbin
1194
1195alsactl-clean:
1196	$(MAKE) -C $(ALSACTL_DIR) clean
1197	rm -f $(ALSACTL_DIR)/Makefile
1198endif
1199endif
1200
1201ifeq ($(CONFIG_AIRPLAY),y)
1202ifeq ($(CONFIG_SALSA),y)
1203airplay: mdnsresponder salsa
1204	+$(MAKE) -C $(AIRPLAYDIR)/Platform/Platform_Linux \
1205		MDNSROOT=$(MDNSRESPONDERDIR) \
1206		ALSAROOT=$(realpath $(ALSA_IMPL_DIR)) \
1207		USE_SALSA=1 \
1208		debug=1 \
1209		daemon
1210airplay-clean:
1211	$(MAKE) -C $(AIRPLAYDIR)/Platform/Platform_Linux \
1212		MDNSROOT=$(MDNSRESPONDERDIR) \
1213		ALSAROOT=$(realpath $(ALSA_IMPL_DIR)) \
1214		USE_SALSA=1 \
1215		debug=1 \
1216		clean
1217else
1218ifeq ($(CONFIG_ALSALIB),y)
1219airplay: mdnsresponder alsalib
1220	+$(MAKE) -C $(AIRPLAYDIR)/Platform/Platform_Linux \
1221		MDNSROOT=$(MDNSRESPONDERDIR) \
1222		ALSAROOT=$(realpath $(ALSA_IMPL_DIR)) \
1223		debug=1 \
1224		daemon
1225airplay-clean:
1226	$(MAKE) -C $(AIRPLAYDIR)/Platform/Platform_Linux \
1227		MDNSROOT=$(MDNSRESPONDERDIR) \
1228		ALSAROOT=$(realpath $(ALSA_IMPL_DIR)) \
1229		debug=1 \
1230		clean
1231endif
1232endif
1233
1234airplay-install: mDNSResponder-install
1235	install -D -m 755 $(AIRPLAYDIR)/Platform/Platform_Linux/obj/airplayd \
1236		$(INSTALLDIR)/airplay/usr/sbin/airplayd
1237endif
1238endif
1239#endif
1240
1241#ifdef __CONFIG_TREND_IQOS__
1242ifeq ($(LINUX_VERSION),2_6_36)
1243ifeq ($(CONFIG_TREND_IQOS),y)
1244
1245iqos-install:
1246	+$(MAKE) -C $(IQOS_DIR) install INSTALLDIR=$(INSTALLDIR)/iqos
1247iqos-clean:
1248	+$(MAKE) -C $(IQOS_DIR) clean
1249.PHONY: iqos-install iqos-clean
1250
1251CURL_DIR := $(OPENSOURCE_BASE_DIR)/curl
1252curl:
1253	+$(MAKE) -C $(CURL_DIR)
1254curl-install:
1255	+$(MAKE) -C $(CURL_DIR) install INSTALLDIR=$(INSTALLDIR)/curl
1256curl-clean:
1257	+$(MAKE) -C $(CURL_DIR) clean
1258.PHONY: curl curl-install curl-clean
1259endif
1260endif
1261#endif /* __CONFIG_TREND_IQOS__ */
1262
1263
1264
1265dhd:
1266ifeq ($(RTCONFIG_DHDAP),y)
1267ifneq ($(wildcard $(SRCBASE_DHD)/dhd/exe),)
1268	$(MAKE) TARGET_PREFIX=$(CROSS_COMPILE) -C $(SRCBASE_DHD)/dhd/exe
1269endif
1270endif
1271
1272dhd-clean :
1273ifneq ($(wildcard $(SRCBASE_DHD)/dhd/exe),)
1274	$(MAKE) TARGET_PREFIX=$(CROSS_COMPILE) -C $(SRCBASE_DHD)/dhd/exe clean
1275endif
1276
1277dhd-install :
1278ifeq ($(RTCONFIG_DHDAP),y)
1279ifneq ($(wildcard $(SRCBASE_DHD)/dhd/exe),)
1280	install -d $(INSTALLDIR)/dhd/usr/sbin
1281	install $(SRCBASE_DHD)/dhd/exe/dhd $(INSTALLDIR)/dhd/usr/sbin
1282	$(STRIP) $(INSTALLDIR)/dhd/usr/sbin/dhd
1283endif
1284endif
1285
1286.PHONY: dhd_monitor
1287
1288dhd_monitor: shared nvram
1289ifeq ($(RTCONFIG_DHDAP),y)
1290	+$(MAKE) LINUXDIR=$(LINUXDIR) EXTRA_LDFLAGS=$(EXTRA_LDFLAGS) -C dhd_monitor dhd_monitor
1291endif
1292
1293dhd_monitor-install: dhd_monitor
1294ifeq ($(RTCONFIG_DHDAP),y)
1295	+$(MAKE) -C dhd_monitor INSTALLDIR=$(INSTALLDIR)/dhd_monitor install
1296endif
1297
1298dhd_monitor-clean:
1299ifeq ($(RTCONFIG_DHDAP),y)
1300	+$(MAKE) -C dhd_monitor clean
1301endif
1302
1303
1304# XXX libusb and bcmdl are obseleted after USBAP high driver image embeds the low driver
1305# To re-build bcmdl target, set BUILD_BCMDL to 1
1306BUILD_BCMDL := 0
1307
1308ifeq ($(BUILD_BCMDL), 1)
1309prep-libusb:
1310	$(if $(wildcard ${SRCBASE}/usbdev/libusb/), \
1311	   ( cd $(SRCBASE)/usbdev/libusb \
1312	     && ./configure --host=$(PLT)-linux CC=$(CROSS_COMPILE)gcc \
1313	   ) \
1314	 )
1315
1316libusb: prep-libusb
1317	$(if $(wildcard ${SRCBASE}/usb/libusb), \
1318	  +$(MAKE) -C ${SRCBASE}/usbdev/libusb \
1319	)
1320
1321bcmdl :	libusb
1322ifneq (2_4,$(LINUX_VERSION))
1323	+$(MAKE) TARGETENV=linux26mips -C $(SRCBASE)/usbdev/usbdl
1324else
1325	+$(MAKE) TARGETENV=linuxmips -C $(SRCBASE)/usbdev/usbdl
1326
1327endif
1328
1329bcmdl-install:
1330	install -d $(TARGETDIR)/sbin
1331	install -D $(SRCBASE)/usbdev/usbdl/bcmdl $(TARGETDIR)/sbin/bcmdl
1332else	# BUILD_BCMDL
1333libusb:
1334	# So that generic rule does not take precedence
1335	@true
1336
1337bcmdl:
1338	# So that generic rule does not take precedence
1339	@true
1340
1341bcmdl-install :
1342	install -d $(INSTALLDIR)/dongle/sbin
1343	install -D $(SRCBASE)/usbdev/usbdl/mips_$(LINUX_VERSION)/bcmdl $(INSTALLDIR)/dongle/sbin/bcmdl
1344#	install -D $(SRCBASE)/dongle/rte/test/run-arm-thumb-cm3-poll-ai-uc/hello.bin.trx $(INSTALLDIR)/dongle/bin/hello.bin.trx
1345endif	# BUILD_BCMDL
1346
1347bridge:
1348ifneq (2_4,$(LINUX_VERSION))
1349	+$(MAKE) -C bridge-1.x
1350else
1351	+$(MAKE) -C bridge brctl/brctl
1352endif
1353
1354dongle :
1355
1356bridge-install:
1357ifneq (2_4,$(LINUX_VERSION))
1358	install -D bridge-1.x/brctl/brctl $(INSTALLDIR)/bridge/usr/sbin/brctl
1359else
1360	install -D bridge/brctl/brctl $(INSTALLDIR)/bridge/usr/sbin/brctl
1361endif
1362	$(STRIP) $(INSTALLDIR)/bridge/usr/sbin/brctl
1363
1364bridge-clean:
1365ifneq (2_4,$(LINUX_VERSION))
1366	-$(MAKE) -C bridge-1.x clean
1367else
1368	-$(MAKE) -C bridge clean
1369endif
1370
1371ifeq ($(call wlan_version_ge,$(BCM_KVERSIONSTRING),2.6.36),TRUE)
1372dnsmasq:
1373	+$(MAKE) -C $(DNSMASQ_DIR)
1374
1375dnsmasq-install:
1376	install -D $(DNSMASQ_DIR)/src/dnsmasq $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
1377	$(STRIP) $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
1378else
1379dnsmasq-install:
1380	install -D dnsmasq/dnsmasq $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
1381	$(STRIP) $(INSTALLDIR)/dnsmasq/usr/sbin/dnsmasq
1382endif
1383
1384libstdcpp:
1385	# So that generic rule does not take precedence
1386	@:
1387
1388libstdcpp-install:
1389	install -D $(TOOLCHAIN)/usr/lib/libstdc++.so.6.0.14 $(INSTALLDIR)/libstdcpp/usr/lib/libstdc++.so.6.0.14
1390	+ldconfig -N -n -r $(INSTALLDIR)/libstdcpp usr/lib
1391	+$(STRIP) $(INSTALLDIR)/libstdcpp/usr/lib/libstdc++.so.6.0.14
1392
1393libmnl:
1394	[ -f $(LIBMNL_DIR)/Makefile ] || \
1395	(cd $(LIBMNL_DIR); \
1396	 CC=$(CC) ./configure \
1397	    --target=$(PLATFORM)-linux \
1398	    --host=$(PLATFORM)-linux \
1399	    --build=`/bin/arch`-linux \
1400	    --with-kernel=$(LINUXDIR) \
1401	    --prefix=$(LIBMNL_DIR)/install)
1402	+$(MAKE) -C $(LIBMNL_DIR)
1403	+$(MAKE) -C $(LIBMNL_DIR) install-strip
1404
1405libmnl-install:
1406	install -d $(INSTALLDIR)/libmnl/usr/lib
1407	cp -rf $(LIBMNL_DIR)/install/lib/* $(INSTALLDIR)/libmnl/usr/lib
1408
1409libmnl-clean:
1410	+$(MAKE) -C $(LIBMNL_DIR) KERNEL_DIR=$(LINUXDIR) clean
1411
1412libnfnetlink:
1413	[ -f $(LIBNFNETLINK_DIR)/Makefile ] || \
1414	(cd $(LIBNFNETLINK_DIR); \
1415	 CC=$(CC) ./configure \
1416	    --target=$(PLATFORM)-linux \
1417	    --host=$(PLATFORM)-linux \
1418	    --build=`/bin/arch`-linux \
1419	    --with-kernel=$(LINUXDIR) \
1420	    --prefix=$(LIBNFNETLINK_DIR)/install)
1421	+$(MAKE) -C $(LIBNFNETLINK_DIR)
1422	+$(MAKE) -C $(LIBNFNETLINK_DIR) install-strip
1423
1424libnfnetlink-install:
1425	install -d $(INSTALLDIR)/libnfnetlink/usr/lib
1426	cp -rf $(LIBNFNETLINK_DIR)/install/lib/* $(INSTALLDIR)/libnfnetlink/usr/lib
1427
1428libnfnetlink-clean:
1429	+$(MAKE) -C $(LIBNFNETLINK_DIR) KERNEL_DIR=$(LINUXDIR) clean
1430
1431libnetfilter_conntrack: libmnl libnfnetlink
1432	[ -f $(LIBNETFILTER_CONNTRACK_DIR)/Makefile ] || \
1433	(cd $(LIBNETFILTER_CONNTRACK_DIR); \
1434	 CC=$(CC) ./configure \
1435	    --target=$(PLATFORM)-linux \
1436	    --host=$(PLATFORM)-linux \
1437	    --build=`/bin/arch`-linux \
1438	    --with-kernel=$(LINUXDIR) \
1439	    --prefix=$(LIBNETFILTER_CONNTRACK_DIR)/install \
1440        LIBNFNETLINK_CFLAGS=$(NFNETLINK_CFLAGS) LIBNFNETLINK_LIBS=$(NFNETLINK_LIBS) \
1441        LIBMNL_CFLAGS=$(MNL_CFLAGS) LIBMNL_LIBS=$(MNL_LIBS))
1442	+$(MAKE) -C $(LIBNETFILTER_CONNTRACK_DIR)
1443	+$(MAKE) -C $(LIBNETFILTER_CONNTRACK_DIR) install-strip
1444
1445libnetfilter_conntrack-install:
1446	install -d $(INSTALLDIR)/libnetfilter_conntrack/usr/lib
1447	cp -rf $(LIBNETFILTER_CONNTRACK_DIR)/install/lib/* $(INSTALLDIR)/libnetfilter_conntrack/usr/lib
1448
1449libnetfilter_conntrack-clean:
1450	+$(MAKE) -C $(LIBNETFILTER_CONNTRACK_DIR) KERNEL_DIR=$(LINUXDIR) clean
1451
1452libnetfilter_queue: libmnl libnfnetlink
1453	[ -f $(LIBNETFILTER_QUEUE_DIR)/Makefile ] || \
1454	(cd $(LIBNETFILTER_QUEUE_DIR); \
1455	 CC=$(CC) ./configure \
1456	    --target=$(PLATFORM)-linux \
1457	    --host=$(PLATFORM)-linux \
1458	    --build=`/bin/arch`-linux \
1459	    --with-kernel=$(LINUXDIR) \
1460	    --prefix=$(LIBNETFILTER_QUEUE_DIR)/install \
1461        LIBNFNETLINK_CFLAGS=$(NFNETLINK_CFLAGS) LIBNFNETLINK_LIBS=$(NFNETLINK_LIBS) \
1462        LIBMNL_CFLAGS=$(MNL_CFLAGS) LIBMNL_LIBS=$(MNL_LIBS))
1463	+$(MAKE) -C $(LIBNETFILTER_QUEUE_DIR)
1464	+$(MAKE) -C $(LIBNETFILTER_QUEUE_DIR) install-strip
1465
1466libnetfilter_queue-install:
1467	install -d $(INSTALLDIR)/libnetfilter_queue/usr/lib
1468	cp -rf $(LIBNETFILTER_QUEUE_DIR)/install/lib/* $(INSTALLDIR)/libnetfilter_queue/usr/lib
1469
1470libnetfilter_queue-clean:
1471	+$(MAKE) -C $(LIBNETFILTER_QUEUE_DIR) KERNEL_DIR=$(LINUXDIR) clean
1472
1473LIBFLOW_DIR := $(BASEDIR)/components/shared/libflow
1474
1475libflow: libnetfilter_conntrack
1476	$(MAKE) -C $(LIBFLOW_DIR) LIBMNL_CFLAGS=$(MNL_CFLAGS) LIBMNL_LIBS=$(MNL_LIBS) LIBNFNETLINK_CFLAGS=$(NFNETLINK_CFLAGS) LIBNFNETLINK_LIBS=$(NFNETLINK_LIBS) LIBNETFILTER_CONNTRACK_CFLAGS=$(NETFILTER_CONNTRACK_CFLAGS) LIBNETFILTER_CONNTRACK_LIBS=$(NETFILTER_CONNTRACK_LIBS)
1477
1478libflow-install:
1479	install -d $(INSTALLDIR)/libflow/usr/lib
1480	install -D $(LIBFLOW_DIR)/libflow.so $(INSTALLDIR)/libflow/usr/lib
1481	$(STRIP) $(INSTALLDIR)/libflow/usr/lib/libflow.so
1482
1483libflow-clean:
1484	$(MAKE) -C $(LIBFLOW_DIR) clean
1485
1486libsqlite3:
1487ifeq ($(CONFIG_VISUALIZATION),y)
1488	[ -f $(LIBSQLITE3_DIR)/Makefile ] || \
1489	(cd $(LIBSQLITE3_DIR); \
1490	 CC=$(CC) ./configure \
1491            --target=$(PLATFORM)-linux \
1492            --host=$(PLATFORM)-linux \
1493            --enable-static=no \
1494            --prefix=$(LIBSQLITE3_DIR)/installbin)
1495	+$(MAKE) -C $(LIBSQLITE3_DIR)
1496	+$(MAKE) -C $(LIBSQLITE3_DIR) install-strip
1497endif
1498
1499libsqlite3-install:
1500ifeq ($(CONFIG_VISUALIZATION),y)
1501	install -d $(INSTALLDIR)/libsqlite3/usr/lib
1502	cp -rf $(LIBSQLITE3_DIR)/installbin/lib/libsqlite3.so* $(INSTALLDIR)/libsqlite3/usr/lib
1503endif
1504
1505libsqlite3-clean:
1506ifeq ($(CONFIG_VISUALIZATION),y)
1507	+$(MAKE) -C $(LIBSQLITE3_DIR) clean
1508endif
1509
1510libjsonc:
1511	[ -f $(LIBJSONC_DIR)/Makefile ] || \
1512        (cd $(LIBJSONC_DIR); \
1513         CC=$(CC) ./configure \
1514            --target=$(PLATFORM)-linux \
1515            --host=$(PLATFORM)-linux \
1516            --disable-oldname-compat \
1517            --enable-static=no \
1518            --prefix=$(LIBJSONC_DIR)/installbin)
1519	+$(MAKE) -C $(LIBJSONC_DIR)
1520	+$(MAKE) -C $(LIBJSONC_DIR) install-strip
1521
1522libjsonc-install:
1523	install -d $(INSTALLDIR)/libjsonc/usr/lib
1524	cp -rf $(LIBJSONC_DIR)/installbin/lib/libjson-c.so* $(INSTALLDIR)/libjsonc/usr/lib
1525
1526libjsonc-clean:
1527	+$(MAKE) -C $(LIBJSONC_DIR) clean
1528
1529libxml2:
1530ifeq ($(CONFIG_VISUALIZATION),y)
1531	[ -f $(LIBXML2_DIR)/Makefile ] || \
1532        (cd $(LIBXML2_DIR); \
1533         CC=$(CC) ./configure \
1534            --target=$(PLATFORM)-linux \
1535            --host=$(PLATFORM)-linux \
1536            --with-python=no \
1537            --without-zlib \
1538            --without-ftp \
1539            --without-http \
1540            --without-html \
1541            --without-debug \
1542            --without-docbook \
1543            --without-catalog \
1544            --without-schemas \
1545            --enable-static=no \
1546            --prefix=$(LIBXML2_DIR)/installbin)
1547	+$(MAKE) -C $(LIBXML2_DIR)
1548	+$(MAKE) -C $(LIBXML2_DIR) install-strip
1549endif
1550
1551libxml2-install:
1552ifeq ($(CONFIG_VISUALIZATION),y)
1553	install -d $(INSTALLDIR)/libxml2/usr/lib
1554	cp -rf $(LIBXML2_DIR)/installbin/lib/libxml2.so* $(INSTALLDIR)/libxml2/usr/lib
1555endif
1556
1557libxml2-clean:
1558ifeq ($(CONFIG_VISUALIZATION),y)
1559	+$(MAKE) -C $(LIBXML2_DIR) clean
1560endif
1561
1562visdcoll:
1563ifeq ($(CONFIG_VISUALIZATION),y)
1564	[ -f $(VISDCOLL_DIR)/Makefile ] || \
1565        (cd $(VISDCOLL_DIR); \
1566         CC=$(CC) ./configure \
1567            --target=$(PLATFORM)-linux \
1568            --host=$(PLATFORM)-linux \
1569            --prefix=$(VISDCOLL_DIR)/installbin)
1570	+$(MAKE) -C $(VISDCOLL_DIR)
1571	+$(MAKE) -C $(VISDCOLL_DIR) install-strip
1572endif
1573
1574visdcoll-install:
1575ifeq ($(CONFIG_VISUALIZATION),y)
1576	install -d $(INSTALLDIR)/visdcoll/usr/sbin
1577	cp -rf $(VISDCOLL_DIR)/installbin/bin/* $(INSTALLDIR)/visdcoll/usr/sbin
1578endif
1579
1580visdcoll-clean:
1581ifeq ($(CONFIG_VISUALIZATION),y)
1582	+$(MAKE) -C $(VISDCOLL_DIR) clean
1583endif
1584
1585visdcon:
1586ifeq ($(CONFIG_VISUALIZATION),y)
1587	[ -f $(VISDCON_DIR)/Makefile ] || \
1588        (cd $(VISDCON_DIR); \
1589         CC=$(CC) ./configure \
1590            --target=$(PLATFORM)-linux \
1591            --host=$(PLATFORM)-linux \
1592            --prefix=$(VISDCON_DIR)/installbin)
1593	+$(MAKE) -C $(VISDCON_DIR)
1594	+$(MAKE) -C $(VISDCON_DIR) install-strip
1595endif
1596
1597visdcon-install:
1598ifeq ($(CONFIG_VISUALIZATION),y)
1599	install -d $(INSTALLDIR)/visdcon/usr/sbin
1600	cp -rf $(VISDCON_DIR)/installbin/bin/* $(INSTALLDIR)/visdcon/usr/sbin
1601endif
1602
1603visdcon-clean:
1604ifeq ($(CONFIG_VISUALIZATION),y)
1605	+$(MAKE) -C $(VISDCON_DIR) clean
1606endif
1607
1608ifeq ($(CONFIG_LIBNFNETLINK),y)
1609# iptables will try to link with netfilter's libs if enabled.
1610IPTABLES_DEPS := libnfnetlink
1611endif
1612
1613ifeq ($(CONFIG_IPV6),y)
1614DOIPV6=1
1615else
1616DOIPV6=0
1617endif
1618
1619ifeq (2_6_36,$(LINUX_VERSION))
1620iptables: $(IPTABLES_DEPS)
1621	+$(MAKE) -C iptables-1.4.12 BINDIR=/usr/sbin LIBDIR=/usr/lib \
1622	    KERNEL_DIR=$(LINUXDIR)
1623
1624iptables-install:
1625ifeq ($(CONFIG_IPTABLES),y)
1626	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
1627	install iptables-1.4.12/src/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
1628	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
1629	install -d $(INSTALLDIR)/iptables/usr/sbin
1630	cp -rf iptables-1.4.12/src/install/sbin/* $(INSTALLDIR)/iptables/usr/sbin
1631	install -d $(INSTALLDIR)/iptables/usr/lib
1632	cp -rf iptables-1.4.12/src/install/lib/* $(INSTALLDIR)/iptables/usr/lib
1633else
1634	# So that generic rule does not take precedence
1635	@true
1636endif
1637iptables-clean:
1638	-$(MAKE) -C iptables-1.4.12 KERNEL_DIR=$(LINUXDIR) clean
1639
1640else ifeq (2_6,$(LINUX_VERSION))
1641iptables:
1642	+$(MAKE) -C iptables-1.x BINDIR=/usr/sbin LIBDIR=/usr/lib \
1643	    KERNEL_DIR=$(LINUXDIR) DO_IPV6=$(DOIPV6)
1644
1645iptables-install:
1646ifeq ($(CONFIG_IPTABLES),y)
1647	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
1648	install iptables-1.x/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
1649	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
1650	install -D iptables-1.x/iptables $(INSTALLDIR)/iptables/usr/sbin/iptables
1651	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables
1652	install -D iptables-1.x/iptables-restore $(INSTALLDIR)/iptables/usr/sbin/iptables-restore # BCMQOS
1653	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables-restore # BCMQOS
1654else
1655	# So that generic rule does not take precedence
1656	@true
1657endif
1658iptables-clean:
1659	-$(MAKE) -C iptables-1.x KERNEL_DIR=$(LINUXDIR) DO_IPV6=$(DOIPV6) clean
1660else # linux-2.6
1661iptables:
1662	+$(MAKE) -C iptables BINDIR=/usr/sbin LIBDIR=/usr/lib \
1663	    KERNEL_DIR=$(LINUXDIR)
1664#DO_IPV6=1
1665
1666iptables-install:
1667ifeq ($(CONFIG_IPTABLES),y)
1668	install -d $(INSTALLDIR)/iptables/usr/lib/iptables
1669	install iptables/extensions/*.so $(INSTALLDIR)/iptables/usr/lib/iptables
1670	$(STRIP) $(INSTALLDIR)/iptables/usr/lib/iptables/*.so
1671	install -D iptables/iptables $(INSTALLDIR)/iptables/usr/sbin/iptables
1672	$(STRIP) $(INSTALLDIR)/iptables/usr/sbin/iptables
1673else
1674	# So that generic rule does not take precedence
1675	@true
1676endif
1677iptables-clean:
1678	-$(MAKE) -C iptables KERNEL_DIR=$(LINUXDIR) DO_IPV6=$(DOIPV6) clean
1679
1680endif # linux-2.6
1681
1682nas: nvram shared
1683
1684netconf: iptables
1685ifeq ($(CONFIG_NETCONF),y)
1686	+$(MAKE) LINUXDIR=$(LINUXDIR) -C netconf
1687
1688else
1689	# In case of "Prerequisite 'iptables' is newer than target 'netconf'"
1690	@true
1691endif
1692
1693ntpclient-install:
1694	install -D ntpclient/ntpclient $(INSTALLDIR)/ntpclient/usr/sbin/ntpclient
1695	$(STRIP) $(INSTALLDIR)/ntpclient/usr/sbin/ntpclient
1696
1697ppp :
1698	+$(MAKE) -C ppp/pppoecd $* INSTALLDIR=$(INSTALLDIR)/ppp
1699
1700ppp-install:
1701	+$(MAKE) -C ppp/pppoecd install INSTALLDIR=$(INSTALLDIR)/ppp
1702
1703ppp-clean:
1704	+$(MAKE) -C ppp/pppoecd clean INSTALLDIR=$(INSTALLDIR)/ppp
1705
1706udhcpd-install:
1707	install -D udhcpd/udhcpd $(INSTALLDIR)/udhcpd/usr/sbin/udhcpd
1708	$(STRIP) $(INSTALLDIR)/udhcpd/usr/sbin/udhcpd
1709	cd $(INSTALLDIR)/udhcpd/usr/sbin && ln -sf udhcpd udhcpc
1710
1711wlconf: nvram shared
1712
1713vlan:
1714	+$(MAKE) -C vlan CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
1715
1716vlan-install:
1717	+$(MAKE) install -C vlan \
1718	    CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP) INSTALLDIR=$(INSTALLDIR)
1719
1720vlan-clean:
1721	$(MAKE) -C vlan clean
1722
1723buzzz:
1724	+$(MAKE) -C buzzz CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)
1725
1726buzzz-install:
1727	install -d $(TARGETDIR)
1728	+$(MAKE) -C buzzz CROSS=$(CROSS_COMPILE) STRIPTOOL=$(STRIP)  INSTALLDIR=$(INSTALLDIR) install
1729
1730buzzz-clean:
1731	$(MAKE) -C buzzz clean
1732
1733emf:
1734	+$(MAKE) -C emf/emfconf CROSS=$(CROSS_COMPILE)
1735
1736emf-install:
1737ifeq ($(CONFIG_EMF),y)
1738	install -d $(TARGETDIR)
1739	+$(MAKE) install -C emf/emfconf \
1740	    CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR)
1741
1742endif
1743
1744emf-clean:
1745	$(MAKE) -C emf/emfconf clean
1746
1747igs:
1748	+$(MAKE) -C emf/igsconf CROSS=$(CROSS_COMPILE)
1749
1750igs-install:
1751ifeq ($(CONFIG_EMF),y)
1752	install -d $(TARGETDIR)
1753	+$(MAKE) -C emf/igsconf CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
1754
1755endif
1756
1757igs-clean:
1758	$(MAKE) -C emf/igsconf clean
1759
1760igmp:
1761	$(MAKE) -C igmp CROSS=$(CROSS_COMPILE)
1762
1763igmp-install:
1764ifeq ($(CONFIG_IGMP_PROXY),y)
1765	install -d $(TARGETDIR)
1766	+$(MAKE) -C igmp CROSS=$(CROSS_COMPILE) INSTALLDIR=$(INSTALLDIR) install
1767endif
1768
1769igmp-clean:
1770	$(MAKE) -C igmp clean
1771
1772wps: nvram shared
1773ifneq (,$(and $(filter y,$(CONFIG_WPS)),$(wildcard wps/Makefile)))
1774	+$(MAKE) -C wps EXTRA_LDFLAGS=$(EXTRA_LDFLAGS)
1775
1776else
1777	# Prevent to use generic rules"
1778	@true
1779endif
1780
1781wps-install:
1782ifeq ($(CONFIG_WPS),y)
1783	+$(if $(wildcard wps/Makefile), \
1784	    $(MAKE) -C wps INSTALLDIR=$(INSTALLDIR) EXTRA_LDFLAGS=$(EXTRA_LDFLAGS) install \
1785	   , \
1786	    @true \
1787	  )
1788else
1789	# Prevent to use generic rules"
1790	@true
1791endif
1792
1793wps-clean:
1794ifeq ($(CONFIG_WPS),y)
1795	[ ! -f wps/Makefile ] || $(MAKE) -C wps clean
1796else
1797	# Prevent to use generic rules"
1798	@true
1799endif
1800
1801# NFC
1802nfc:
1803ifneq (,$(and $(filter y,$(CONFIG_NFC)),$(wildcard nfc/Makefile)))
1804	+$(MAKE) -C nfc EXTRA_LDFLAGS=$(EXTRA_LDFLAGS)
1805else
1806	# Prevent to use generic rules"
1807	@true
1808endif
1809
1810nfc-install:
1811ifeq ($(CONFIG_NFC),y)
1812	+$(if $(wildcard nfc/Makefile), \
1813	    $(MAKE) -C nfc INSTALLDIR=$(INSTALLDIR) EXTRA_LDFLAGS=$(EXTRA_LDFLAGS) install \
1814	   , \
1815	    @true \
1816	  )
1817else
1818	# Prevent to use generic rules"
1819	@true
1820endif
1821
1822nfc-clean:
1823ifeq ($(CONFIG_NFC),y)
1824	[ ! -f nfc/Makefile ] || $(MAKE) -C nfc clean
1825else
1826	# Prevent to use generic rules"
1827	@true
1828endif
1829
1830ifneq (2_4,$(LINUX_VERSION))
1831udev:
1832	+$(MAKE) -C udev CROSS_COMPILE=$(CROSS_COMPILE)
1833
1834udev-install:
1835	install -d $(TARGETDIR)
1836	+$(MAKE) install-udevtrigger -C udev \
1837	    CROSS_COMPILE=$(CROSS_COMPILE) DESTDIR=$(INSTALLDIR) prefix=/udev
1838
1839udev-clean:
1840	$(MAKE) -C udev clean
1841
1842hotplug2:
1843	+$(MAKE) -C hotplug2 CROSS_COMPILE=$(CROSS_COMPILE)
1844
1845hotplug2-install:
1846	install -d $(TARGETDIR)
1847	install -d $(INSTALLDIR)/hotplug2
1848	+$(MAKE) install -C hotplug2 \
1849	    CROSS_COMPILE=$(CROSS_COMPILE) PREFIX=$(INSTALLDIR)
1850
1851hotplug2-clean:
1852	$(MAKE) -C hotplug2 clean
1853endif
1854
1855
1856IPROUTE2_SUBDIRS := lib
1857
1858ifeq (2_4,$(LINUX_VERSION))
1859UCLIBC_IPV6=$(TOP)/lib/mipsel-uclibc/libc.so.0
1860ifeq ($(CONFIG_IPROUTE2),y)
1861IPROUTE2_SUBDIRS += ip
1862endif
1863endif
1864
1865ifeq ($(CONFIG_BCMQOS),y)
1866IPROUTE2_SUBDIRS += tc
1867endif
1868
1869radvd/Makefile: radvd/configure radvd/Makefile.in
1870	[ ! -d $(@D) ] || (cd $(@D) && CC=$(CC) ./configure --host=$(PLT)-linux)
1871
1872.PHONY: radvd
1873radvd: radvd/Makefile flex dummy
1874	+$(if $(wildcard $@/),$(MAKE) -C radvd CC=${CC} radvd_LDADD="-L../flex -lfl",@true)
1875
1876.PHONY: radvd-install
1877radvd-install:
1878	[ ! -d radvd ] || install -D -m 755 radvd/radvd $(INSTALLDIR)/radvd/usr/sbin/radvd
1879	[ ! -d radvd ] || $(STRIP) $(INSTALLDIR)/radvd/usr/sbin/radvd
1880
1881.PHONY: radvd-clean
1882radvd-clean:
1883	[ ! -f radvd/Makefile ] || $(MAKE) -C radvd distclean
1884
1885flex/Makefile: flex/configure flex/Makefile.in
1886	[ ! -d $(@D) ] || (cd $(@D) && CC=$(CC) ./configure --host=$(PLT)-linux)
1887
1888.PHONY: flex
1889flex: flex/Makefile dummy
1890	+$(if $(wildcard $@/),$(MAKE) libfl.a -C $@ CC=${CC} RANLIB=${RANLIB},@true)
1891
1892iproute2:
1893ifneq ($(LINUX_VERSION),2_6_36)
1894	+$(if $(wildcard $@/), \
1895	    $(MAKE) -C $@ KERNEL_INCLUDE=$(LINUXDIR)/include CC=$(CC) \
1896	         AR=$(AR) SUBDIRS="$(IPROUTE2_SUBDIRS)" LDLIBS="$(UCLIBC_IPV6)" \
1897	   , \
1898	    @true \
1899	  )
1900else
1901	+$(if $(wildcard $(IPROUTE2_DIR)/), \
1902	    $(MAKE) -C $(IPROUTE2_DIR) KERNEL_INCLUDE=$(LINUXDIR)/include CC=$(CC) \
1903	         AR=$(AR) SUBDIRS="$(IPROUTE2_SUBDIRS)" LDLIBS="$(UCLIBC_IPV6)" \
1904	   , \
1905	    @true \
1906	  )
1907
1908endif
1909
1910iproute2-clean:
1911	[ ! -d $(IPROUTE2_DIR) ] || $(MAKE) -C $(IPROUTE2_DIR) clean
1912
1913iproute2-install:
1914ifeq ($(CONFIG_BCMQOS),y)
1915	[ ! -d $(IPROUTE2_DIR) ] || install -D -m 755 $(IPROUTE2_DIR)/tc/tc $(INSTALLDIR)/iproute2/usr/sbin/tc
1916	[ ! -d $(IPROUTE2_DIR) ] || $(STRIP) $(INSTALLDIR)/iproute2/usr/sbin/tc
1917endif
1918ifeq ($(CONFIG_IPROUTE2),y)
1919	[ ! -d $(IPROUTE2_DIR) ] || install -D -m 755 $(IPROUTE2_DIR)/ip/ip $(INSTALLDIR)/iproute2/usr/sbin/ip
1920	[ ! -d $(IPROUTE2_DIR) ] || $(STRIP) $(INSTALLDIR)/iproute2/usr/sbin/ip
1921endif
1922
1923iputils:
1924ifneq ($(LINUX_VERSION),2_6_36)
1925	[ ! -d $@ ] || [ -f $@/include-glibc/bits/socket.h ] || ( \
1926	    cd $@/include-glibc/bits && ln -s ../socketbits.h socket.h \
1927	)
1928endif
1929	+$(if $(wildcard $(IPUTILS_DIR)), \
1930	    $(MAKE) -C $(IPUTILS_DIR) KERNEL_INCLUDE=$(LINUXDIR)/include \
1931	    LINUX_VERSION=$(LINUX_VERSION) CC=$(CC) LDLIBS= \
1932	   , \
1933	    @true \
1934	  )
1935
1936iputils-clean:
1937	[ ! -d $(IPUTILS_DIR) ] || $(MAKE) -C $(IPUTILS_DIR) clean
1938
1939iputils-install:
1940	[ ! -d $(IPUTILS_DIR) ] || install -D -m 755 $(IPUTILS_DIR)/ping6 $(INSTALLDIR)/iputils/usr/sbin/ping6
1941	[ ! -d $(IPUTILS_DIR) ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/ping6
1942	[ ! -d $(IPUTILS_DIR) ] || install -D -m 755 $(IPUTILS_DIR)/traceroute6 $(INSTALLDIR)/iputils/usr/sbin/traceroute6
1943	[ ! -d $(IPUTILS_DIR) ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/traceroute6
1944	[ ! -d $(IPUTILS_DIR) ] || install -D -m 755 $(IPUTILS_DIR)/tracepath6 $(INSTALLDIR)/iputils/usr/sbin/tracepath6
1945	[ ! -d $(IPUTILS_DIR) ] || $(STRIP) $(INSTALLDIR)/iputils/usr/sbin/tracepath6
1946
1947dhcp6: dummy
1948#dhcp6s dhcp6c: dummy
1949	[ ! -d dhcp6 ] || [ -f dhcp6/Makefile ] || ( \
1950	    cd dhcp6 && ./configure CC=gcc CFLAGS+="-I../shared" \
1951	)
1952ifeq ($(CONFIG_UCLIBC),y)
1953	+$(if $(wildcard dhcp6/), \
1954	    $(MAKE) dhcp6s dhcp6c -C dhcp6 CC=$(CC) LIBS="$(UCLIBC_IPV6)" \
1955	   , \
1956	    @true \
1957	  )
1958else
1959	+$(if $(wildcard dhcp6/), \
1960	    $(MAKE) dhcp6s dhcp6c -C dhcp6 CC=$(CC) \
1961	        LIBS="-lresolv -L../libbcmcrypto -lbcmcrypto \
1962	              -L$(INSTALLDIR)/libbcmcrypto/usr/lib" \
1963	   , \
1964	    @true \
1965	  )
1966endif
1967
1968dhcp6-install: $(if $(filter y,${CONFIG_DHCPV6S}),dhcp6s-install) \
1969               $(if $(filter y,${CONFIG_DHCPV6C}),dhcp6c-install)
1970	@true # Keep this rule from falling through to generic and failing.
1971
1972dhcp6s-install: dhcp6
1973	[ ! -d dhcp6 ] || install -D -m 755 dhcp6/dhcp6s $(INSTALLDIR)/dhcp6s/usr/sbin/dhcp6s
1974	[ ! -d dhcp6 ] || $(STRIP) $(INSTALLDIR)/dhcp6s/usr/sbin/dhcp6s
1975
1976dhcp6c-install: dhcp6
1977	[ ! -d dhcp6 ] || install -D -m 755 dhcp6/dhcp6c $(INSTALLDIR)/dhcp6c/usr/sbin/dhcp6c
1978	[ ! -d dhcp6 ] || $(STRIP) $(INSTALLDIR)/dhcp6c/usr/sbin/dhcp6c
1979
1980dhcp6s-clean dhcp6c-clean:
1981#dhcp6s-clean dhcp6c-clean:
1982dhcp6-clean:
1983
1984SRC_WL = ../../../wl-exe/wl/src/wl/exe
1985
1986.PHONY: wlexe
1987wlexe:
1988ifeq ($(CONFIG_WLEXE),y)
1989ifneq ($(wildcard $(SRCBASE_SYS)/wl/exe/GNUmakefile),)
1990ifeq ($(ARCH),arm)
1991	$(MAKE) TARGETARCH=arm_le ARCH_SFX="" TARGET_PREFIX=$(CROSS_COMPILE) -C $(SRC_WL)
1992else
1993	$(MAKE) TARGETARCH=mips ARCH_SFX="" TARGET_PREFIX=$(CROSS_COMPILE) -C $(SRCBASE_SYS)/wl/exe
1994endif
1995	[ -d wlexe ] || install -d wlexe
1996	install $(SRC_WL)/wl wlexe
1997ifeq ($(ARCH),arm)
1998	install $(SRC_WL)/socket_noasd/arm_le/wl_server_socket wlexe
1999else
2000	install $(SRC_WL)/socket_noasd/mips/wl_server_socket wlexe
2001endif
2002endif
2003endif
2004
2005.PHONY: wlexe-clean
2006wlexe-clean:
2007ifneq ($(wildcard $(SRC_WL)/GNUmakefile),)
2008	$(MAKE) TARGET_PREFIX=$(CROSS_COMPILE) -C $(SRC_WL) clean
2009	$(RM) wlexe/wl
2010	$(RM) wlexe/wl_server_socket
2011endif
2012
2013.PHONY: wlexe-install
2014wlexe-install:
2015ifeq ($(CONFIG_WLEXE),y)
2016ifneq ($(wildcard $(SRC_WL)/GNUmakefile),)
2017	[ ! -d wlexe ] || install -D -m 755 wlexe/wl $(INSTALLDIR)/wlexe/usr/sbin/wl
2018	[ ! -d wlexe ] || install -D -m 755 wlexe/wl_server_socket $(INSTALLDIR)/wlexe/usr/sbin/wl_server_socket
2019	[ ! -d wlexe ] || $(STRIP) $(INSTALLDIR)/wlexe/usr/sbin/wl
2020	[ ! -d wlexe ] || $(STRIP) $(INSTALLDIR)/wlexe/usr/sbin/wl_server_socket
2021endif
2022endif
2023
2024#
2025# Generic rules
2026#
2027
2028%:
2029	+$(if $(wildcard $*/),$(MAKE) -C $* EXTRA_LDFLAGS=$(EXTRA_LDFLAGS) ARCH=$(ARCH),@true)
2030
2031%-clean:
2032	[ ! -d $* ] || $(MAKE) -C $* clean
2033
2034%-install:
2035	+$(if $(wildcard $*/), \
2036	  $(MAKE) -C $* install INSTALLDIR=$(INSTALLDIR)/$*, \
2037	  @true \
2038	 )
2039
2040$(obj-y) $(obj-n) $(obj-clean) $(obj-install): dummy
2041
2042.PHONY: all clean distclean mrproper install package check_kernel_config
2043.PHONY: conf mconf oldconf kconf kmconf config menuconfig oldconfig
2044.PHONY: dummy netconf
2045.PHONY: libstdcpp libstdcpp-install
2046.PHONY: libmnl libmnl-install libmnl-clean
2047.PHONY: libnfnetlink libnfnetlink-install libnfnetlink-clean
2048.PHONY: libnetfilter_conntrack libnetfilter_conntrack-install libnetfilter_conntrack-clean
2049.PHONY: libnetfilter_queue libnetfilter_queue-install libnetfilter_queue-clean
2050.PHONY: libflow libflow-install libflow-clean
2051ifeq ($(CONFIG_VISUALIZATION),y)
2052.PHONY: libsqlite3 libsqlite3-install libsqlite3-clean
2053.PHONY: libjsonc libjsonc-install libjsonc-clean
2054.PHONY: libxml2 libxml2-install libxml2-clean
2055.PHONY: visdcoll visdcoll-install visdcoll-clean
2056.PHONY: visdcon visdcon-install visdcon-clean
2057endif
2058