-include .sub_build.base

LZMA			= lzma
COMP_POSTFIX	= comp
BLD_LINUX		= linux
BLD_VMLINUX		= $(LINUX_DIR)/vmlinux
BLD_LINUX_BIN	= $(BLD_LINUX).bin
BLD_LINUX_COMP	= $(BLD_LINUX).$(COMP_POSTFIX)
BLD_LINUX_PAD	= $(BLD_LINUX).pad

BOOT_BIN		= uboot.bin.pad
SYS_CONFIG		= sys_config
FACTORY			= factory
NVRAM			= nvram

BOOT_SIZE		= 0x30000
CONFIG_SIZE		= 0x10000
FACTORY_SIZE	= 0x10000
NVRAM_SIZE		= 0x20000

kernel_address	= 80000000
#kernel_pad		= 0xFFFAC
#kernel_pad		= 0x17FFAC
kernel_pad		= 0x$(shell printf "%x\n" $$[$(KERNEL_PART_SIZE)-0x54])
kernel_entry	= $(shell readelf -h $(BLD_VMLINUX) | grep "Entry" | awk '{print $$4}')

all: clean $(TARGET_UPG_DIR)/$(TARGET_UPG) $(TARGET_MP_DIR)/$(TARGET_MP)

$(TARGET_MP_DIR)/$(TARGET_MP): $(TARGET_UPG_DIR)/$(TARGET_UPG) $(BOOT_BIN) $(SYS_CONFIG) $(FACTORY) $(NVRAM)
	$(Q)cat $(BOOT_BIN) $(SYS_CONFIG) $(FACTORY) $(NVRAM) $(TARGET_UPG_DIR)/$(TARGET_UPG) > $@.tmp && \
	$(Q)objcopy -I binary -O binary --pad-to=0x800000 $@.tmp $@ && \
	$(Q)rm -f $@.tmp

$(BOOT_BIN):
	$(Q)cp -f $(TOP)/$(BOOT_DIR)/uboot/uboot.bin .
	$(Q)objcopy -I binary -O binary --pad-to=$(BOOT_SIZE) uboot.bin $@

$(SYS_CONFIG):
	$(Q)dd if=/dev/zero of=$@.tmp count=1 bs=1k && \
		objcopy -I binary -O binary --pad-to=$(CONFIG_SIZE) $@.tmp $@
	$(Q)rm -f $@.tmp

$(FACTORY):
	$(Q)dd if=/dev/zero of=$@.tmp count=1 bs=1k && \
		objcopy -I binary -O binary --pad-to=$(FACTORY_SIZE) $@.tmp $@
	$(Q)rm -f $@.tmp

$(NVRAM): $(ROMFS_DIR)/$(ETC_RO)/$(DEFAULT_CONFIG_BIN)
	$(Q)cp $< $(NVRAM).tmp && \
		objcopy -I binary -O binary --pad-to=$(NVRAM_SIZE) $(NVRAM).tmp $@
	$(Q)rm -f $(NVRAM).tmp

.PHONY: $(BOOT_BIN) $(SYS_CONFIG) $(SW_CONFIG)

$(TARGET_UPG_DIR)/$(TARGET_UPG): $(BLD_LINUX_BIN)
	$(Q)cp -f $(BLD_LINUX_BIN) $(TARGET_UPG_DIR)/$(TARGET_UPG)

ifeq ($(_ROOTFS_IN_RAM_),y)
$(BLD_LINUX_BIN): $(BLD_LINUX_COMP)
	$(Q)$(TOOLS_DIR)/mkimage -A mips -O linux -T kernel -C $(LZMA) -a $(kernel_address) -e $(kernel_entry) -n "Linux Kernel Image" -d $(BLD_LINUX_COMP) $(BLD_LINUX_COMP).pad.appimg.mkimage
	$(Q)$(TOOLS_DIR)/cvimg $(BLD_VMLINUX) $(BLD_LINUX_COMP).pad.appimg.mkimage $(BLD_LINUX_BIN) 0x1100000 0x70000
else
$(BLD_LINUX_BIN): $(BLD_LINUX_COMP) appimg
	$(Q)objcopy -I binary -O binary --pad-to=$(kernel_pad) $(BLD_LINUX_COMP) $(BLD_LINUX_COMP).pad || exit $$?
	$(Q)cat $(BLD_LINUX_COMP).pad appimg > $(BLD_LINUX_COMP).pad.appimg
	$(Q)$(TOOLS_DIR)/mkimage -A mips -O linux -T kernel -C $(LZMA) -a $(kernel_address) -e $(kernel_entry) -n "Linux Kernel Image" -d $(BLD_LINUX_COMP).pad.appimg $(BLD_LINUX_COMP).pad.appimg.mkimage
	$(Q)$(TOOLS_DIR)/cvimg $(BLD_VMLINUX) $(BLD_LINUX_COMP).pad.appimg.mkimage $(BLD_LINUX_BIN) 0x1100000 0x70000
endif


$(BLD_LINUX_COMP): $(BLD_LINUX)
	$(Q)$(TOOLS_DIR)/$(LZMA) e $< $@

$(BLD_LINUX): $(BLD_VMLINUX)
	$(Q)$(OBJCOPY) -O binary -R .note -R .comment -S $< $@

appimg:
	$(Q)echo "FW "$(CUS_VERSION) > $(ROMFS_DIR)/ro/etc/version
	$(Q)echo "MODEL "$(CUS_MODEL_NAME) >> $(ROMFS_DIR)/ro/etc/version
	$(Q)echo "BOOT "$(BOOT_VERSION) >> $(ROMFS_DIR)/ro/etc/version
	$(Q)echo "BUILD "$(BUILD_CODE) >> $(ROMFS_DIR)/ro/etc/version
	$(Q)echo "FW_HEADER "$(FW_HEADER) >> $(ROMFS_DIR)/ro/etc/version
	$(Q)echo "WEB_HEADER "$(WEB_HEADER) >> $(ROMFS_DIR)/ro/etc/version
	$(Q)find $(ROMFS_DIR) -name .svn -print | xargs rm -rf
	$(Q)$(TOOLS_DIR)/mksquashfs $(ROMFS_DIR) $@

distclean: clean
	$(Q)rm -f $(SUB_BUILD_FILE)

clean:
	$(Q)rm -f $(BLD_LINUX) $(BLD_LINUX_BIN) $(BLD_LINUX_PAD) $(BLD_LINUX_COMP)* appimg uboot.bin
#	$(Q)find $(ROMFS_DIR) -name ".svn" -print | xargs rm -rf

make_env:
	$(Q)ln -sf $(ABS_SUB_BUILD_FILE) $(SUB_BUILD_FILE)
