# ------------------------------------------------------------------------------
#
# Copyright 2011 Intel Corporation.  All Rights Reserved.
#
# The source code contained or described herein and all documents related to
# the source code ("Material") are owned by Intel Corporation or its
# suppliers or licensors.  Title to the Material remains with
# Intel Corporation or its suppliers and licensors.  The Material contains
# trade secrets and proprietary and confidential information of Intel or its
# suppliers and licensors.  The Material is protected by worldwide copyright
# and trade secret laws and treaty provisions.  No part of the Material may
# be used, copied, reproduced, modified, published, uploaded, posted,
# transmitted, distributed, or disclosed in any way without Intels prior
# express written permission.
#
# No license under any patent, copyright, trade secret or other intellectual
# property right is granted to or conferred upon you by disclosure or
# delivery of the Materials,  either expressly, by implication, inducement,
# estoppel or otherwise.  Any license under such intellectual property
# rights must be express and approved by Intel in writing.
#
#-----------------------------------------------------------------------------

# Constants
APP = ifast
APP_ISO = $(APP).iso
BUSYBOX = busybox-1.22.1
LINUX = linux-3.12.13
#3.6.11 has AMT 9 drivers
ZLIB = zlib-1.2.5
KEXEC-TOOLS = kexec-tools-2.0.6
ETHTOOL = ethtool-2.6.35
WGET = wget-1.12
BAR = bar_1.11.1
GRUB4DOS = grub4dos-0.4.5c

all: clean init busybox wget kexec ethtool kernel grub4dos zlib bar iso 

#--------------------------------------------------------------------------------------

clean:
	-rm -rf _install
	-rm -rf kernel
	-rm $(APP_ISO)

#--------------------------------------------------------------------------------------

#Initialize
init:
	-mkdir _install
	
	#Setup Init
	-cp -R collateral/etc/ _install/

	#create necessary default directories
	-mkdir _install/mnt
	-mkdir _install/proc
	-mkdir _install/root
	-mkdir _install/tmp
	-mkdir _install/sys
	-mkdir _install/sys/class
	-mkdir _install/dev
	-mkdir _install/lib
	-mkdir _install/lib/modules
	-mkdir _install/lib/tls
	-mkdir _install/lib/tls/i686
	-mkdir _install/home
	-mkdir _install/home/
	-mkdir _install/var
	-mkdir _install/var/log
	-mkdir _install/sbin
	
	#create block devices for login
	-mknod -m 600 _install/dev/console c 5 1
	-mknod -m 600 _install/dev/ram0 b 1 0

	#copy udhcpc script
	-mkdir _install/usr
	-mkdir _install/usr/share
	-mkdir _install/usr/share/udhcpc
	-cp collateral/default.script _install/usr/share/udhcpc/default.script
	-ln -s  /lib _install/lib/tls/i686/cmov

	#NOTE: The following two libraries are required for DNS resolution.
	-cp collateral/libs/libnss_dns-2.15.so _install/lib/libnss_dns.so.2
	-cp collateral/libs/libresolv-2.15.so _install/lib/libresolv.so.2

	#copy main script
	-mkdir _install/usr/bin
	-cp collateral/usr/bin/runscript _install/usr/bin/runscript

#--------------------------------------------------------------------------------------
#busybox
.PHONY: busybox
busybox: init
	
	-mkdir _install/bin
	-mkdir _install/lib
	-mkdir _install/lib/tls
	-mkdir _install/lib/tls/i686
	-mkdir _install/lib/i386-linux-gnu
	-mkdir _install/sys
	-mkdir _install/sys/class
	
	#copy libs from rds libs directory
	-cp collateral/libs/libm.so.6 _install/lib/i386-linux-gnu/libm.so.6
	-cp collateral/libs/libc.so.6 _install/lib/i386-linux-gnu/libc.so.6
	-cp collateral/libs/ld-linux.so.2 _install/lib/ld-linux.so.2

	#install fresh
	-rm -rf busybox
	-tar -xf tars/$(BUSYBOX).tar.bz2
	-mv $(BUSYBOX) busybox
	
	cd busybox; make distclean; cp -a ../collateral/busybox/.busyboxconfig .config;	make install
#--------------------------------------------------------------------------------------

#wget
.PHONY: wget
wget: init
	
	-mkdir _install/usr/lib
	-mkdir _install/lib/i386-linux-gnu
	
	-cp collateral/libs/librt.so.1 _install/lib/i386-linux-gnu/librt.so.1
	-cp collateral/libs/libc.so.6 _install/lib/i386-linux-gnu/libc.so.6
	-cp collateral/libs/libpthread.so.0 _install/lib/i386-linux-gnu/libpthread.so.0
	-cp collateral/libs/ld-linux.so.2 _install/lib/ld-linux.so.2

	-rm -rf wget
	-tar -xf tars/$(WGET).tar.bz2
	-mv $(WGET) wget

	cd wget; ./configure --without-ssl
	
	cd wget; make
	cd _install/usr/bin; rm wget
	cp wget/src/wget _install/usr/bin
	strip _install/usr/bin/wget	
	upx -9 -q _install/usr/bin/wget

 
#--------------------------------------------------------------------------------------
#kexec tools
.PHONY: kexec
kexec: init

	-rm -rf kexec-tools
	-tar -xf tars/$(KEXEC-TOOLS).tar.xz
	-mv $(KEXEC-TOOLS) kexec-tools

	cd kexec-tools; ./configure
	cd kexec-tools; make
	cp kexec-tools/build/sbin/kexec _install/sbin/kexec	
	strip _install/sbin/kexec	
	upx -9 -q _install/sbin/kexec
	# required libraries
	mkdir -p _install/usr/lib/i386-linux-gnu/
	mkdir -p _install/lib/i386-linux-gnu/
	cp -f collateral/libs/liblzma.so.5 _install/usr/lib/i386-linux-gnu/liblzma.so.5
	cp -f collateral/libs/libz.so.1 _install/lib/i386-linux-gnu/libz.so.1
	cp -f collateral/libs/libc.so.6 _install/lib/i386-linux-gnu/libc.so.6
	cp -f collateral/libs/libpthread.so.0 _install/lib/i386-linux-gnu/libpthread.so.0
	
 
#--------------------------------------------------------------------------------------

#bar
.PHONY: bar
bar: init

	-rm -rf bar
	-tar -xf tars/$(BAR).tar.gz
	-mv bar-1.11.1 bar

	cd bar; ./configure
	cd bar; make
	strip bar/bar
	upx -9 -q bar/bar
	-cp bar/bar _install/usr/bin/bar

#--------------------------------------------------------------------------------------

#ethtool
.PHONY: ethtool
ethtool: init

	-rm -rf ethtool
	-tar -xf tars/$(ETHTOOL).tar.gz
	-mv $(ETHTOOL) ethtool

	cd ethtool; ./configure
	cd ethtool; make
	strip ethtool/ethtool
	upx -9 -q ethtool/ethtool
	-cp ethtool/ethtool _install/sbin/ethtool

#--------------------------------------------------------------------------------------
#grub4dos
.PHONY: grub4dos
grub4dos: init
	
	-rm -rf grub4dos
	-tar -xf tars/$(GRUB4DOS).tar.gz
	-mv $(GRUB4DOS) grub4dos

	cp grub4dos/grub.exe _install/sbin/grub.exe

#---------------------------------------------------------------------------------------

#KERNEL
.PHONY: kernel
kernel: init
	#install fresh
	-rm -rf linux
	-tar -xf tars/$(LINUX).tar.xz
	-mv $(LINUX) linux
	
	-rm -rf kernel
	-mkdir kernel
	cd linux; make distclean; make mrproper
	-cp -a collateral/linux/.config linux/.config

	cd linux; make bzImage
	-cp -a linux/arch/x86/boot/bzImage kernel/vmlinuz-rds
	-cp -a linux/usr/gen_init_cpio kernel/gen_init_cpio

#---------------------------------------------------------------------------------------

#Zlib Library
.PHONY: zlib
zlib: init
	#install fresh
	-rm -rf zlib
	-tar -xf tars/$(ZLIB).tar.gz
	-mv $(ZLIB) zlib
	

#Clean old zlib iso and make clean
	-rm _install/lib/libz.so.1
	-rm -rf zlib/_install

#Create necessary directories
	-mkdir zlib/_install
	-mkdir zlib/_install/libdir
	-mkdir _install/lib
	
#make zlib
	path=`pwd`; cd zlib; ./configure --prefix="$$path"/zlib/_install --libdir="$$path"/zlib/_install/libdir --shared
	cd zlib; make
	cd zlib; make install

#copy zlib lib to _install
	cp -a zlib/_install/libdir/libz.so.1.2.5 _install/lib/libz.so.1

#------------------------------------------------------------------------------------------------------------

#ISO
iso:
	rm -f $(APP)
	rm -f $(APP_ISO)
	rm -rf isoimage/
	rm -rf cdrom
	rm -rf images
	rm -rf iso_root
	rm -rf efi

	mkdir -p images cdrom isoimage iso_root efi
	cp -a collateral/license/LICENSE.RTF isoimage/
	cp -a collateral/license/COPYING isoimage/
	cp -a collateral/license/COPYING.LIB isoimage/
	cp -a collateral/license/COPYINGv3 isoimage/
	cp -a grub4dos/grldr isoimage/
	cp -a collateral/grub4dos/menu.lst isoimage/

	cp -a kernel/vmlinuz-rds isoimage/vmlinuz
	cp -a collateral/ifast/PARAM.XML isoimage/

	dd if=/dev/zero of=images/initrd.img bs=1k count=512000
	/sbin/mke2fs -F -v -m0 images/initrd.img
	mount -o loop images/initrd.img ./cdrom
	chmod 4755 ./_install/bin/busybox
	cp -av _install/* ./cdrom/.
	sleep 1s
	umount ./cdrom
	lzma -9 < images/initrd.img > isoimage/initrd.bin

	# for testing
	#cp /mnt/PARAM.XML isoimage/


	mkisofs -R -o ./$(APP_ISO) -b grldr -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoimage/
	#mkisofs -R -o ./$(APP_ISO) -b grldr -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot isoimage/

	mount -o loop $(APP_ISO) ./cdrom
	cp -av ./cdrom/* ./iso_root/
	rm -rf iso_root/boot.cat
	sleep 1s
	umount ./cdrom

	rm -rf isoimage/
	rm -rf cdrom
	rm -rf images
	rm -rf $(APP).tar.gz

	rm -rf isobuilder
	mkdir isobuilder
	mv iso_root isobuilder/
	cp -r collateral/isobuilder/* isobuilder
	cp grub4dos/grldr isobuilder/inc/grldr
	
	tar -cvzf $(APP).tar.gz collateral tars makefile

	# for testing
	#cp ifast.iso /mnt/

