Add basic change for v1453

Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..a6d14b9
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,564 @@
+#!/bin/bash
+
+red='\e[0;31m' # 红色
+green='\e[0;32m' # 绿色
+NC='\e[0m' # 没有颜色
+
+export STAGING_DIR=
+DECONFIG_FILE=
+
+# glibc / musl
+GLIBC_NAME=musl
+ASR_PROJECT_NAME=
+ASR_PROJECT_PATCH=
+
+DIR_BUILD_TARGET=build_dir/target-arm_cortex-a7+neon-vfpv4_"$GLIBC_NAME"_eabi
+DIR_STAGING_TARGET=staging_dir/target-arm_cortex-a7+neon-vfpv4_"$GLIBC_NAME"_eabi
+DIR_BIN=
+
+versionFile='mbtk/include/mbtk_device_info.h'
+version=`cat $versionFile | grep -w 'MBTK_DEVICES_REVISION' | cut -d '"' -f 2 `
+
+usage()
+{
+   echo "Usage : ./build.sh <clean/path>"
+}
+
+function excmd()
+{
+    echo -e "${green}Excmd:${NC} $@ ..."
+#	&& sleep 1
+    $@
+}
+
+function timediff() {
+# time format:date +"%s.%N", such as 1502758855.907197692
+    start_time=$1
+    end_time=$2
+
+    start_s=${start_time%.*}
+    start_nanos=${start_time#*.}
+    end_s=${end_time%.*}
+    end_nanos=${end_time#*.}
+
+    # end_nanos > start_nanos?
+    # Another way, the time part may start with 0, which means
+    # it will be regarded as oct format, use "10#" to ensure
+    # calculateing with decimal
+
+    if [ "$end_nanos" -lt "$start_nanos" ];then
+        end_s=$(( 10#$end_s - 1 ))
+        end_nanos=$(( 10#$end_nanos + 10**9 ))
+    fi
+
+# get timediff
+    time=$(( 10#$end_s - 10#$start_s )).`printf "%03ds" $(( (10#$end_nanos - 10#$start_nanos)/10**6 ))`
+    time_min=$(((end_s - start_s)/60 + 1))
+    echo -e "${green}*${NC} Spend time: "$time \(\~ ${time_min}min\) ${green}***${NC}
+}
+
+init_check()
+{
+
+	if [ ! -f "config/$DECONFIG_FILE" ]; then
+		echo 'Must exec "init.sh" in the first.'
+		exit 1
+	fi
+
+#	if [ ! -f "../pack.sh" ]; then
+#		echo 'Must exec "init.sh" in the first.'
+#		exit 1
+#	fi
+
+}
+
+build_init()
+{
+	init_check
+
+	if [ ! -d "feeds/" ]; then
+		echo "Start build inti..."
+		excmd ./scripts/feeds update -a
+		excmd ./scripts/feeds install -a
+		
+		echo "$DECONFIG_FILE"
+		
+#		if [ "$DECONFIG_FILE" == "defconfig_asr1803p401" ];then
+#			excmd make prereq
+#		fi
+
+		#excmd make $DECONFIG_FILE
+	fi
+	
+	if [ -f .config ];then
+		rm .config
+	fi
+	
+	excmd make $DECONFIG_FILE
+}
+
+copy_bin()
+{
+	echo "Start copy bin..."
+#	[ -f $MBTK_DIR/out/bin/mbtk_audio_set ] && cp -f $MBTK_DIR/out/bin/mbtk_audio_set $MBTK_DIR/bin
+	[ -f $MBTK_DIR/../out/bin/device_info ] && cp -f $MBTK_DIR/../out/bin/device_info $MBTK_DIR/bin
+}
+
+copy_lib()
+{
+	echo "Start copy lib..."
+	[ -f $MBTK_DIR/../out/lib/liblynq_lib.so ] && cp -f $MBTK_DIR/../out/lib/liblynq_lib.so $MBTK_DIR/lib
+#	[ -f $MBTK_DIR/../out/lib/libql_lib.so.* ] && cp -f $MBTK_DIR/../out/lib/libql_lib.so.* $MBTK_DIR/lib
+	
+	ls $MBTK_DIR/../out/lib/libql_lib.so.*
+	if [ $? -eq 0 ];then
+		cp -f $MBTK_DIR/../out/lib/libql_lib.so.* $MBTK_DIR/lib
+	fi
+	
+}
+
+ln_lib()
+{
+	PWD_TEMP=`pwd`
+	
+	cd $ROOTFS_DIR/lib
+	if [ -f liblynq_lib.so ];then
+		[ ! -f libpoweralarm.so ] && ln -s liblynq_lib.so libpoweralarm.so
+		[ ! -f liblynq-qser-audio.so ] && ln -s liblynq_lib.so liblynq-qser-audio.so
+		[ ! -f liblynq-adc.so ] && ln -s liblynq_lib.so liblynq-adc.so
+		[ ! -f liblynq-fota.so ] && ln -s liblynq_lib.so liblynq-fota.so
+		[ ! -f liblynq-qser-gnss.so ] && ln -s liblynq_lib.so liblynq-qser-gnss.so
+		[ ! -f liblynq-log.so ] && ln -s liblynq_lib.so liblynq-log.so
+		[ ! -f liblynq-led.so ] && ln -s liblynq_lib.so liblynq-led.so
+		[ ! -f liblynq-qser-autosuspend.so ] && ln -s liblynq_lib.so liblynq-qser-autosuspend.so
+		[ ! -f liblynq-systime.so ] && ln -s liblynq_lib.so liblynq-systime.so
+		[ ! -f liblynq-qser-thermal.so ] && ln -s liblynq_lib.so liblynq-qser-thermal.so
+		[ ! -f liblynq-qser-sim.so ] && ln -s liblynq_lib.so liblynq-qser-sim.so
+		[ ! -f liblynq-qser-sms.so ] && ln -s liblynq_lib.so liblynq-qser-sms.so
+		[ ! -f liblynq-qser-voice.so ] && ln -s liblynq_lib.so liblynq-qser-voice.so
+		[ ! -f liblynq-qser-network.so ] && ln -s liblynq_lib.so liblynq-qser-network.so
+		[ ! -f liblynq-qser-data.so ] && ln -s liblynq_lib.so liblynq-qser-data.so
+		[ ! -f liblynq-irq.so ] && ln -s liblynq_lib.so liblynq-irq.so
+	fi
+	
+	cd $PWD_TEMP
+}
+
+build_mbtk()
+{
+	copy_toolchain
+	make -C mbtk/ || exit 1
+	
+	ROOTFS_DIR=$DIR_BUILD_TARGET/root-mmp
+	MBTK_DIR=mbtk/rootfs
+	
+	if [ "$SEC_SUPPORT" == "Y" ];then
+		# copy_lib
+		if [ -d $ROOTFS_DIR ];then
+			echo "Start build optee_test..."
+			[ -d mbtk/optee_test ] && make clean -C mbtk/optee_test && make -C mbtk/optee_test
+			echo "Should copy to mbtk/rootfs and build.sh if necessary."
+		fi
+	else
+		if [ -f staging_dir/host/bin/sstrip ];then
+			STRIP_FILE=./staging_dir/host/bin/sstrip
+		else
+			STRIP_FILE=./host/linux64/bin/sstrip
+		fi
+			
+		if [ ! -d $ROOTFS_DIR ];then
+			mkdir -p $ROOTFS_DIR
+		fi
+		
+		excmd cp -rf $MBTK_DIR/* $ROOTFS_DIR/
+		
+		CUR_PWD=`pwd`
+		cd $ROOTFS_DIR/etc/rc.d
+		if [ ! -f S15mbtk_boot_normal -a -f ../init.d/mbtk_boot_normal ];then
+			ln -s ../init.d/mbtk_boot_normal S15mbtk_boot_normal
+		fi
+		if [ ! -f S98mbtk_boot_last -a -f ../init.d/mbtk_boot_last ];then
+			ln -s ../init.d/mbtk_boot_last S98mbtk_boot_last
+		fi
+		if [ ! -f S13mbtk_logd -a -f ../init.d/mbtk_logd ];then
+			ln -s ../init.d/mbtk_logd S13mbtk_logd
+		fi
+
+		cd $CUR_PWD
+
+		if [ -d $MBTK_DIR/lib_tmp ];then
+			rm -rf $MBTK_DIR/lib_tmp
+		fi
+		
+		if [ -d $MBTK_DIR/bin_tmp ];then
+			rm -rf $MBTK_DIR/bin_tmp
+		fi
+		
+		# copy_lib
+		
+		copy_bin
+		
+		cp -r $MBTK_DIR/lib $MBTK_DIR/lib_tmp
+		cp -r $MBTK_DIR/bin $MBTK_DIR/bin_tmp
+		
+		CROSS="arm-openwrt-linux-uclibcgnueabi-" NO_RENAME=1 ; NM="arm-openwrt-linux-uclibcgnueabi-nm" STRIP="$STRIP_FILE" STRIP_KMOD="./scripts/strip-kmod.sh" ./scripts/rstrip.sh $MBTK_DIR/lib_tmp
+		CROSS="arm-openwrt-linux-uclibcgnueabi-" NO_RENAME=1 ; NM="arm-openwrt-linux-uclibcgnueabi-nm" STRIP="$STRIP_FILE" STRIP_KMOD="./scripts/strip-kmod.sh" ./scripts/rstrip.sh $MBTK_DIR/bin_tmp
+		
+		cp $MBTK_DIR/lib_tmp/* $ROOTFS_DIR/lib
+		cp $MBTK_DIR/bin_tmp/* $ROOTFS_DIR/bin
+		rm -rf $MBTK_DIR/lib_tmp
+		rm -rf $MBTK_DIR/bin_tmp
+		
+		[ -f $ROOTFS_DIR/etc/init.d/wpad ] && rm $ROOTFS_DIR/etc/init.d/wpad
+		ln_lib
+	fi
+}
+
+
+build_mbtk_clean()
+{
+	cd mbtk
+	make clean
+	cd ..
+}
+
+build_rootfs()
+{
+	if [ -f ./staging_dir/host/bin/mksquashfs4 ];then
+		EXEC=./staging_dir/host/bin/mksquashfs4
+	else
+		EXEC=./host/linux64/bin/mksquashfs4
+	fi
+	
+	$EXEC $DIR_BUILD_TARGET/root-mmp $DIR_BUILD_TARGET/linux-mmp_"$ASR_PROJECT_NAME"/root.squashfs -nopad -noappend -root-owned -comp xz -Xpreset 8 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -Xbcj arm -b 64k -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -processors 1
+	excmd dd if=$DIR_BUILD_TARGET/linux-mmp_"$ASR_PROJECT_NAME"/root.squashfs of=$DIR_BIN/swd/openwrt-mmp-"$ASR_PROJECT_NAME"-root.squashfs
+}
+
+copy_toolchain()
+{
+	# 1806
+	if [ ! -d mbtk/toolchain ];then
+		if [ ! -d owtoolchain/linux64 ];then
+			"Build all in the first."
+			exit 1
+		fi
+		echo "Start Copy Build Toolchain..."
+		mkdir -p mbtk/toolchain
+		cp -r owtoolchain/linux64 mbtk/toolchain/
+		cp -r mbtk/toolchain/linux64/include/* mbtk/toolchain/linux64/usr/include/
+		cp -r $DIR_STAGING_TARGET/usr/* mbtk/toolchain/linux64/usr/
+		cp -r mbtk/toolchain/linux64/usr/include/* mbtk/toolchain/linux64/include/
+		cp -drf $DIR_BUILD_TARGET/audio/obj/olibs/* mbtk/toolchain/linux64/usr/lib/
+		cp -r marvell/services/audio_if/include/* mbtk/toolchain/linux64/include/
+	fi
+	
+	if [ "$SEC_SUPPORT" == "Y" ];then
+		if [ -f mbtk/gcc-arm-none-linux-gnueabihf.tar.gz -a ! -d mbtk/toolchain/gcc-arm-arm-none-linux-gnueabihf ];then
+			echo "Dec file : gcc-arm-none-linux-gnueabihf.tar.gz to mbtk/toolchain."
+			tar zxf mbtk/gcc-arm-none-linux-gnueabihf.tar.gz -C mbtk/toolchain
+		fi
+	fi
+}
+
+build_oem()
+{
+	excmd mkdir -p $DIR_BUILD_TARGET/root-mmp/NVM/oem_data
+	excmd rm -rf $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_fs
+	excmd mkdir -p  $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_fs
+	excmd cp -fpR target/linux/mmp/$ASR_PROJECT_NAME/oem_fs/* $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_fs/
+	excmd staging_dir/host/bin/mkfs.ubifs -m 2048 -e 126976 -c 156 -F --space-fixup --compr=zlib -o $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_data.ubifs -d $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_fs
+	excmd mkdir -p  $DIR_BIN/swd/
+	if [ -e ./$ASR_PROJECT_NAME$ASR_PROJECT_PATCH-ubinize-oem.cfg ]; then 
+		excmd cp -fpR ./$ASR_PROJECT_NAME$ASR_PROJECT_PATCH-ubinize-oem.cfg $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/ubinize-oem.cfg; 
+	else 
+		excmd cp -fpR ./target/linux/mmp/image/ubinize-oem.cfg $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/ubinize-oem.cfg; 
+	fi
+	excmd cd $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME; 
+	excmd sed -i 's/vol_size=.*KiB/vol_size=19344KiB/g' ubinize-oem.cfg; ../../../staging_dir/host/bin/ubinize  -m 2048 -p 131072 -s 2048  -o ../../../$DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_data.ubi ubinize-oem.cfg 
+	excmd cd ../../..
+	excmd cp -fpR $DIR_BUILD_TARGET/linux-mmp_$ASR_PROJECT_NAME/oem_data.ubi $DIR_BIN/swd/openwrt-mmp-$ASR_PROJECT_NAME-oem_data.ubi
+}
+
+build_busybox()
+{
+	if [ -d mbtk/busybox-1.36.1 ];then
+		CUR_PWD=`pwd`
+		cd mbtk/busybox-1.36.1
+		[ -f busybox.config ] && cp busybox.config .config
+		make install
+		
+		if [ ! -d ../rootfs/bin ];then
+			mkdir ../rootfs/bin
+		fi
+
+		if [ -f _install/bin/busybox ]; 
+		then
+			cp -f _install/bin/busybox ../rootfs/bin
+		fi
+
+		cd $CUR_PWD
+	fi
+}
+
+build()
+{
+	# 1806
+#	if [ "$DECONFIG_FILE" == "defconfig_asr1806p301" ];then
+		excmd make $1/{clean,compile} V=99 2>&1 | tee build.log
+#	else
+#		excmd make $1/{clean,compile,install} V=99 2>&1 | tee build.log
+#	fi
+}
+
+mbtk_version_update()
+{
+	# SDK
+	if [ -f mbtk/mbtk_version ];then
+		PATCH_INDEX=`cat mbtk/mbtk_version | grep PATCH_INDEX | cut -d '=' -f 2`
+		if [ -z $PATCH_INDEX ];then
+			PATCH_INDEX=0
+		fi
+		if [ $PATCH_INDEX -lt 10 ];then
+			PATCH_INDEX=00"$PATCH_INDEX"
+		else
+			if [ $PATCH_INDEX -lt 100 ];then
+				PATCH_INDEX=0"$PATCH_INDEX"
+			fi
+		fi
+		
+		# T108v05.02b01_YX.00
+		MBTK_VERSION=${version#*:= }
+		MBTK_VERSION_1=`echo $MBTK_VERSION | cut -d '.' -f 1`
+		MBTK_VERSION_2=`echo $MBTK_VERSION | cut -d '.' -f 2`
+		MBTK_VERSION_3=`echo $MBTK_VERSION | cut -d '.' -f 3`
+		if [[ $MBTK_VERSION_3 == *_* ]];then		# 有 '_'
+			MBTK_VERSION_3_1=`echo $MBTK_M1901_VERSION_3 | cut -d '_' -f 1`
+			MBTK_VERSION_3_2=`echo $MBTK_M1901_VERSION_3 | cut -d '_' -f 2`
+			
+			MBTK_VERSION=$MBTK_VERSION_1.$MBTK_VERSION_2."$PATCH_INDEX"_$MBTK_VERSION_3_2
+		else
+			MBTK_VERSION=$MBTK_VERSION_1.$MBTK_VERSION_2.$PATCH_INDEX
+		fi
+		
+		echo "Version : $MBTK_VERSION"
+		sed -i "s/$version/$MBTK_VERSION/" $versionFile
+	fi
+}
+
+build_menuconfig()
+{
+	build_init
+	make menuconfig
+
+	cp -f .config config/$DECONFIG_FILE
+}
+
+config_init()
+{
+	PROJECT=`cat   build_version | grep -w 'PROJECT'   | cut -d '=' -f 2`
+#	PYTHON_SUPPORT=`cat   build_version | grep -w 'PYTHON_SUPPORT'   | cut -d '=' -f 2`
+	SEC_SUPPORT=`cat   build_version | grep -w 'SEC_SUPPORT'   | cut -d '=' -f 2`
+	echo "PROJECT = $PROJECT"
+#	echo "PYTHON_SUPPORT = $PYTHON_SUPPORT"
+	echo "SEC_SUPPORT = $SEC_SUPPORT"
+	if [ "$PROJECT" == "L901CD-L" ];then
+		ASR_PROJECT_NAME=asr1903
+		ASR_PROJECT_PATCH=p501
+	elif [ "$PROJECT" == "T108" -o "$PROJECT" == "T108-2" -o "$PROJECT" == "L508_X6" ];then
+		ASR_PROJECT_NAME=asr1806
+		ASR_PROJECT_PATCH=p301
+	else
+		ASR_PROJECT_NAME=asr1803
+		ASR_PROJECT_PATCH=p401
+	fi
+	
+	DECONFIG_FILE=defconfig_$ASR_PROJECT_NAME$ASR_PROJECT_PATCH
+		
+	if [ "$SEC_SUPPORT" == "Y" ];then
+		if [ "$GLIBC_NAME" == "glibc" ];then
+			DIR_BIN=bin/"$ASR_PROJECT_NAME$ASR_PROJECT_PATCH"sec_glibc
+		else
+			DIR_BIN=bin/"$ASR_PROJECT_NAME$ASR_PROJECT_PATCH"sec
+		fi
+		sed -i "/.*CONFIG_PACKAGE_mbtk-rootfs/c\CONFIG_PACKAGE_mbtk-rootfs=y" config/$DECONFIG_FILE
+	else
+		if [ "$GLIBC_NAME" == "glibc" ];then
+			DIR_BIN=bin/"$ASR_PROJECT_NAME$ASR_PROJECT_PATCH"_glibc
+		else
+			DIR_BIN=bin/"$ASR_PROJECT_NAME$ASR_PROJECT_PATCH"
+		fi
+		sed -i "/.*CONFIG_PACKAGE_mbtk-rootfs/c\# CONFIG_PACKAGE_mbtk-rootfs is not set" config/$DECONFIG_FILE
+	fi
+}
+
+
+################################################################
+### Start ########
+################################################################
+if [ ! -f build_version ];then
+	echo "No found file: build_version"
+	exit 1
+else
+	config_init
+fi
+
+start=$(date +"%s.%N")
+starttime=`date +"%Y-%m-%d %H:%M:%S"`
+
+ROOTFS_DIR="mbtk/rootfs"
+ln_lib
+
+if [ -n "$1" ] ;then	#有参数
+	if [ ! -d "feeds/" -a "$1" != "menuconfig" ]; then
+		echo "Must make all in the first."
+		exit 1
+	fi
+
+	case "$1" in
+		clean)
+			# Can not remove toolchain.
+			# [ -d mbtk/toolchain ] && rm -rf mbtk/toolchain
+			excmd make distclean
+			;;
+		kernel)
+			build target/linux
+			;;
+		oem)
+			if [ "$SEC_SUPPORT" == "Y" ];then
+				echo "No support."
+			else
+				build_oem
+			fi
+			;;
+		obm)
+			excmd make package/boot/obm-mmp/{clean,compile} V=99 2>&1 | tee build.log
+			excmd cp -f $DIR_BIN/"$ASR_PROJECT_NAME"_TLoader_QSPINAND.bin $DIR_BIN/swd
+			excmd cp -f $DIR_BIN/"$ASR_PROJECT_NAME"_TLoader_QSPINAND_ProductBuild.bin $DIR_BIN/swd
+			;;
+		uboot)
+			excmd make package/boot/uboot-mmp/{clean,compile} V=99 2>&1 | tee build.log
+			excmd cp -f $DIR_BIN/openwrt-mmp-"$ASR_PROJECT_NAME"-u-boot.bin $DIR_BIN/swd
+			;;
+		ffmpeg)
+			build package/feeds/packages/ffmpeg
+			;;
+		mbtk-rootfs)
+			if [ "$SEC_SUPPORT" == "Y" ];then
+				excmd make package/$1/{clean,compile} V=99 2>&1 | tee build.log
+			else
+				echo "No support."
+			fi
+			;;
+		openssl)
+			excmd make package/libs/$1/{clean,compile} V=99 2>&1 | tee build.log
+			;;
+		mbtk)
+			build_mbtk
+			;;
+		mbtk_clean)
+			build_mbtk_clean
+			;;
+		rootfs)
+			if [ "$SEC_SUPPORT" == "Y" ];then
+				echo "No support."
+			else
+				build_mbtk
+				build_rootfs
+			fi
+			;;
+		lte)
+			build package/network/services/lte-telephony
+			;;
+		audio)
+			build package/services/audio_if
+			;;
+		fstools)
+			build package/system/fstools
+			;;
+		ril)
+			build package/services/ril
+			;;
+		gnss)
+			build package/services/gnss
+			;;
+		libprop2uci)
+			build package/libs/libprop2uci
+			;;
+		con_mgr)
+			build package/services/con_mgr
+			;;
+		ecall)
+			build package/services/ecall_daemon
+			;;
+		adbd)
+			build package/utils/adbd
+			;;
+		menuconfig)
+			build_menuconfig
+			;;
+		openssl)
+			excmd make package/libs/openssl/{clean,compile,install} V=99 2>&1 | tee build.log
+			;;
+		busybox)
+			build_busybox
+			;;
+		*)
+            SUB_DIR=`find package/ -type d -name "$1" | sed -n '1,1p'`
+            if [ x$SUB_DIR = x ]
+            then
+                echo -e "${red}==Have No module: $1==${NC}"
+                exit 1
+            fi
+			echo -e "Build: ${green}${1}${NC} ${red}${SUB_DIR}${NC}"
+            build $SUB_DIR
+			;;
+	esac
+else	# 全编
+	
+	cp $versionFile $versionFile.backup
+	# Change version
+	mbtk_version_update
+	
+	# Start build.
+	excmd build_init
+	#if [ -d mbtk/toolchain ];then
+	#	build_mbtk
+	#fi
+	# OPT_SEC=y
+	if [ "$SEC_SUPPORT" == "Y" ];then
+		# build mbtk lib in the first.
+		build_mbtk
+	
+		excmd make OPT_SEC=y -j8 V=99 2>&1 | tee build.log
+	else
+		excmd make -j8 V=99 2>&1 | tee build.log
+	fi
+	
+	mv $versionFile.backup $versionFile
+	
+	tail -n1 build.log | grep Error
+	if [ $? -eq "0" ]; then
+		echo "********************Build Fail*****************"
+	else
+		if [ "$SEC_SUPPORT" == "Y" ];then
+			echo "********************Build Success*****************"
+		else
+			echo "********************Build Success*****************"
+			copy_toolchain
+			build_busybox
+			build_mbtk
+			build_rootfs
+		fi
+
+		# ./pack.sh all
+	fi
+fi
+excmd date >> build.log
+end=$(date +"%s.%N")
+endtime=`date +"%Y-%m-%d %H:%M:%S"`
+
+echo -e "${green}***********************************${NC}"
+echo -e "${green}* ${NC}Start time: "$starttime ${green}*${NC}
+echo -e "${green}* ${NC}End   time: "$endtime ${green}*${NC}
+timediff $start $end
+echo -e "${green}***********************************${NC}"