KERNELZ = $(IMAGEDIR)/zImage
RAMDISK  = $(IMAGEDIR)/ramdisk
IMAGE = $(IMAGEDIR)/image-$(FWVERSION)
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 dev/net \
	home \
	etc etc/dnrd etc/ssh etc/openvpn \
	etc_ro etc_ro/ppp etc_ro/ppp/plugins \
	lib lib/modules \
	mnt \
	proc \
	sbin \
	sys \
	usr usr/bin usr/sbin \
	var 

# 	Marked by Perry to reduce code size
#	etc_ro etc_ro/ppp etc_ro/ppp/plugins etc_ro/wlan etc_ro/Wireless etc_ro/xml etc_ro/ipsec \
#	etc_ro/linuxigd etc_ro/Wireless/RT2860AP etc_ro/Wireless/RT61AP etc_ro/Wireless/RT2880 media \
#	usr/codepages


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)
	#cp ./makenodes $(ROMFSDIR)/etc_ro
endif

ifeq ($(CONFIG_SHELL_CONSOLE),y)
	echo "::sysinit:/etc_ro/rcS" > $(ROMFSDIR)/etc_ro/inittab
	#echo "ttyS1::respawn:/bin/sh" >> $(ROMFSDIR)/etc_ro/inittab
	echo "ttyS1::respawn:/sbin/getty -i -L ttyS1 57600 linux" >> $(ROMFSDIR)/etc_ro/inittab
else
	echo "::sysinit:/etc_ro/rcS" > $(ROMFSDIR)/etc_ro/inittab
endif
	$(ROMFSINST) /etc_ro/rcS
	$(ROMFSINST) /etc_ro/motd
	$(ROMFSINST) /etc/fstab
	$(ROMFSINST) default_config /etc_ro/default_config
	$(ROMFSINST) ./etc/passwd /etc/
	$(ROMFSINST) ./etc/group /etc/
	echo "FW:$(FWVERSION) -- " `date` > $(ROMFSDIR)/etc_ro/version

	#
	# Marked below lines by Perry to reduce code size
	# 

	#$(ROMFSINST) -e CONFIG_RT2860V2_AP /etc_ro/wlan/RT3052_AP_2T2R_V1_1.bin

	#$(ROMFSINST) /etc_ro/Wireless/RT2860AP/RT2860_default_vlan
	#$(ROMFSINST) /etc_ro/Wireless/RT2860AP/RT2860_default_novlan

	#$(ROMFSINST) -e CONFIG_RT2880v2_INIC_AP /etc_ro/Wireless/RT2880/iNIC_ap.bin
	#$(ROMFSINST) -e CONFIG_RT2880v2_INIC_AP /etc_ro/Wireless/RT2880/iNIC_ap.dat
	#$(ROMFSINST) -e CONFIG_RT2880v2_INIC_STA /etc_ro/Wireless/RT2880/iNIC_sta.bin
	#$(ROMFSINST) -e CONFIG_RT2880v2_INIC_STA /etc_ro/Wireless/RT2880/iNIC_sta.dat
	#$(ROMFSINST) -e CONFIG_RT2880v2_INIC_ETHCONVERTER /etc_ro/Wireless/RT2880/iNIC_sta_ethconvert.bin



romfs.post:: 
	[ -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),)
	$(CONFIG_CROSS_COMPILER_PATH)/mksquashfs_lzma-3.2 $(ROMFSDIR) $(RAMDISK)
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).*; $(COMP) -9 -f -S .$(COMP) $(KERNELZ)

ifeq	($(CONFIG_BLK_DEV_INITRD),)
	@#============================================================
	@# 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
	@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

	@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)

# DO NOT DELETE
