include .config
export DAEMON_ALPHA :=1
export ENV_PATH := $(ENV_PATH)
export LOADER := $(LOADER)
export PLATFORM := $(PLATFORM)
export AP_TYPE := $(AP_TYPE)
export HARDWARE_ID := $(HARDWARE_ID)
export APPS_CROSS := $(APPS_CROSS)
export KRL_CROSS := $(KRL_CROSS)
export WL_CROSS := $(WL_CROSS)
export APPS_CFLAG := $(APPS_CFLAG)
export KRL_CFLAG := $(KRL_CFLAG)
export WL_CFLAG := $(WL_CFLAG)
export CONFIG_MODEL_NAME := $(CONFIG_MODEL_NAME)
export CROSS_COMPILE = $(APPS_CROSS)
export CFLAGS := $(APPS_CFLAG)
export CC := $(CROSS_COMPILE)gcc
export CXX := $(CROSS_COMPILE)g++
export AR := $(CROSS_COMPILE)ar
export AS := $(CROSS_COMPILE)as
export LD := $(CROSS_COMPILE)ld
export NM := $(CROSS_COMPILE)nm
export RANLIB := $(CROSS_COMPILE)ranlib
export STRIP := $(CROSS_COMPILE)strip
export SIZE := $(CROSS_COMPILE)size
export PROJECTS_PATH := $(ENV_PATH)/projects/$(CONFIG_MODEL_NAME)
export PROJECTS_IMAGE_PATH := $(PROJECTS_PATH)/image
export DAEMONS_PATH := $(ENV_PATH)/daemons
export FS_PATH := $(PROJECTS_PATH)/rootfs/target
export PLATFORM_PATH := $(ENV_PATH)/platform/kernel/$(PLATFORM)
export CONFIG_MODEL_NAME_NO_DASH := $(shell perl -w $(PROJECTS_PATH)/tools/split.pl $(CONFIG_MODEL_NAME))
export PROJECT_GPL_CONFIG=$(PROJECTS_PATH)/.config

include $(PROJECTS_PATH)/include/$(PLATFORM).inc
include $(ENV_PATH)/projects/$(CONFIG_MODEL_NAME)/env.mk

export KERNEL_PATH := $(PLATFORM_PATH)/kernels/linux-$(KERNELVER)

export TARGET := $(FS_PATH)
export KERNEL_DIR := $(KERNEL_PATH)
export CONFIG_HTTPD_PURE := $(CONFIG_HTTPD_PURE)
export CONFIG_AJAX := $(CONFIG_AJAX)
export PRJ_CROSS_COMPILE = $(APPS_CROSS)
export PROJECTS_APP_PATH := $(PROJECTS_PATH)/apps
export APPS_PATH := $(DAEMONS_PATH)

CFLAGS += -I$(PROJECTS_PATH)/include -DCONFIG_FIREWALL_NUMBER=$(CONFIG_FIREWALL_NUMBER) -DCONFIG_MAC_FILTER_NUMBER=$(CONFIG_MAC_FILTER_NUMBER) -DCONFIG_APPLICATION_NUMBER=$(CONFIG_APPLICATION_NUMBER) -DCONFIG_PORT_FORWARD_NUMBER=$(CONFIG_PORT_FORWARD_NUMBER) -DCONFIG_VIRTUAL_SERVER_NUMBER=$(CONFIG_VIRTUAL_SERVER_NUMBER) -DCONFIG_URL_FILTER_NUMBER=$(CONFIG_URL_FILTER_NUMBER) -DCONFIG_SCHEDULE_NUMBER=$(CONFIG_SCHEDULE_NUMBER) -DCONFIG_STATIC_ROUTE_NUMBER=$(CONFIG_STATIC_ROUTE_NUMBER) -DCONFIG_BLOCK_SERVICE_NUMBER=$(CONFIG_BLOCK_SERVICE_NUMBER) -DCONFIG_TRUST_IP_NUMBER=$(CONFIG_TRUST_IP_NUMBER) -DCONFIG_DHCPD_RESERVATION_NUMBER=$(CONFIG_DHCPD_RESERVATION_NUMBER) -DCONFIG_MULTIPLE_ROUTING_NUMBER=$(CONFIG_MULTIPLE_ROUTING_NUMBER) -DCONFIG_QOS_NUMBER=$(CONFIG_QOS_NUMBER) -DCONFIG_INBOUND_FILTER_NUMBER=$(CONFIG_INBOUND_FILTER_NUMBER) -DCONFIG_ACCESS_CONTROL_NUMBER=$(CONFIG_ACCESS_CONTROL_NUMBER) -DCONFIG_SRC_MACHINE_NUMBER=$(CONFIG_SRC_MACHINE_NUMBER) -DCONFIG_UPLOAD_TIME=$(CONFIG_UPLOAD_TIME) -DCONFIG_REBOOT_TIME=$(CONFIG_REBOOT_TIME) -DCONFIG_RESTORE_TIME=$(CONFIG_RESTORE_TIME) -DCONFIG_RESET_TIME=$(CONFIG_RESET_TIME) -DCONFIG_UPLOAD_CERTIFICATION_TIME=$(CONFIG_UPLOAD_CERTIFICATION_TIME) -DCONFIG_LAN_IP_CHANGE_REBOOT_TIME=$(CONFIG_LAN_IP_CHANGE_REBOOT_TIME) -DCONFIG_SUPER_G_REBOOT_TIME=$(CONFIG_SUPER_G_REBOOT_TIME) -DCONFIG_UPGRADE_TIME=$(CONFIG_UPGRADE_TIME) -DCONFIG_DHCPD_RESERVATION_NUMBER=20 -DCONFIG_SCHEDULE_NUMBER=10 -I$(KERNEL_PATH)

CFLAGS += -DCONFIG_WL_RTL

ifeq ($(CONFIG_MTD_BLOCK),y)
export MTD_KERNEL_LENGTH := $(CONFIG_MTD_BLOCK_KERNEL_LENGTH)
export MTD_ROOTFS_LENGTH := $(CONFIG_MTD_BLOCK_ROOTFS_LENGTH)
endif
# -------------------------- Project Define Area ---------------------------------

ifeq ($(CONFIG_LIBVERSION),y)
obj-i += libplatform
endif

ifeq ($(CONFIG_NVRAM),y)
obj-i += nvram
endif

ifeq ($(CONFIG_TIMER),y)
obj-p += timer
endif

ifeq ($(CONFIG_GPIO),y)
obj-p += gpio
endif

ifeq ($(CONFIG_SUTIL),y)
ifeq ($(CONFIG_GPL_ENABLE),y)
obj-d-gpl-install += sutil
else
obj-d += sutil
endif
endif

ifeq ($(CONFIG_DLINK_FW_QUERY),y)
obj-p += fw_query
endif

ifeq ($(CONFIG_IP_LOOKUP),y)
ifeq ($(CONFIG_GPL_ENABLE),y)
obj-d-gpl-install += ip_lookup
else
obj-d += ip_lookup
endif
CFLAGS += -DCONFIG_IP_LOOKUP
endif

ifeq ($(CONFIG_RC),y)
obj-p += rc
endif

ifeq ($(CONFIG_RC_DYNAMIC_ROUTE),y)
CFLAGS += -DCONFIG_RC_DYNAMIC_ROUTE
endif

ifeq ($(CONFIG_DLINK_LED),y)
CFLAGS += -DDLINK_ROUTER_LED_DEFINE
endif

ifeq ($(CONFIG_RC_VIRTUAL_SERVER),y)
CFLAGS += -DVIRTUAL_SERVER
endif

ifeq ($(CONFIG_RC_ACCESS_CONTROL),y)
CFLAGS += -DACCESS_CONTROL
endif

ifeq ($(CONFIG_RC_PORT_FORWARD),y)
CFLAGS += -DPORT_FORWARD_BOTH
endif

ifeq ($(CONFIG_RC_INBOUND_FILTER),y)
CFLAGS += -DINBOUND_FILTER
endif

ifeq ($(CONFIG_RC_MAC_FILTER),y)
CFLAGS += -DMAC_FILTER
endif

ifeq ($(CONFIG_RC_APPLICATION_RULE),y)
CFLAGS += -DAPPLICATION_RULE
endif

ifeq ($(CONFIG_RC_SPI),y)
CFLAGS += -DSPI
endif

ifeq ($(CONFIG_DCC),y)
obj-p += dcc
endif

ifeq ($(CONFIG_HTTPD),y)
obj-p += httpd
endif
	
ifeq ($(CONFIG_WAKE_ON_LAN_PROXY),y)
CFLAGS += -DWAKE_ON_LAN_PROXY_SUPPURT
obj-p += wakeOnLanProxy
endif

ifeq ($(CONFIG_TFTPD),y)
obj-p += tftpd
obj-p += mp
endif

ifeq ($(CONFIG_QOS),y)
CFLAGS += -DCONFIG_QOS
ifeq ($(CONFIG_TRACEGW),y)
obj-p += tracegw
ifeq ($(CONFIG_MBANDWIDTH),y)
obj-p += mbandwidth
endif
endif
endif

ifeq ($(CONFIG_SUPPORT_BIND),y)
    CFLAGS += -DSUPPORT_BIND
endif

# Support IPv6 or not
ifeq ($(CONFIG_IPV6_SUPPORT),y)
        CFLAGS +=-DIPv6_SUPPORT
		export CONFIG_IPV6_SUPPORT := $(CONFIG_IPV6_SUPPORT)
	endif

# Support static IPv6 or not
ifeq ($(CONFIG_IPV6_STATIC),y)
	CFLAGS +=-DIPv6_STATIC
	endif

# Support DHCPv6 or not
ifeq ($(CONFIG_IPV6_DHCP),y)	
	CFLAGS +=-DDHCPv6
	endif

# Support IPv6 tunnel or not
	ifeq ($(CONFIG_IPV6_TUNNEL),y)
	CFLAGS +=-DIPV6_TUNNEL
	endif

# Support 6to4 tunnel or not
	ifeq ($(CONFIG_6TO4_TUNNEL),y)
	CFLAGS +=-DSIX_TO4_TUNNEL
	endif

# Support 6in4 tunnel or not
	ifeq ($(CONFIG_6IN4_TUNNEL),y)
	CFLAGS +=-DSIX_IN4_TUNNEL
	endif

# Support 
	ifeq ($(CONFIG_STATELESS_WAN),y)
	CFLAGS += -DIPV6_STATELESS_WAN
	endif

# Support Wifi coexistence
	ifeq ($(CONFIG_REALTEK_WIFI_COEXIS),y)
	CFLAGS += -DWIFI_COEXIS
	endif

# Realtek Fast Path support (pptp/l2tp)
	ifeq ($(CONFIG_REALTEK_FAST_FATH),y)
	CFLAGS += -DREALTEK_FAST_FATH
	CFLAGS += -DCAMEO_PPP_PATCH_FOR_PPTP_CONNECT
	endif
	ifeq ($(CONFIG_REALTEK_FAST_PPTP),y)
        CFLAGS += -DREALTEK_FAST_PPTP
	endif
	ifeq ($(CONFIG_REALTEK_FAST_L2TP),y)
	CFLAGS += -DREALTEK_FAST_L2TP
	endif

# -------------------------- Daemon Define Area  ---------------------------------

ifeq ($(CONFIG_BUSYBOX),y)
obj-d += busybox-1.01
endif

ifeq ($(CONFIG_REALTEK_WIRELESS_TOOL),y)
obj-p += wireless_tools.25
CFLAGS += -DRTK_WSCD_CONFIG
endif

ifeq ($(CONFIG_PPPD),y)
ifeq ($(CONFIG_REALTEK_FAST_FATH),y)
# realtek pppd / ppp client
obj-p += ppp-2.4.2
obj-p += pptp-linux-1.3.1
endif
# pppd / ppp client
obj-d += ppp
	ifeq ($(CONFIG_RP_PPPoE),y)
		obj-d += rp-pppoe
		ifeq ($(CONFIG_PPPOE_RELAY),y)
		export CONFIG_PPPOE_RELAY := $(CONFIG_PPPOE_RELAY)
		CFLAGS += -DPPPOE_RELAY
		endif
	endif
	ifeq ($(CONFIG_PPTP_CLIENT),y)
		obj-d += accel-pptp-0.7.12
	endif
	ifeq ($(CONFIG_L2TP_CLIENT),y)
		obj-p += l2tpd
	endif
endif 

ifeq ($(CONFIG_BIGPOND),y)
	obj-d += bpalogin
endif

ifeq ($(CONFIG_DNSMASQ),y)
obj-d += dnsmasq-2.41
endif 

ifeq ($(CONFIG_DDNS),y)
obj-p += noip2
endif

ifeq ($(CONFIG_UDHCP),y)
obj-d += udhcp
CFLAGS += -DCONFIG_VLAN_ROUTER
endif 

ifeq ($(CONFIG_IPTABLES),y)
obj-d += iptables_2_6
endif

ifeq ($(CONFIG_UPNPD),y)
obj-d += miniupnpd-1.0-RC7
obj-d += uuid
CFLAGS += -DUPNP_ATH_MINIUPNPD_RC -DUUID
endif


ifeq ($(CONFIG_OPENSSL),y)
obj-d += openssl
endif

ifeq ($(CONFIG_NMBD),y)
CFLAGS +=-DCONFIG_NMBD
obj-d += nmbd
endif 

ifeq ($(CONFIG_MFORWARD),y)
obj-d += igmpproxy_rtk_v1.1
ifeq ($(CONFIG_SUPPORT_BIND),y)
    CFLAGS += -DSUPPORT_BIND
endif
endif

ifeq ($(CONFIG_SMTP),y)
obj-d += mail_client
	ifeq ($(CONFIG_MAILOS),y)
	obj-p += Mail-On-Schedule
	endif
endif

ifeq ($(CONFIG_ZEBRA),y)
obj-d += zebra
endif

ifeq ($(IPROUTE2_IP),y)
obj-d += iproute2
endif

ifeq ($(CONFIG_TC),y)
obj-d += iproute2
endif

ifeq ($(CONFIG_LLD2D),y)
obj-d += lld2d
endif

ifeq ($(CONFIG_NTP),y)
obj-d += ntpclient
endif 

# IPv6 Daemons
ifeq ($(CONFIG_RADVD),y)
obj-d += flex radvd
CFLAGS += -DRADVD
endif

ifeq ($(CONFIG_IPV6_DHCP),y)
obj-d += dhcpv6
CFLAGS += -DDHCPv6
endif

ifeq ($(CONFIG_UDHCPD_NETBIOS),y)
        CFLAGS +=-DUDHCPD_NETBIOS
endif

ifeq ($(CONFIG_UDHCPC_UNICAST),y)
        CFLAGS +=-DUDHCPC_UNICAST
endif

ifeq ($(CONFIG_UDHCPD_REVOKE),y)
        CFLAGS +=-DUDHCPD_REVOKE
endif

ifeq ($(CONFIG_UDHCPD_ALWAYS_BROADCAST),y)
        CFLAGS +=-DUDHCPD_ALWAYS_BROADCAST
endif

#
# -------------------------- GUI Define Area  ---------------------------------
#
# Add UI Flag to CMO_UI_FLAG to determine this FLAG will be reserved or  not.
# CMO UI flag format in JS: /*DEF $(FLAG)*/ at head of a line.
# CMO UI flag format in ASP: <!--DEF $(FLAG)-->
CMO_UI_FLAG =

######### WAN TYPE ################
ifeq ($(CONFIG_WWW_POE),y)
CMO_UI_FLAG += CONFIG_POE
endif

ifeq ($(CONFIG_WWW_PPTP),y)
CMO_UI_FLAG += CONFIG_PPTP
endif

ifeq ($(CONFIG_WWW_L2TP),y)
CMO_UI_FLAG += CONFIG_L2TP
endif

ifeq ($(CONFIG_WWW_BIGPOND),y)
CMO_UI_FLAG += CONFIG_BIGPOND
endif

ifeq ($(CONFIG_WWW_RUSPOE),y)
CMO_UI_FLAG += CONFIG_RUSPOE
endif

ifeq ($(CONFIG_WWW_RUSPPTP),y)
CMO_UI_FLAG += CONFIG_RUSPPTP
endif

ifeq ($(CONFIG_WWW_RUSL2TP),y)
CMO_UI_FLAG += CONFIG_RUSL2TP
endif

########### WIRELESS ##############
ifeq ($(CONFIG_WWW_WPS),y)
CMO_UI_FLAG += CONFIG_WPS
endif

############ ADVANCED #############
ifeq ($(CONFIG_WWW_ADVANCED_IPV6),y)
CMO_UI_FLAG += IPV6_SUPPORT
endif

ifeq ($(CONFIG_WWW_ADVANCED_WISH),y)
CMO_UI_FLAG += CONFIG_WISH
endif

ifeq ($(CONFIG_WWW_ADVANCED_QOS),y)
CMO_UI_FLAG += CONFIG_QOS
endif

########### Multiple Languages #####
ifeq ($(CONFIG_M17N_EN),y)
LANG_INSTALL += install_m17n_EN
CMO_UI_FLAG += CONFIG_M17N_EN
endif
ifeq ($(CONFIG_M17N_ZH_TW),y)
LANG_INSTALL += install_m17n_ZH_TW
CMO_UI_FLAG += CONFIG_M17N_ZH_TW
endif
ifeq ($(CONFIG_M17N_CN),y)
LANG_INSTALL += install_m17n_CN
CMO_UI_FLAG += CONFIG_M17N_CN
endif
ifeq ($(CONFIG_M17N_JA),y)
LANG_INSTALL += install_m17n_JA
CMO_UI_FLAG += CONFIG_M17N_JA
endif
ifeq ($(CONFIG_M17N_DE),y)
LANG_INSTALL += install_m17n_DE
CMO_UI_FLAG += CONFIG_M17N_DE
endif
ifeq ($(CONFIG_M17N_ES),y)
LANG_INSTALL += install_m17n_ES
CMO_UI_FLAG += CONFIG_M17N_ES
endif
ifeq ($(CONFIG_M17N_FR),y)
LANG_INSTALL += install_m17n_FR
CMO_UI_FLAG += CONFIG_M17N_FR
endif
ifeq ($(CONFIG_M17N_IT),y)
LANG_INSTALL += install_m17n_IT
CMO_UI_FLAG += CONFIG_M17N_IT
endif
ifeq ($(CONFIG_M17N_KO),y)
LANG_INSTALL += install_m17n_KO
CMO_UI_FLAG += CONFIG_M17N_KO
endif

# CONFIG_WWW must at the back of CONFIG_M17N
ifeq ($(CONFIG_WWW),y)
UI_INSTALL += install-www
LANG_INSTALL += install_www
endif

# ----------------------------------------------------------------------------
all:
	@echo "Not support.Please try anyother command or take a look at README."
	@echo " > make {Model_name}"
	@echo "EX: Model_name --> $(CONFIG_MODEL_NAME)"
$(CONFIG_MODEL_NAME): env kernel library daemons projects rootfs install	
env:
	@echo $(PATH)	
	rm -fr $(PROJECTS_IMAGE_PATH)
	mkdir -p $(PROJECTS_IMAGE_PATH)

install: kernel_install library_install daemons_install projects_install gui_install rootfs_install

clean: daemons_clean kernel_clean library_clean projects_clean rootfs_clean

kernel: fast_path_obj_backup
	@echo ""
	@echo "******* start building kernel for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C ../../platform/kernel/$(PLATFORM)
	@echo ""
	@echo "******* finish building kernel for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	
ifeq ($(CONFIG_GPL_ENABLE),y)	
fast_path_obj_backup:
	cp -r -f ./include/fastpath/* $(KERNEL_PATH)/net/ipv4/fastpath/		
endif		

kernel_clean:
	@echo ""
	@echo "******* start cleaning kernel for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C ../../platform/kernel/$(PLATFORM) clean
	@echo ""
	@echo "******* finish cleaning kernel for $(CONFIG_MODEL_NAME) *******"
	@echo ""

kernel_install:
	@echo ""
	@echo "******* install kernel for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C ../../platform/kernel/$(PLATFORM) install
	@echo ""
	@echo "******* finish install kernel for $(CONFIG_MODEL_NAME) *******"
	@echo ""

loader:
	@echo ""
	@echo "******* start building loader for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	cp -f ./include/bsp.h ../../platform/kernel/$(PLATFORM)/loader/$(LOADER)/boot/httpd/bsp.h
	cp -f ./kernel_patch/start.S ../../platform/kernel/$(PLATFORM)/loader/$(LOADER)/btcode/start.S
	$(MAKE) -C ../../platform/kernel/$(PLATFORM)/loader/$(LOADER)
	cp -f ../../platform/kernel/$(PLATFORM)/loader/$(LOADER)/btcode/boot.bin ./image/boot.bin
	echo -n $(HARDWARE_ID) >> ./image/boot.bin
	@echo ""
	@echo "******* finish building loader for $(CONFIG_MODEL_NAME) *******"
	@echo ""

loader_clean:
	@echo ""
	@echo "******* start cleaning loader for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	cd ../../platform/kernel/$(PLATFORM)/loader/$(LOADER) && $(MAKE) clean
	@echo ""
	@echo "******* finish cleaning loader for $(CONFIG_MODEL_NAME) *******"
	@echo ""

daemons: daemon_src_update daemon_config_backup
	@echo ""
	@echo "******* start building daemons for $(CONFIG_MODEL_NAME) *******"
	@echo ""	
	@echo "Copy environment setting data for Daemons Level used"
	cp ./.config ../../daemons/.config -f
	cp ./.config ../../.config -f
	cp ./include/project.h ../../daemons/sutil/project.h
	for i in $(obj-d); do \
		(cd ../../daemons/$$i; make) || exit 1; \
	done
	@echo ""
	@echo "******* finish building daemons for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	
daemon_config_backup:
ifeq ($(CONFIG_GPL_ENABLE),y)	
	cp -r -f ./include/sutil/* ../../daemons/sutil/		
else
	cp ./apps/project.c ../../daemons/sutil -f	
	cp ./apps/miniupnpd/miniupnpd.c ../../daemons/miniupnpd-1.0-RC7 -f
endif		

daemon_src_update:
ifneq ($(CONFIG_GPL_ENABLE),y)
	cp -f ./kernel_patch/leases.c $(DAEMONS_PATH)/udhcp/   
	cp -f ./kernel_patch/Makefile $(DAEMONS_PATH)/udhcp/ 
	cp -f ./kernel_patch/serverpacket.c $(DAEMONS_PATH)/udhcp/	
	cp -f ./kernel_patch/dhcpc.c $(DAEMONS_PATH)/udhcp/ 
endif

daemons_clean:
	@echo ""
	@echo "******* start cleaning daemons for $(CONFIG_MODEL_NAME) *******"
	for i in $(obj-d); do \
		(cd ../../daemons/$$i; make clean) || exit 1; \
	done
	@echo ""
	@echo "******* finish cleaning daemons for $(CONFIG_MODEL_NAME) *******"
	@echo ""

ifeq ($(CONFIG_GPL_ENABLE),y)
obj-d-gpl-install += $(obj-d)
obj-d-reserved += $(obj-d-gpl-install)
daemons_install:	
	@echo ""
	@echo "******* install daemons for $(CONFIG_MODEL_NAME) *******"
	for i in $(obj-d-gpl-install); do \
		(cd ../../daemons/$$i; make install) || exit 1; \
	done
	@echo "******* install daemons for $(CONFIG_MODEL_NAME) finish *******"
else
obj-d-reserved += $(obj-d)
daemons_install:
	@echo ""
	@echo "******* install daemons for $(CONFIG_MODEL_NAME) *******"
	for i in $(obj-d); do \
		(cd ../../daemons/$$i; make install) || exit 1; \
	done
	@echo "******* install daemons for $(CONFIG_MODEL_NAME) finish *******"
endif	


library:
	@echo ""
	@echo "******* start building library for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	for k in $(obj-i); do \
                (cd apps/$$k; make) || exit 1; \
        done
	@echo ""
	@echo "******* finish building library for $(CONFIG_MODEL_NAME) *******"
	@echo ""

ifneq ($(CONFIG_GPL_ENABLE),y)
library_clean:
	@echo ""
	@echo "******* start cleaning daemons for $(CONFIG_MODEL_NAME) *******"
	for k in $(obj-i); do \
                (cd apps/$$k; make clean) || exit 1; \
        done
	@echo ""
	@echo "******* finish cleaning daemons for $(CONFIG_MODEL_NAME) *******"
	@echo ""
endif

library_install:
	@echo ""
	@echo "******* install library for $(CONFIG_MODEL_NAME) *******"
	for k in $(obj-i); do \
                (cd apps/$$k; make install) || exit 1; \
        done
	@echo "******* install library for $(CONFIG_MODEL_NAME) finish !!*******"


projects: project_config_backup gui_language_tool
	@echo ""
	@echo "******* start building projects for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	for i in $(obj-p); do \
                (cd apps/$$i; make) || exit 1; \
        done	
	@echo "******* finish building projects for $(CONFIG_MODEL_NAME) *******"
	@echo ""

ifeq ($(CONFIG_GPL_ENABLE),y)	
project_config_backup:	
	cp ./include/nvram.h ./apps/nvram/nvram.h -f
	cp ./include/linux_vct.h ./apps/libplatform/linux_vct.h -f
	
endif

ifneq ($(CONFIG_GPL_ENABLE),y)
gui_language_tool:
	@echo ""
	@echo "******* start GUI Language Make **************************************"
	$(MAKE) -C tools/m17n
	@echo "******* finish GUI Language Make **************************************"
	@echo ""
endif	

ifneq ($(CONFIG_GPL_ENABLE),y)
projects_clean:
	@echo ""
	@echo "******* start cleaning projects for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	if [ -f $(PROJECTS_PATH)/tools/m17n/m17n_tool ]; then \
		$(MAKE) -C tools/m17n clean ;\
	fi
	for k in $(obj-p); do \
                (cd apps/$$k; make clean) || exit 1; \
        done
	@echo ""
	@echo "******* finish cleaning projects for $(CONFIG_MODEL_NAME) *******"
	@echo ""
endif	

projects_install:
	 @echo ""
	 @echo "******* install projects for $(CONFIG_MODEL_NAME) *******"
	 rm -f $(TARGET)/lib/libssl.so*
	 rm -f $(TARGET)/lib/libcrypto.so*
	 for i in $(obj-p); do \
	 	(cd apps/$$i; make install) || exit 1; \
	 done
	 @echo "******* install projects for $(CONFIG_MODEL_NAME) finish !!*******"

rootfs:
	@echo ""
	@echo "******* start building rootfs for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C $(PROJECTS_PATH)/rootfs
	@echo ""
	@echo "******* finish building rootfs for $(CONFIG_MODEL_NAME) *******"
	@echo ""

rootfs_clean:
	@echo ""
	@echo "******* start cleaning rootfs for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C $(PROJECTS_PATH)/rootfs clean
	@echo ""
	@echo "******* finish cleaning rootfs for $(CONFIG_MODEL_NAME) *******"
	@echo ""

rootfs_install:
	@echo ""
	@echo "******* start building rootfs for $(CONFIG_MODEL_NAME) *******"	
	@echo ""
	$(MAKE) -C rootfs install

gui_install:
	@echo ""
	@echo "******* GUI page install  for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	mkdir -p $(FS_PATH)/www
	$(MAKE) -C www CMO_UI_FLAG="$(CMO_UI_FLAG)"  $(LANG_INSTALL) deal_CMO_UI_FLAG

switch:
	@echo ""
	@echo "******* start building switch driver for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C $(KERNEL_PATH)/../../drivers/ switch_build
	@echo ""
	@echo "******* finish building switch driver for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	
switch_clean:
	@echo ""
	@echo "******* start cleaning switch driver for $(CONFIG_MODEL_NAME) *******"
	@echo ""
	$(MAKE) -C $(KERNEL_PATH)/../../drivers/ switch_clean
	@echo ""
	@echo "******* finish cleaning switch driver for $(CONFIG_MODEL_NAME) *******"
	@echo ""

################################
########### GPL Release ########
################################
ifeq ($(CONFIG_GPL_ENABLE),y)

##### loader #####
ifeq ($(CONFIG_GPL_LOADER_DISABLE),y)
gpl-clean-path += $(PLATFORM_PATH)/loader
endif
##### fastpath #####
ifeq ($(CONFIG_GPL_FAST_PATH_DISABLE),y)
gpl-clean-path += $(KERNEL_PATH)/net/ipv4/fastpath/
endif
##### daemons #####
ifeq ($(CONFIG_GPL_IPLOOKUP_DISABLE),y)
gpl-clean-path += $(DAEMONS_PATH)/ip_lookup
endif
ifeq ($(CONFIG_GPL_SUTIL_DISABLE),y)
gpl-clean-path += $(DAEMONS_PATH)/sutil
endif
##### apps #####
gpl-clean-path += $(PROJECTS_APP_PATH)

gpl: remove_redundant_daemons run_buildup_process_or_not config_recover
	@echo ""
	@echo "******* start generating GPL src for $(CONFIG_MODEL_NAME) *******"	
	
	##### src path #####
	for i in $(gpl-clean-path); do \
		(find $$i -name "*.c" | xargs rm -rf) && \
		(find $$i -name "*.h" | xargs rm -rf) && \
		(find $$i -name "*.pl" | xargs rm -rf) && \
		(find $$i -name "*.txt" | xargs rm -rf) && \
		(find $$i -name "*.html" | xargs rm -rf) && \
		(find $$i -name "*.log" | xargs rm -rf) || exit 1; \
	done
	##### others path #####
	find $(ENV_PATH) -name CVS | xargs rm -rf
	find $(DAEMONS_PATH) -name "*.doc" | xargs rm -rf		
	find $(PROJECTS_PATH)/tools -name "*.c" | xargs rm -rf
	find $(PROJECTS_PATH)/doc -name "*.xls" | xargs rm -rf
	find $(PROJECTS_PATH)/doc -name "*.config" | xargs rm -rf
	find $(PROJECTS_PATH)/doc -name "*.txt" | xargs rm -rf
	rm -rf $(PROJECTS_PATH)/config
	rm -rf $(PROJECTS_PATH)/image
	rm -rf $(PROJECTS_PATH)/rootfs/target
	rm -rf $(PROJECTS_PATH)/script
	##### unused apps at CVS #####
	rm -rf $(PROJECTS_PATH)/apps/dcc
	rm -rf $(PROJECTS_PATH)/apps/fw_query
	rm -rf $(PROJECTS_PATH)/apps/mbandwidth
	rm -rf $(PROJECTS_PATH)/apps/tracegw
	rm -rf $(PROJECTS_PATH)/apps/wakeOnLanProxy
	##### loader *.o at CVS #####
	find $(PLATFORM_PATH)/loader -name "*.o" | xargs rm -rf
	##############################
	make clean	
	@echo "******* finish generating GPL src for $(CONFIG_MODEL_NAME) *******"
	@echo ""

config_recover: daemons_config_recover project_config_recover fast_path_obj_recover	

run_buildup_process_or_not:	
	@if [ ! -d $(PROJECTS_IMAGE_PATH) ]; then \
				echo "==================================================================="; \
				echo "ERROR: Before you \"make gpl\", make sure that you have run the "; \
				echo "build-up process before."; \
                echo "Note: You should turn off the \"CONFIG_GPL_ENABLE\" in "; \
                echo "\"make menuconfig\"(.config file) first"; \
                echo "==================================================================="; \
                exit 1;\
    fi	

ifeq ($(CONFIG_GPL_SUTIL_DISABLE),y)	
daemons_config_recover:
	mkdir -p ./include/sutil
	cp $(DAEMONS_PATH)/sutil/sutil.h ./include/sutil/sutil.h -f
	cp $(DAEMONS_PATH)/sutil/shvar.h ./include/sutil/shvar.h -f
	cp $(DAEMONS_PATH)/sutil/scmd_nvram.h ./include/sutil/scmd_nvram.h -f
endif	

ifeq ($(CONFIG_GPL_FAST_PATH_DISABLE),y)	
fast_path_obj_recover:
	mkdir -p ./include/fastpath
	cp $(KERNEL_PATH)/net/ipv4/fastpath/fastpath_core.h ./include/fastpath/fastpath_core.h -f
	cp $(KERNEL_PATH)/net/ipv4/fastpath/built-in.o ./include/fastpath/built-in.o -f
	cp $(KERNEL_PATH)/net/ipv4/fastpath/fast_l2tp_core.o ./include/fastpath/fast_l2tp_core.o -f
	cp $(KERNEL_PATH)/net/ipv4/fastpath/fast_pptp_core.o ./include/fastpath/fast_pptp_core.o -f
	cp $(KERNEL_PATH)/net/ipv4/fastpath/fastpath_core.o ./include/fastpath/fastpath_core.o -f
	cp $(KERNEL_PATH)/net/ipv4/fastpath/filter.o ./include/fastpath/filter.o -f
endif
project_config_recover:
	cp $(PROJECTS_APP_PATH)/nvram/nvram.h ./include/nvram.h -f
	cp $(PROJECTS_APP_PATH)/libplatform/linux_vct.h ./include/linux_vct.h -f		
endif	

remove_redundant_daemons:
	@echo ""
	@echo "******* start removing redundant daemons for $(CONFIG_MODEL_NAME) *******"
	@echo "reserved:$(obj-d-reserved)"
	@echo "install:$(obj-d-gpl-install)"
	chmod 777 ./script/remove_daemons.sh
	./script/remove_daemons.sh "$(obj-d-reserved)"
	@echo "******* finish removing redundant daemons for $(CONFIG_MODEL_NAME) *******"
	@echo ""

conf mconf:
	$(MAKE) -C config
	@./config/$@ ./config/Config

menuconfig:mconf
# Default configurations
.config:
	cp config/defconfig $@
	$(MAKE) mconf

%:
	[ ! -d $* ] || $(MAKE) -C $*

%-clean:
	[ ! -d $* ] || $(MAKE) -C $* clean

%-install:
	[ ! -d $* ] || $(MAKE) -C $* install

.PHONY: all clean install
.PHONY: conf mconf menuconfig
.PHONY: kernel wireless daemons projects switch rootfs loader

