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}"