#
#	DGN1000 serial product makefile 
#	Usage:  make [TARGET] [ANNEX] [VER] [MODULE] [HW_ID] [UR2]
#

# Environment Variables
-include env.mak 
-include Rules.mak

# TODO
#   modules for kernel ?
#	oam led pushbutton
#
# Change:
# 	busybox 1.8 -> busybox1.13    (busybox1.8 if enable 2.6 modules support that will can't get shell.)
#
#	need mkimg?  new uboot is not compare checksum.
#
# apps/kernel_upgrade/Makefile need this value
export ZIP_IMG:=$(ZIP_IMG)

VERSION=$(ANNEX)$(VER)

APPS_DIR     = $(ROOT)/apps
UI_DIR       = $(ROOT)/UI
IMAGE_DIR    = $(ROOT)/image
ifeq ($(FLASH_SPI),1)
LOADER_IMAGE = $(IMAGE_DIR)/u-boot-spi.bin
else
LOADER_IMAGE = $(IMAGE_DIR)/u-boot.ifx
endif
KERNEL_IMAGE = $(IMAGE_DIR)/uImage
ROOTFS_IMAGE = $(IMAGE_DIR)/rootfs.img
EEPROM_IMAGE = $(IMAGE_DIR)/atheros.bin
MD5_FILE	 = $(IMAGE_DIR)/lib_md5
PID			 = $(IMAGE_DIR)/PID_$(VERSION)
GPL_DIR		 = $(ROOT)/GPL/$(PROJECT)_V$(VERSION)_$(REGION)_src
FUNC         = 00

TOOLS_DIR    = $(ROOT)/Toolchain/image_tools
MAKEHTM          = $(TOOLS_DIR)/bin/make_htm
MAKEPID		 = $(TOOLS_DIR)/bin/make_PID
MAKEIMAGE    = $(TOOLS_DIR)/bin/mkimage
MAKESQUASHFS = $(HOSTUTILS_PATH)/mksquashfs-lzma

ifeq ($(DEBUG),1)
	IMG_NAME=$(BOARD_ID)_V$(VER).debug$(DEBUG_VER).img
else
	IMG_NAME=$(BOARD_ID)_V$(VER).img
endif

all: prepare build_image

build_image: rootfs kernel app appi drivers svninfo pid fs img

rootfs:
	@echo "---------------------------------------"
	@echo "make build_target"
	@echo "---------------------------------------"	
#	@rm -rf $(ROOT)/target
#	@tar  xfz $(ROOT)/target.tgz
	#@echo "#### For easy debug ####"
	#@cp -af ./target_debug ./target
	#@echo "#### End easy debug ####"
ifeq ($(3G_FEATURE),1)
	cat $(APPS_DIR)/etc.$(FLASH)/prepare_3g >> $(TARGET_DIR)/usr/etc/rcS
endif
ifeq ($(DEBUG),1)
	@echo $(VERSION).debug$(DEBUG_VER) > $(TARGET_DIR)/usr/etc/version	
else
	@echo $(VERSION) > $(TARGET_DIR)/usr/etc/version	
endif
	@echo ""
		
kernel:lib_dsl_cpe_api.a
	@echo "---------------------------------------"
	@echo "make kernel"
	@echo "---------------------------------------"	
#	cd $(KERNEL_SRC) && make menuconfig ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
	cd $(KERNEL_SRC) && make oldconfig ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
	cd $(KERNEL_SRC) && make prepare ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
	cd $(KERNEL_SRC) && make uImage.lzma ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
	@#cd $(KERNEL_SRC) && make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)  
	@cp -f $(KERNEL_SRC)/arch/$(ARCH)/boot/uImage $(IMAGE_DIR)
ifeq ($(3G_FEATURE),1)	
	# eason
	cd $(KERNEL_SRC) && make modules ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
	cp -r $(KERNEL_SRC)/drivers/usb/serial/usbserial.ko $(ROOT)/target/lib/modules
	cp -r $(KERNEL_SRC)/drivers/usb/serial/option.ko $(ROOT)/target/lib/modules
endif

lib_dsl_cpe_api.a:
	@cd $(KERNEL_DIR)/drivers/char && \
	ln -sf ../../../ifx_driver/lib_dsl_cpe_api.a lib_dsl_cpe_api.a 

app:
ifeq ($(SUBDIR),"")
	$(MAKE) -C $(APPS_DIR)
else
	$(MAKE) -C $(APPS_DIR)/$(SUBDIR)
endif
 
appi:	
	$(MAKE) -C $(APPS_DIR) install -s

drivers:
	@echo "---------------------------------------"
	@echo "make drivers"
	@echo "---------------------------------------"	
	@echo "#### make firmware driver ####"

svninfo:
	cd $(TARGET_DIR);\
	echo Firmware version: $(VERSION) > $(MD5_FILE);\
	find -type f -exec md5sum {} >> $(MD5_FILE) \;;\
	cd -
	cp $(MD5_FILE) $(TARGET_DIR)/usr/etc/
	
pid:
	@echo "---------------------------------------"
	@echo "make pid"  " is empty "
	@echo "---------------------------------------"	
ifeq ($(ANNEX),A)
	cp image/dgn1000.pid.a image/dgn1000.pid
else
	cp image/dgn1000.pid.b image/dgn1000.pid
endif
	@$(MAKEPID) image/dgn1000.pid $(VERSION)

fs: 
	@echo "---------------------------------------"
	@echo "make fs"
	@echo "---------------------------------------"	
	@find target -name .svn | xargs rm -rf
	$(STRIP) -S $(TARGET_DIR)/lib/modules/*
	$(STRIP) -s $(TARGET_DIR)/lib/*.so $(TARGET_DIR)/lib/*.so.0 $(TARGET_DIR)/lib/*.so.1	
	$(MAKESQUASHFS) $(TARGET_DIR) $(ROOTFS_IMAGE) -be -noappend -b 32768
	@echo "#### For easy debug"

img:
	@echo "---------------------------------------"
	@echo "make build_image"
	@echo "---------------------------------------"	
	@echo IMG NAME   = $(IMG_NAME)
	@echo LOADER     = $(LOADER_IMAGE)
	@echo DOWNLOADER = $(DOWNLOADER)
	@echo KERNEL     = $(KERNEL_IMAGE)
	@echo FS_NAME    = $(ROOTFS_IMAGE)
	@echo PID        = $(PID)
	@echo "---------------------------------------"	
	@ echo "#### mkimg #####"
	#cd image && ./bb && cp -af dgn1000.bin ../newimage.img
	#@echo copy zipImage
	#cp ../../image/zipImage image/zipImage

	cd image && ./bb
ifeq ($(ZIP_IMG),1)
	cd image && ./zipImage dgn1000.bin
else
	cd image && cp dgn1000.bin dgn1000.img
endif
	cd image && cp -f dgn1000.img ../newimage.img


prepare:
	@echo " prepare..."

#
######################### clean #############################
#
clean: kernelc appc
	@echo "---------------------------------------"
	@echo "make clean"
	@echo "---------------------------------------"	
#	rm -rf $(TARGET_DIR)

kernelc:
	@echo "clean kernel"	
	make -C $(KERNEL_DIR) clean ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)

appc:
ifeq ($(SUBDIR),"")
	$(MAKE) -C $(APPS_DIR) clean
else
	$(MAKE) -C $(APPS_DIR)/$(SUBDIR) clean
endif

.PHONY: all build_image GPL
.PHONY: rootfs kernel  app  appi  drivers  pid fs img
.PHONY: clean  kernelc appc 
.PHONY: prepare board


#
######################## Help #################################
#
help:
	@echo "##############################################"
	@echo "# make                                       #" 
	@echo "# make kernel                                #" 
	@echo "# make app                                   #"
	@echo "# make ui                                    #"
	@echo "# make app SUBDIR=xxx                        #"
	@echo "##############################################"



