#
# Remote Drive Erase
# Copyright (c) 2011, Intel Corporation.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
# version 2, as published by the Free Software Foundation.
#
# This program is distributed in the hope it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 
# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
#

# Constants
APP = rde
APP_ISO = $(APP).iso
BUSYBOX = busybox-1.18.2
LINUX = linux-2.6.37
SYSLINUX = syslinux-3.84
ZLIB = zlib-1.2.3
COREUTILS = coreutils-8.9
DMIDECODE = dmidecode-2.10
OPENSSL = openssl-1.0.0a

all: clean init busybox kernel syslinux zlib shred dmidecode openssl iso 

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

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

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

#Initialize
init:
	#Setup Init
	#create necessary default directories

	-mkdir _install
	-mkdir _install/bin
	-mkdir _install/dev
	-mkdir _install/etc
	-mkdir _install/etc/init.d
	-mkdir _install/etc/udhcpc
	-mkdir _install/lib
	-mkdir _install/lib/auth
	-mkdir _install/lib/modules
	-mkdir _install/lib/tls
	-mkdir _install/lib/tls/i686
	-mkdir _install/mnt
	-mkdir _install/proc
	-mkdir _install/root
	-mkdir _install/sbin
	-mkdir _install/share
	-mkdir _install/share/locale
	-mkdir _install/sys
	-mkdir _install/sys/class
	-mkdir _install/tmp
	-mkdir _install/usr
	-mkdir _install/usr/bin
	-mkdir _install/usr/lib
	-mkdir _install/usr/lib/auth
	-mkdir _install/usr/local
	-mkdir _install/usr/sbin
	-mkdir _install/usr/share
	-mkdir _install/usr/share/udhcpc
	-mkdir _install/var
	-mkdir _install/var/empty
	-mkdir _install/var/lib
	-mkdir _install/var/lib/misc
	-mkdir _install/var/locks
	-mkdir _install/var/log
	-mkdir _install/var/run

	#populate default directories
	-cp -R collateral/etc/ _install/
	-ln -s /lib _install/lib/tls/i686/cmov
	-cp collateral/default.script _install/usr/share/udhcpc/default.script

	#create block devices for login
	-mknod -m 600 _install/dev/console c 5 1 
	-mknod -m 600 _install/dev/ram0 b 1 0

	#Start Copy from rde libs
	-cp collateral/libs/libresolv.so.2 _install/lib/libresolv.so.2
	-cp collateral/libs/libnsl.so.1 _install/lib/libnsl.so.1
	-cp collateral/libs/libdl.so.2 _install/lib/libdl.so.2
	-cp collateral/libs/libc.so.6 _install/lib/libc.so.6
	-cp collateral/libs/libm.so.6 _install/lib/libm.so.6
	-cp collateral/libs/ld-linux.so.2 _install/lib/ld-linux.so.2
	-cp collateral/libs/libcrypt.so.1 _install/lib/libcrypt.so.1
	-cp collateral/libs/libnss_dns.so.2 _install/lib/libnss_dns.so.2
	-cp collateral/libs/libnss_files.so.2 _install/lib/libnss_files.so.2
	-cp collateral/libs/libpthread.so.0 _install/lib/libpthread.so.0 
	-cp collateral/libs/librt.so.1 _install/lib/librt.so.1
	#End Copy from rde libs

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

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

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

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

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

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

#Syslinux
.PHONY: syslinux
syslinux: init
	#install fresh
	-rm -rf syslinux
	-tar -xf tars/$(SYSLINUX).tar.gz
	-mv $(SYSLINUX) syslinux
	
	-rm collateral/iso/isolinux.bin
	cd syslinux; make clean
	cd syslinux; make
	cp -a syslinux/core/isolinux.bin collateral/iso/isolinux.bin

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

#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
	cd zlib; make clean
	-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.3 _install/lib/libz.so.1

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

#CoreUtils - Shred
.PHONY: shred
shred: init
	#install fresh
	-rm -rf coreutils
	-tar -xf tars/$(COREUTILS).tar.gz
	-mv $(COREUTILS) coreutils
	
	#Create necessary directories
	-mkdir coreutils/_install
	
	#make coreutils
	path=`pwd`; cd coreutils; ./configure --prefix="$$path"/coreutils/_install
	cd coreutils; make
	cd coreutils; make install

	#copy shred to _install
	cp -a coreutils/_install/bin/shred _install/bin/shred
	strip _install/bin/shred
	upx -9 -q _install/bin/shred

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

#DMIDecode
.PHONY: dmidecode
dmidecode: init
	#install fresh
	-rm -rf dmidecode
	-tar -xf tars/$(DMIDECODE).tar.gz
	-mv $(DMIDECODE) dmidecode
	
	cd dmidecode; make
	cp -a dmidecode/dmidecode _install/usr/bin
	strip _install/usr/bin/dmidecode
	upx -9 -q _install/usr/bin/dmidecode

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

#OpenSSL
.PHONY: openssl
openssl: init
	#install fresh
	-rm -rf openssl
	-tar -xf tars/$(OPENSSL).tar.gz
	-mv $(OPENSSL) openssl
	
	#Create necessary directories
	-mkdir openssl/_install
	
	#make openssl
	path=`pwd`; cd openssl; ./config --install_prefix="$$path"/openssl/_install --prefix=/usr --openssldir=/usr/openssl
	cd openssl; make
	cd openssl; make install_sw

	#put the files in the proper places
#	-cp -a collateral/usr/bin/cmdline _install/tmp
	-cp -a openssl/_install/usr/bin/openssl _install/usr/bin
	-cp -a openssl/_install/usr/openssl _install/usr
	-rm -rf _install/usr/openssl/misc
	strip _install/usr/bin/openssl
	upx -9 -q _install/usr/bin/openssl

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

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

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

	#copy licenses and images
	mkdir -p images cdrom isoimage iso_root
	cp -a collateral/license/COPYING.2 isoimage/
	cp -a collateral/license/COPYING.3 isoimage/
	cp -a collateral/license/COPYING.LIB isoimage/
	cp -a collateral/iso/isolinux.bin isoimage/
	cp -a collateral/iso/isolinux.cfg isoimage/
	cp -a kernel/vmlinuz-rde isoimage/vmlinuz
	cp -a collateral/param/PARAM.XML isoimage/

	dd if=/dev/zero of=images/initrd.img bs=1k count=160000
	/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

	mkisofs -R -o ./$(APP_ISO) -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoimage/

	mount -o loop $(APP_ISO) ./cdrom
	cp -av ./cdrom/* ./iso_root/.
	sleep 1s


	umount ./cdrom

	rm -rf isoimage
	rm -rf images
	rm -rf cdrom

