# (c) Copyright 2010, ACTi Corporation, Inc. ALL RIGHTS RESERVED
#
# All software are Copyright 2010 by ACTi Corporation. ALL RIGHTS RESERVED.
# Redistribution and use in source and binary forms, with or without modification,
# are strictly prohibited.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

SHELL = /bin/bash


PWD			 := $(shell pwd)
BUILD_TOPDIR := $(PWD)/../..

HOST_TOOLCHAIN_DIR := $(BUILD_TOPDIR)/build/host/bin

OUTPUT_DIR := $(BUILD_TOPDIR)/output
STAGING_ROOTFS_DIR := $(BUILD_TOPDIR)/output/staging
TARGET_ROOTFS_DIR := $(BUILD_TOPDIR)/output/target

RAMDISK_SIZE ?= 8192
JFFS2_ERASE_SIZE = 0x4000

#
# build ramdisk or cramfs
# options: ramdisk cramfs
FS_TYPE ?= ramdisk

# options: yes or others
#BUILD_CPIO = no
#BUILD_JFFS2 = yes

COMPRESS_RAMDISK = yes
#COMPRESS_RAMDISK = no


#.PHONY: all build_ramdisk build_cramfs build_cpio ramdisk cramfs cpio clean

#all: cp_template add_init_sh build_rootfs

staging: copy-template publish-init-tab

#build_rootfs: build_fs build_cpio build_jffs2
#build_rootfs: build_fs

copy-template:
	@printf "Establishing the base of root file system...\n"
	@mkdir -p $(STAGING_ROOTFS_DIR)
	@pushd target_skeleton; \
	tar -c . --exclude ".svn" | tar -x -C $(STAGING_ROOTFS_DIR); \
	popd
	@printf "The base of root file system created...\n"

#	@printf "Establishing template of root file system...\n"
#	@pushd target_skeleton; \
#	tar -cjf $(OUTPUT_DIR)/target.tar.bz2 . --exclude ".svn"; \
#	popd
#	@mkdir -p $(STAGING_ROOTFS_DIR)
#	@tar -xpjf $(OUTPUT_DIR)/target.tar.bz2 -C $(STAGING_ROOTFS_DIR)
#	@rm -f $(OUTPUT_DIR)/target.tar.bz2
#	@printf "Template of root file system created...\n"

publish-init-tab:
	@printf "Generating inittab...\n"
	@cp -f ./inittab $(STAGING_ROOTFS_DIR)/etc/inittab
	@printf "inittab generated...\n"

#target: remove-target-dir copy_target_dir generate_fs
target: remove-target-dir publish-target-dir

remove-target-dir:
	@if [ -d $(TARGET_ROOTFS_DIR) ]; then \
		rm -rf  $(TARGET_ROOTFS_DIR); \
	fi

publish-target-dir:
	@printf "Creating target directory...\n"
	@cp -r $(STAGING_ROOTFS_DIR) $(TARGET_ROOTFS_DIR)

#	@echo "printf \"Creating target directory...\n\"" > $(OUTPUT_DIR)/make_target.cmd
#	@echo "cp -r $(STAGING_ROOTFS_DIR) $(TARGET_ROOTFS_DIR)" >> $(OUTPUT_DIR)/make_target.cmd

#generate_fs:
publish-rootfs-ext2-ramdisk:
	@echo "printf \"Building disk image of Ext2...\n\"" > $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
	@echo "$(HOST_TOOLCHAIN_DIR)/genext2fs -b $(RAMDISK_SIZE) -N 4096 -d $(TARGET_ROOTFS_DIR) -U -m 0 $(OUTPUT_DIR)/ramdisk" \
		   >> $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
ifeq ($(COMPRESS_RAMDISK), yes)
	@echo "printf \"Compressing RAM disk with maximum ratio(-9)...\n\"" >> $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
	@echo "gzip -f -9 $(OUTPUT_DIR)/ramdisk" >> $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
	@echo "printf \" * RAM disk compressed...\n\"" >> $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
else
	@echo "printf \"Rename uncompressed RAM disk to %s...\n\" $(OUTPUT_DIR)/ramdisk.gz" >> $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
	@echo "mv $(OUTPUT_DIR)/ramdisk $(OUTPUT_DIR)/ramdisk.gz" >> $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
endif
	@chmod +x $(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd
	@$(OUTPUT_DIR)/make-rootfs-ext2-ramdisk.cmd

#	@echo "printf \"Generating root file system...\n\"" >> $(OUTPUT_DIR)/make_target.cmd
#ifeq ($(FS_TYPE), ramdisk)
#	@echo "printf \"	Building RAM disk...\n\"" >> $(OUTPUT_DIR)/make_target.cmd
#	@echo "$(HOST_TOOLCHAIN_DIR)/genext2fs -b $(RAMDISK_SIZE) -N 8192 -d $(TARGET_ROOTFS_DIR) -U -m 0 $(OUTPUT_DIR)/ramdisk" \
#		   >> $(OUTPUT_DIR)/make_target.cmd
#else
#	@echo "printf \"	Build CRAMFS...\n\"" >> $(OUTPUT_DIR)/make_target.cmd
#	#@echo "$(SYSTEM_MKCRAMFS_DIR) -q -l $(TARGET_ROOTFS_DIR) $(OUTPUT_DIR)/cramfs" > $(OUTPUT_DIR)/generate_fs.cmd
#endif
#ifeq ($(COMPRESS_RAMDISK), yes)
#	@echo "printf \"	Compressing RAM disk with maximum ratio(-9)...\n\"" >> $(OUTPUT_DIR)/make_target.cmd
#	@echo "gzip -f -9 $(OUTPUT_DIR)/ramdisk" >> $(OUTPUT_DIR)/make_target.cmd
#	@echo "printf \"	RAM disk compressed...\n\"" >> $(OUTPUT_DIR)/make_target.cmd
#else
#	@echo "printf \"	Rename uncompressed RAM disk to %s...\n\" $(OUTPUT_DIR)/ramdisk.gz" >> $(OUTPUT_DIR)/make_target.cmd
#	@echo "mv $(OUTPUT_DIR)/ramdisk $(OUTPUT_DIR)/ramdisk.gz" >> $(OUTPUT_DIR)/make_target.cmd
#endif
#	@chmod +x $(OUTPUT_DIR)/make_target.cmd
#	@$(OUTPUT_DIR)/make_target.cmd

#build_fs:
#	@printf "Establishing root file system...\n"
#	@echo "$(HOST_TOOLCHAIN_DIR)/makedevs -d $(PWD)/device_table.txt $(TARGET_ROOTFS_DIR)" > $(OUTPUT_DIR)/fakeroot.cmd
#ifeq ($(FS_TYPE), ramdisk)
#	@echo "=== Build RAM disk....................................................................."
#	@echo "$(HOST_TOOLCHAIN_DIR)/genext2fs -b $(RAMDISK_SIZE) -N 817 -d $(TARGET_ROOTFS_DIR) -U -m 0 $(OUTPUT_DIR)/ramdisk" >> $(OUTPUT_DIR)/fakeroot.cmd
#else
#	@echo "=== Build CRAMFS......................................................................."
#	@echo "$(SYSTEM_MKCRAMFS_DIR) -q -l $(TARGET_ROOTFS_DIR) $(OUTPUT_DIR)/cramfs" >> $(OUTPUT_DIR)/fakeroot.cmd
#endif
#	@chmod +x $(OUTPUT_DIR)/fakeroot.cmd
#	@$(HOST_TOOLCHAIN_DIR)/fakeroot-ng -- $(OUTPUT_DIR)/fakeroot.cmd
#ifeq ($(COMPRESS_RAMDISK), yes)
#	@gzip -f -9 ramdisk
#else
#	@mv $(OUTPUT_DIR)/ramdisk $(OUTPUT_DIR)/ramdisk.gz
#endif

#build_cpio:
#TODO: Finish me

#build_jffs2:
#TODO: Finish me

clean:
	@rm -rf $(OUTPUT_DIR)/ramdisk.gz $(OUTPUT_DIR)/cramfs \
			$(OUTPUT_DIR)/ramdisk $(OUTPUT_DIR)/rootfs.cpio $(OUTPUT_DIR)/jffs2 \
			$(TARGET_ROOTFS_DIR) $(STAGING_ROOTFS_DIR)

#cp_public_linux_modules:
#cp_private_linux_modules:

.PHONY: staging target clean copy-template publish-init-tab remove-target-dir publish-target-dir publish-rootfs-ext2-ramdisk
