KERNELZ = $(IMAGEDIR)/zImage
RAMDISK  = $(IMAGEDIR)/ramdisk
IMAGE = $(IMAGEDIR)/uImage
ROMFS_DIR = $(ROOTDIR)/romfs

RAMDISK_SIZE  := $(shell echo $(CONFIG_BLK_DEV_RAM_SIZE))
MKIMAGE_DIR = $(ROOTDIR)/user/mkimage
CUR_DIR = $(shell pwd)
COMP = lzma

ROMFS_DIRS = \
	tmp \
	bin \
	dev dev/pts \
	home \
	etc \
	etc_ro etc_ro/web etc_ro/ppp etc_ro/ppp/peers etc_ro/ppp/plugins etc_ro/ppp/3g \
	etc_ro/wlan etc_ro/Wireless etc_ro/xml etc_ro/usb \
	etc_ro/linuxigd etc_ro/Wireless/RT2860AP etc_ro/Wireless/RT61AP etc_ro/Wireless/iNIC \
	etc_ro/Wireless/RT2860STA \
	lib lib/modules lib/ipsec \
	mnt \
	proc \
	sbin \
	sys \
	media \
	usr usr/bin usr/sbin usr/codepages \
	var 

clean:
	rm -f mkimage

romfs: 
	[ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)
	for i in $(ROMFS_DIRS); do \
		[ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)/$$i; \
	done
	#generate device node
#ifneq	($(LINUXDIR),linux-2.4.x)
#	@if [ \! -d $(ROMFSDIR)/dev ];then mkdir -p $(ROMFSDIR)/dev;fi;
#	./makedevlinks $(ROMFSDIR)
#endif
	$(ROMFSINST) /etc_ro/rcS
	$(ROMFSINST) /etc_ro/inittab
	$(ROMFSINST) /etc_ro/motd
	$(ROMFSINST) /etc/fstab

	# Handle several power design for MT7620
	rm -rf MT7620_AP_2T2R-4L_V15.BIN
ifeq ($(PROFILE),X3700)
	ln -s "20160317_MT7620.bin" MT7620_AP_2T2R-4L_V15.BIN
else ifeq ($(PROFILE),X6100)
	ln -s "MT7620A_20131212.bin" MT7620_AP_2T2R-4L_V15.BIN
else ifeq	($(CONFIG_INTERNAL_PA_INTERNAL_LNA),y)
	# user choose iPA + iLNA
	ln -s "MT7620_AP_2T2R-4L_internal LNA_internal PA_V15.BIN" MT7620_AP_2T2R-4L_V15.BIN
else ifeq ($(CONFIG_INTERNAL_PA_EXTERNAL_LNA),y)
	# user choose iPA + eLNA
	ln -s "MT7620_AP_2T2R-4L_external LNA_internal PA_V15.BIN" MT7620_AP_2T2R-4L_V15.BIN
else ifeq ($(CONFIG_EXTERNAL_PA_EXTERNAL_LNA),y)
	# user choose ePA + eLNA
	ln -s "MT7620_AP_2T2R-4L_external LNA_external PA_V15.BIN" MT7620_AP_2T2R-4L_V15.BIN
else
	# no any config?! use iLAN+iPA as default.
	ln -s "MT7620_AP_2T2R-4L_internal LNA_internal PA_V15.BIN" MT7620_AP_2T2R-4L_V15.BIN
endif
	$(ROMFSINST) "/etc_ro/wlan/MT7620_AP_2T2R-4L_V15.BIN"

	rm -rf MT7610E-V10-20130102-FEM.bin
ifeq	($(PROFILE),WNDR3400AC)
	ln -s MT7610E_V1-20121031.bin MT7610E-V10-20130102-FEM.bin
else ifeq ($(PROFILE),X6100)
	ln -s MT7610E_20131212.bin MT7610E-V10-20130102-FEM.bin
else ifeq ($(PROFILE),WL733AC)
	ln -s MT7610E-V10-20130321-FEM-1ANT.bin MT7610E-V10-20130102-FEM.bin
else
	ln -s MT7610E_V1-20121031.bin MT7610E-V10-20130102-FEM.bin
endif
	$(ROMFSINST) "/etc_ro/Wireless/iNIC/MT7610E-V10-20130102-FEM.bin"

	$(ROMFSINST) /etc_ro/Wireless/RT2860AP/RT2860_default_novlan
	$(ROMFSINST) /etc_ro/Wireless/RT2860AP/RT2860_default_vlan
	$(ROMFSINST) /etc_ro/Wireless/iNIC/RT2860AP.dat
	#for sigma test
	$(ROMFSINST) -e CONFIG_RALINKAPP_HOTSPOT /etc_ro/Wireless/iNIC/RT2860AP_hotspot.dat

	$(ROMFSINST) -e CONFIG_RA_NAT_HW /sbin/hnat_dbg.sh
	rm -f *_EEPROM.bin
ifeq	($(CONFIG_CO_CLOCK_SUPPORT), y)
# Second wifi interface - 5G
ifneq	($(CONFIG_RT_SECOND_CARD),)
ifeq	($(CONFIG_SECOND_CARD_EXTERNAL_PA),)
ifeq	($(CONFIG_SECOND_CARD_EXTERNAL_LNA),)
#	# iPA/iLNA
#	ln -s "MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM_layout_20131121_5G_iPAiLNAcoclock_wTSSI default slope offset.bin" \
#		MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
else
	# iPA/eLNA
#	ln -s "MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM_layout_20131121_5G_iPAeLNAcoclock_wTSSI default slope offset.bin" \
#		MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
endif
else
	# ePA/eLNA, ePA/iLNA
#	ln -s "MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM_layout_20131121_5G_ePAeLNAcoclock_TXTC_off.bin" \
#		MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
endif
	ln -s "20160317_MT7612.bin" MT7612E_EEPROM.bin
	$(ROMFSINST) -e CONFIG_SECOND_IF_EEPROM_FLASH /etc_ro/wlan/MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
endif
else # non co-Clock
# Second wifi interface - 5G
ifneq	($(CONFIG_RT_SECOND_CARD),)
ifeq	($(CONFIG_SECOND_CARD_EXTERNAL_PA),)
ifeq	($(CONFIG_SECOND_CARD_EXTERNAL_LNA),)
	# iPA/iLNA
#	ln -s "MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM_layout_20131121_5G_iPAiLNA_wTSSI default slope offset.bin" \
#		MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
else
	# iPA/eLNA
#	ln -s "MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM_layout_20131121_5G_iPAeLNA_wTSSI default slope offset.bin" \
#		MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
endif
else
	# ePA/eLNA, ePA/iLNA
#	ln -s "MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM_layout_20131121_5G_ePAeLNA_TXTC_off.bin" \
#		MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
endif
	ln -s "20160317_MT7612.bin" MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
	$(ROMFSINST) -e CONFIG_SECOND_IF_EEPROM_FLASH /etc_ro/wlan/MT$(shell echo $(CONFIG_RT_SECOND_CARD) | tr a-z A-Z)_EEPROM.bin
endif
endif

	$(ROMFSINST) -s /tmp/SingleSKU.dat /etc_ro/Wireless/RT2860STA/SingleSKU.dat
	$(ROMFSINST) -s /tmp/SingleSKU.dat /etc_ro/Wireless/iNIC/SingleSKU.dat
	# 0           CE: (1-11)+(13-14)      CE: Band1-3
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/0_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/0_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/0_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/0_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/0_4_SingleSKU.dat

	# 1           FCC:(1-11)              CE: Band1-3
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/1_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/1_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/1_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/1_4_SingleSKU.dat

	# 2           CE: (1-11)+(13-14)      FCC:Band1-4
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/2_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/2_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/2_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/2_4_SingleSKU.dat

	# 3           FCC:(1-11)              FCC:Band1-4
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/3_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/3_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/3_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/3_4_SingleSKU.dat

	# 4           AU:                     AU:
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/4_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/4_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/4_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/4_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/4_4_SingleSKU.dat

	# 5           JP:                     JP:
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/5_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/5_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/5_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/5_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/5_4_SingleSKU.dat
	
	# 6           RU:                     RU:
#	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/6_SingleSKU.dat
#	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/6_1_SingleSKU.dat
#	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/6_2_SingleSKU.dat
#	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/6_3_SingleSKU.dat
#	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/6_4_SingleSKU.dat

	# 7           CA:                     CA:
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/7_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/7_1_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/7_2_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/7_3_SingleSKU.dat
	$(ROMFSINST) /etc_ro/Wireless/RT2860STA/7_4_SingleSKU.dat


romfs.post:: 
	$(ROMFSINST) /sbin/ralink_fs_init.sh
	$(ROMFSINST) /sbin/ralink_config_init.sh
	$(ROMFSINST) /sbin/ralink_config_lan.sh
	$(ROMFSINST) /sbin/ralink_config_wlan.sh
	$(ROMFSINST) /sbin/ralink_miniupnpd.sh
	ln -sf ../usr/lib/libacos_shared.so $(ROMFSDIR)/lib
	ln -sf ../usr/lib/libnat.so $(ROMFSDIR)/lib
	ln -sf ../usr/lib/tc $(ROMFSDIR)/lib
	ln -sf ../tmp $(ROMFSDIR)/usr
	rm -rf $(ROMFSDIR)/tmp/*
	cp -rf $(ROMFSDIR)/etc/* $(ROMFSDIR)/etc_ro
	rm -rf $(ROMFSDIR)/etc/*
	$(ROMFSINST) /etc/fstab

	[ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)

	#Squash File System
	rm -f $(RAMDISK)  
ifeq ($(LINUXDIR),linux-2.4.x)
	$(CONFIG_CROSS_COMPILER_PATH)/mksquashfs_lzma-3.0 $(ROMFSDIR) $(RAMDISK)
else
	#linux2.6.x support squashfs with lzma
ifeq	($(CONFIG_BLK_DEV_INITRD),)

ifeq	($(LINUXDIR),linux-2.6.21.x)
	$(CONFIG_CROSS_COMPILER_PATH)/mksquashfs_lzma-3.2 $(ROMFSDIR) $(RAMDISK)
endif
ifeq	($(LINUXDIR),linux-2.6.36MT.x)
	$(CONFIG_CROSS_COMPILER_PATH)/mksquashfs_lzma-4.2 $(ROMFSDIR) $(RAMDISK)
endif
	echo $(LINUXDIR)
ifeq ($(LINUXDIR),linux-2.6.36.x)
	# $(CONFIG_CROSS_COMPILER_PATH)/mksquashfs_lzma-4.2 $(ROMFSDIR) $(RAMDISK)
	#squashfs with xz(lzma2)
	$(ROOTDIR)/tools/mksquashfs $(ROMFSDIR) $(RAMDISK) -noappend -all-root
endif
endif
endif

ifeq	($(CONFIG_BLK_DEV_INITRD),y)
ifeq	($(LINUXDIR),linux-2.4.x)
	gzip -9 -f $(RAMDISK)
	cp $(RAMDISK).gz $(ROOTDIR)/$(LINUXDIR)/arch/mips/ramdisk/ramdisk.gz 2>/dev/null
endif
endif


mkimage: $(MKIMAGE_DIR)/crc32.c $(MKIMAGE_DIR)/mkimage.c 
	$(HOSTCC) $(HOST_CFLAGS) -DUSE_HOSTCC -o $@ -I$(MKIMAGE_DIR)/include $^ 

image: mkimage
	$(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/vmlinux  $(KERNELZ)
	cd $(IMAGEDIR) ; rm -f $(KERNELZ).*; $(ROOTDIR)/tools/$(COMP) -9 -f -S .$(COMP) $(KERNELZ)

ifeq	($(CONFIG_BLK_DEV_INITRD),)
ifeq	($(CONFIG_ROOTFS_IN_FLASH_NO_PADDING),)
	@#============================================================
	@# uboot hdr(64B) + mtdblock0(192KB) + mtdblock1(64KB) + 
	@# mtdblock2(64KB) + mtdblock3 + mtdblock4 + mtdblock5
	@# 
	@# Padding size of mtdblock3 is equal to "MTD_KRN_PART_SIZE 
	@# - 64B - the size of compressed kernel image"
	@#
	@# In Other Words:
	@# MTD Kernel Partition Size is MUST bigger than 
	@# "Original Kernel Image Size + 64B"
	@#============================================================
	#========<< This is README not Warning Message>>==============
	# Please make sure that original kernel image size can't 
	# bigger or equal to Kernel Partition Size. 
	#
	# For Example:
	# 
	# Original kernel image size is 563421 Bytes(0x898DD Bytes).
	# Flash sector size is 0x10000, so MTD kernel 
	# partition size MUST bigger than 0x90000.
	#
	# #make menuconfig
	#
	# Kernel/Library/Defaults Selection  --->
	#   [*] Customize Kernel Settings (NEW)
	#      Machine selection  --->
	#        (90000) MTD Kernel Partition Size (Unit:Bytes)
	#=============================================================
	# Original Kernel Image Size
	  @wc -c $(KERNELZ).$(COMP)
	# Padded Kernel Image Size 
ifeq    ($(findstring 0x, $(CONFIG_MTD_KERNEL_PART_SIZ)),0x)
	  @SIZE=`wc -c $(KERNELZ).$(COMP) | awk '{ print $$1 }'` ; \
	   MTD_KRN_PART_SIZE=`printf "%d" $(CONFIG_MTD_KERNEL_PART_SIZ)` ; \
	   PAD=`expr $$MTD_KRN_PART_SIZE - 64 - $$SIZE` ; \
	   dd if=/dev/zero count=1 bs=$$PAD 2> /dev/null | tr \\000 \\377 >> $(KERNELZ).$(COMP)
else
	  @SIZE=`wc -c $(KERNELZ).$(COMP) | awk '{ print $$1 }'` ; \
	   MTD_KRN_PART_SIZE=`printf "%d" 0x$(CONFIG_MTD_KERNEL_PART_SIZ)` ; \
	   PAD=`expr $$MTD_KRN_PART_SIZE - 64 - $$SIZE` ; \
	   dd if=/dev/zero count=1 bs=$$PAD 2> /dev/null | tr \\000 \\377 >> $(KERNELZ).$(COMP)
endif
endif
	@wc -c $(KERNELZ).$(COMP)
	# Original RootFs Size 
	  @du -sb $(ROMFSDIR)
	# Compressed RootFs Size 
	  @wc -c $(RAMDISK)
	# Padded Kernel Image + Compressed Rootfs Size
	  @cat $(RAMDISK) >> $(KERNELZ).$(COMP) 
	  @wc -c $(KERNELZ).$(COMP)
	#===========================================
endif

ifeq	($(CONFIG_ROOTFS_IN_FLASH_NO_PADDING),y)
	@cd $(IMAGEDIR) ; \
	ISIZE=`wc -c $(KERNELZ).$(COMP) | awk '{print $$1}'` ; \
	RSIZE=`wc -c $(RAMDISK) | awk '{print $$1}'` ; \
	KRN_SIZE=`expr $$ISIZE - $$RSIZE + 64` ; \
	ENTRY=`readelf -h $(ROOTDIR)/$(LINUXDIR)/vmlinux | grep "Entry" | awk '{print $$4}'` ; \
	$(CUR_DIR)/mkimage -A mips -O linux -T kernel -C $(COMP) -a 80000000 -e $$ENTRY -k $$KRN_SIZE -n "Linux Kernel Image" -d $(KERNELZ).$(COMP) $(IMAGE)
else
	@cd $(IMAGEDIR) ; $(CUR_DIR)/mkimage -A mips -O linux -T kernel -C $(COMP) -a 80000000 -e $(shell readelf -h $(ROOTDIR)/$(LINUXDIR)/vmlinux | grep "Entry" | awk '{print $$4}') -n "Linux Kernel Image"  -d $(KERNELZ).$(COMP) $(IMAGE)
endif

