#!/bin/bash

### Pre-condition for 400 version
###
### 1. Donwload nhlos folder for target chipset
###
### 2. Add 'engmode' feature
### in trustzone_images/build/ms/build_config.xml

### To setup on new trustzone_image, modify ../nhlos/contents.xml.
### This is to include TA images when binary build.
### Finaly, Check secureboot chain for signing engmode TA. (by bootloader team)

shopt -s extglob

source ./utils.sh
source ./path.sh

export COMP_PATH_BASE=$(pwd)
export COMP_PATH_SECAPP=$COMP_PATH_BASE/swd/Qualcomm
export COMP_PATH_EM_COMMON=$COMP_PATH_BASE/common
export COMP_PATH_EM_TA_COMMON=$COMP_PATH_BASE/swd/ta_common

export SEC_SOC_NUM=$1
export EMBUILD_MODE=$2

function show_invalid_param()
{
	print_info "------------------------------------------------------------------"
	print_info "Please check parameter, "
	print_info "Your args (Chipset:${SEC_SOC_NUM}) (EmBuildMode:${EMBUILD_MODE})"
	print_info "[Usage] ./build_QSEE.sh [Chipset] [EmBuildMode]"
	print_info "[Chipset Support] 710, 845, 6150, 7150, 8150, 8250(710:a8sq, 845:star, 6150:a70, 7150:R1Q, a90, 8150:beyond, 8250, hb), 7250"
	print_info "[EmBuildMode Support] test, integ"
	print_info "------------------------------------------------------------------"
}

function validate_params()
{
	print_info "================================== PREPARING =================================="

	if [ "$SEC_SOC_NUM" ]; then
		printGreen "Engineering Mode Qsee TA build For MSM$SEC_SOC_NUM"
		case "$SEC_SOC_NUM" in
		710)
			BUILD_ID=XAWAANAA
			COMP_PATH_TZIMG=$SDM710_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT=imprint2
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc
			CHIPSET_NAME=sdm710
		;;
		845)
			BUILD_ID=WAXAANAA
			COMP_PATH_TZIMG=$SDM845_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=qualcomm_sdm845_scrypto_v2.2_beta_1_x32_release.a
			IMPRINT=imprint2
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc
			CHIPSET_NAME=sdm845
		;;
		6150)
			BUILD_ID=PAZAANAA
			COMP_PATH_TZIMG=$SM6150_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT=imprint2
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc
			export MUSL32PATH=$LLVMROOT/armv7-none-eabi/libc
			CHIPSET_NAME=sm6150
			UILD_CHIPSET_NAME=sm6150
		;;
		7150)
			BUILD_ID=QAOAANAA
			COMP_PATH_TZIMG=$SM7150_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT=imprint2
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc
			CHIPSET_NAME=sm7150
			UILD_CHIPSET_NAME=sm7150
		;;
		7250)
			BUILD_ID=JAFAANAA
			COMP_PATH_TZIMG=$SM7250_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/scorpion/$BUILD_ID/scorpion
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.5_x32_qsee_release.a
			IMPRINT=imprint256
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc
			CHIPSET_NAME=sm7250
			UILD_CHIPSET_NAME=sm7250
		;;
		8150)
			BUILD_ID=YAQAANAA
			COMP_PATH_TZIMG=$SM8150_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT=imprint2
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc

			CHIPSET_NAME=sm8150
			BUILD_CHIPSET_NAME=sm8150
		;;
		8250)
			BUILD_ID=DARAANAA
			COMP_PATH_TZIMG=$SM8250_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.5_x32_qsee_release.a
			IMPRINT=imprint256
			export LLVM_VERSION=3.9.6
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc

			CHIPSET_NAME=sm8250
			BUILD_CHIPSET_NAME=sm8250
		;;
		8350)
			BUILD_ID=LAVAANAA
			COMP_PATH_TZIMG=$SM8350_TRUSTZONE_IMAGE_PATH
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/engmode/build
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/engmode
			SCRYPTO_LIB=scrypto_v2.5_x32_qsee_release.a
			IMPRINT=imprint256
			export LLVM_VERSION=10.0.4
			export LLVMROOT=$EM_LLVM_ROOT/$LLVM_VERSION
			export LLVMBIN=$LLVMROOT/bin
			export LLVMLIB=$LLVMROOT/lib/clang/$LLVM_VERSION/lib/linux
			export LLVMINC=$LLVMROOT/aarch64-none-elf/libc/include
			export LLVM32INC=$LLVMROOT/armv7-none-eabi/libc/include
			export LLVMTOOLPATH=$LLVMROOT/tools/bin
			export LLVMCLANG=$LLVMROOT/lib/clang/$LLVM_VERSION
			export MUSL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSBUILD_IDL32PATH=$LLVMROOT/armv7-none-eabi/libc
			export MUSLPATH=$LLVMROOT/aarch64-none-elf/libc

			CHIPSET_NAME=sm8350
			BUILD_CHIPSET_NAME=sm8350
		;;
		*)
			return 1
		;;
		esac
	else
		return 1
	fi

	# Check build mode parameter
	if [ "$EMBUILD_MODE" ]; then
		printGreen "Engineering Mode Mobicore TA build as $EMBUILD_MODE mode"
		case "$EMBUILD_MODE" in
			test|integ)
			    ;;
			*)
				return 1
				;;
		esac
	else
		return 1
	fi

	return 0
}

function delete_local_output()
{
	## trustzone_images/core/bsp/trustzone/qsapps/engmode/
	rm -rf $COMP_PATH_OUTPUT
	mkdir -p $COMP_PATH_OUTPUT

	## trustzone_images/core/securemsm/trustzone/qsapps/engmode
	rm -rf $COMP_PATH_SRC
	mkdir -p $COMP_PATH_SRC/build

	rm -rf $COMP_PATH_BASE/../Bin/TA/msm$SEC_SOC_NUM
	mkdir -p $COMP_PATH_BASE/../Bin/TA/msm$SEC_SOC_NUM

	mkdir -p $COMP_PATH_TZIMG/build/ms/bin/$BUILD_ID
}

function copy_400_sconscript()
{
	case "$SEC_SOC_NUM" in
		710|845)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/signing_SConscript $COMP_PATH_OUTPUT/../SConscript
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript $COMP_PATH_SRC/src/SConscript
			;;
		6150|7150|8150|7250)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript $COMP_PATH_SRC/src/SConscript
			;;
		8250|8350)
			cp -f $COMP_PATH_SECAPP/build/SConscript $COMP_PATH_SRC/SConscript
			;;
		*)
			;;
	esac
}

function copy_sconscript()
{
	case "$SEC_SOC_NUM" in
		710|845|6150|7150|8150|8250|7250|8350)
			copy_400_sconscript
			;;
		*)
			print_error "Invalid chipset in copy_sconscript ($SEC_SOC_NUM)"
			return -1
	esac

	return 0
}

function copy_source_files_to_nhlos_folder()
{
	## include files
	cp -rf $COMP_PATH_SECAPP/inc/ $COMP_PATH_SRC/inc/
	cp -rf $COMP_PATH_EM_COMMON/include/* $COMP_PATH_SRC/inc/
	cp -rf $COMP_PATH_EM_TA_COMMON/include/* $COMP_PATH_SRC/inc/


	#check this part Anrii. copy cryptocore build header file -> $COMP_PATH_SRC/inc/
	#cp -rf /data/merge/DEV/Solution/SecurityDev/SubTG/Multibuild/DEV/multibuild/prebuilt/arm/cryptocore/include/openssl/ $COMP_PATH_SRC/inc/

	case "$SEC_SOC_NUM" in
		710|845|6150|7150|8150|8250|7250|8350)
			cp -rf $COMP_PATH_TZIMG/ssg/api/securemsm/trustzone/qsee $COMP_PATH_SRC/inc/
			;;
		*)
		cp -rf $COMP_PATH_TZIMG/core/api/securemsm/trustzone/qsee $COMP_PATH_SRC/inc/
	esac


	## source files
	cp -rf $COMP_PATH_SECAPP/src/* $COMP_PATH_SRC/
	cp -rf $COMP_PATH_EM_COMMON/src/* $COMP_PATH_SRC/
	cp -rf $COMP_PATH_EM_TA_COMMON/src/* $COMP_PATH_SRC/


	## SCrypto2.0 files
	cp -rf $COMP_PATH_EM_TA_COMMON/libs/* $COMP_PATH_SRC/
	cp -vf $COMP_PATH_SECAPP/scrypto/imprint* $COMP_PATH_SRC/

	## SConscript
	copy_sconscript
	if [ $? != 0 ]; then
		print_error "Failed copy_sconscript."
		return 1
	else
		print_success "Success copy_sconscript."
		return 0
	fi
}

function restore_dependancy()
{
	case "$SEC_SOC_NUM" in
		6150|7150|8150|7250|8350)
			find $COMP_PATH_TZIMG/ssg/bsp/trustzone/build/ -type f -name "*.backup" -exec mv {} $COMP_PATH_TZIMG/ssg/bsp/trustzone/build/SConscript \;
		;;
		8250)
			find $COMP_PATH_TZIMG/apps/bsp/trustzone/build/ -type f -name "*.backup" -exec mv {} $COMP_PATH_TZIMG/apps/bsp/trustzone/build/apps_config.py \;
		;;
	esac

	#find $SM8150_TRUSTZONE_IMAGE_PATH/ssg/bsp/trustzone/build/ -type f -name "*.backup" -exec rename -f 's\/backup$//' {} \;

}

function change_dependancy()
{
#	add_libc_script="'s/for app in apps32/apps32.append(\"\$\{BUILD_ROOT\}\/ssg\/securemsm\/trustzone\/qsapps\/engmode\/src\/SConscript\"\)\n&/g'"
#	sed -i*.backup -e "$add_libc_script" $SM8150_TRUSTZONE_IMAGE_PATH/ssg/bsp/trustzone/build/SConscript
#	sed -i*.backup -e "$add_libc_script" $SM8150_TRUSTZONE_IMAGE_PATH/ssg/bsp/trustzone/build/SConscript

	restore_dependancy
	case "$SEC_SOC_NUM" in
		6150|7150|8150|7250)
			sed -i*.backup -e 's/for app in apps32/apps32.append(\"\$\{BUILD_ROOT\}\/ssg\/securemsm\/trustzone\/qsapps\/engmode\/SConscript\"\)\n&/g' $COMP_PATH_TZIMG/ssg/bsp/trustzone/build/SConscript
		;;
		8250)
#			sed -i*.backup -e "s/# sec_fr/# engmode\nengmode_dict = {\n  'aliases' : ['engmode'],\n  'arch' : 'A53_64',\n  'tags' : ['ENGMODE_IMAGE'],\n  'sconspath' : '\${BUILD_ROOT}\/ssg\/securemsm\/trustzone\/qsapps\/engmode\/src\/SConscript',\n}\naddParams('engmode', engmode_dict)\n#======================================================\n&/g" $SM8250_TRUSTZONE_IMAGE_PATH/apps/bsp/trustzone/build/apps_config.py
			sed -i*.backup -e "s/# sec_fr/# engmode\nengmode_dict = {\n  'aliases' : ['engmode'],\n  'arch' : 'scorpion',\n  'tags' : ['ENGMODE_IMAGE'],\n  'sconspath' : '\${BUILD_ROOT}\/ssg\/securemsm\/trustzone\/qsapps\/engmode\/SConscript',\n}\naddParams('engmode', engmode_dict)\n#======================================================\n&/g" $COMP_PATH_TZIMG/apps/bsp/trustzone/build/apps_config.py # This is for 32bit

		;;
	esac

	check_return_code $? "sed failed"
}

function build_400_TA()
{
	case "$SEC_SOC_NUM" in
		710)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sdm670 --config=build_config_em.xml
			build_result=$?
			check_return_code $? "QC_build_sdm710(670)_TA"

			java -jar $COMP_PATH_BASE/../tools/signclient.jar \
				 -model SM-G8870_CHN_CHC_CHN0 \
				 -runtype qc_secimg40_engmode \
				 -input $COMP_PATH_OUTPUT/engmode.mbn \
				 -output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;
		845)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sdm845 --config=build_config_em.xml
			build_result=$?
			check_return_code $? "QC_build_sdm845_TA"

			java -jar $COMP_PATH_BASE/../tools/signclient.jar \
				 -model SM-G960U_NA_VZW_USA0 \
				 -runtype qc_secimg40_engmode \
				 -input $COMP_PATH_OUTPUT/engmode.mbn \
				 -output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;
		6150)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			change_dependancy
			python build_all.py -b TZ.XF.5.0 CHIPSET=sm6150 --cnb --config=build_config_em.xml
			build_result=$?
			restore_dependancy
			check_return_code $? "QC_build_6150_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model SM-A705FN_EUR_XX_EUR0 \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/engmode.mbn \
					-output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;

		7150)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			change_dependancy
			python build_all.py -b TZ.XF.5.0 CHIPSET=sm7150 --cnb --config=build_config_em.xml
			build_result=$?
			restore_dependancy
			check_return_code $? "QC_build_7150_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model SM-A805F_EUR_XX_EUR0 \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/engmode.mbn \
					-output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;
		8150)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			change_dependancy
			python build_all.py -b TZ.XF.5.0 CHIPSET=sm8150 --cnb --config=build_config_em.xml
			build_result=$?
			restore_dependancy
			check_return_code $build_result "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model SM-G975U_NA_VZW_USA0 \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/engmode.mbn \
					-output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;
		8250)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			change_dependancy
			python build_all.py -b TZ.XF.5.0 CHIPSET=sm8250 --cnb --config=build_config_em.xml
			build_result=$?
			restore_dependancy
			check_return_code $build_result "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/build/signclient.jar \
					-model SM-G986U_NA_VZW_QKEY0 \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/engmode.mbn \
					-output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;
		8350)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			change_dependancy
			python build_all.py -b TZ.XF.5.0 CHIPSET=lahaina --cnb --config=build_config_em.xml
			build_result=$?
			restore_dependancy
			check_return_code $build_result "QC_build_400_TA"
			java -jar $COMP_PATH_SECAPP/build/signclient.jar \
					-model SM-G991U_NA_VZW_QKEY0 \
					-runtype qc_secimg50_bl \
					-input $COMP_PATH_OUTPUT/engmode.mbn \
					-output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;
		7250)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_em.xml .

			change_dependancy
			python build_all.py -b TZ.XF.5.0 CHIPSET=saipan --cnb --config=build_config_em.xml
			build_result=$?
			restore_dependancy
			check_return_code $build_result "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model SM-G986U_NA_VZW_QKEY0 \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/engmode.mbn \
					-output $COMP_PATH_OUTPUT/signed_engmode.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_engmode.mbn engmode
			;;

		*)
			;;
	esac

	return $build_result
}

function build_TA()
{
	case "$SEC_SOC_NUM" in
		710|845|6150|7150|8150|8250|7250|8350)
			build_400_TA
			return $?
			;;
		*)
			print_error "Invalid chipset in build_TA ($SEC_SOC_NUM)"
			return -1
	esac
}

function push_to_device()
{
#	cd $COMP_PATH_BASE/../Bin/TA/msm$SEC_SOC_NUM/
	cd $COMP_PATH_OUTPUT

	adb remount
	adb shell mount -o rw,remount /vendor/firmware_mnt

	adb push engmode.b00 /data/
	adb push engmode.b01 /data/
	adb push engmode.b02 /data/
	adb push engmode.b03 /data/
	adb push engmode.b04 /data/
	adb push engmode.b05 /data/
	adb push engmode.b06 /data/
	adb push engmode.b07 /data/
	adb push engmode.mdt /data/
	adb shell cp /data/engmode.* /vendor/firmware_mnt/image/

	print_info "ENGMODE TA output in device"
	adb shell ls -al /vendor/firmware_mnt/image/engmode*
}

function copy_ta_to_main_branch()
{
	cd $COMP_PATH_OUTPUT

	ARR_TA_FOLDER=()
	case "$SEC_SOC_NUM" in
		710)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SDM710_SPF1.0/TZ.XF.5.0/trustzone_images/build/ms/bin/XAWAANAA/unsigned/")
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SDM710_SPF2.0/TZ.XF.5.0/trustzone_images/build/ms/bin/XAWAANAA/unsigned/")
			;;
		845)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SDM845_LA1.0/trustzone_images/build/ms/bin/WAXAANAA/unsigned/")
			;;
		6150)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM6150_SPF1.0/TZ.XF.5.0.3/trustzone_images/build/ms/bin/PAZAANAA/unsigned/")
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM6150_SPF2.0/TZ.XF.5.0.3/trustzone_images/build/ms/bin/PAZAANAA/unsigned/")
			;;
		7150)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM6150_SPF1.0/TZ.XF.5.0.3/trustzone_images/build/ms/bin/QAOAANAA/unsigned/")
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM6150_SPF2.0/TZ.XF.5.0.3/trustzone_images/build/ms/bin/QAOAANAA/unsigned/")
			;;
		8150)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM8150_FUSION_LA1.5/sm8150_tz/trustzone_images/build/ms/bin/YAQAANAA/unsigned/")
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM8150_FUSION_LA2.0/sm8150p_tz/trustzone_images/build/ms/bin/YAQAANAA/unsigned/")
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM8150_LA1.0/trustzone_images/build/ms/bin/YAQAANAA/unsigned/")
			;;
		8250)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM8250_LA1.0/sm8250_tz/trustzone_images/build/ms/bin/DARAANAA/unsigned/")
			;;
		8350)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM8350_LA1.0/trustzone_images/build/ms/bin/LAVAANAA/unsigned/")
			;;
		7250)
			ARR_TA_FOLDER+=("$P4_DEFAULT_PATH/NHLOS/MAIN/SM7250_SPF1.0/TZ.XF.5.0/trustzone_images/build/ms/bin/JAFAANAA/unsigned/")
			;;
		*)
			show_invalid_param
			;;
	esac

	for value in "${ARR_TA_FOLDER[@]}"; do
		echo "copy path = $value"
		cp engmode.mbn $value
		check_return_code $? QUALCOMM_TA_COPY_$SEC_SOC_NUM
	done

	return $?
}

## Check Parameters
validate_params
if [ $? != 0 ]; then
	show_invalid_param
	print_error "Invaild parameters."
	exit
fi

## Delete Local Object files
delete_local_output

## Copy soruce files
copy_source_files_to_nhlos_folder
if [ $? != 0 ]; then
	print_error "Failed copy source files to nhlos folder"
	exit
fi

## Build ENGMODE TA
build_TA
if [ $? != 0 ]; then
	print_error "Failed build_TA"
	exit
fi

if [ "$EMBUILD_MODE" = "test" ]
then
	## Push binary to device
	echo ""
	adb start-server
	RET="$(adb get-state)"
	if [ "$RET" = "device" ]; then
		print_success "device is connected. push engineeringmode binary to device."
		push_to_device
	else
		print_warning "device isn't connected. skip engineeringmode binary push"
	fi
elif [ "$EMBUILD_MODE" = "integ" ]
then
	copy_ta_to_main_branch
	check_return_code $? QUALCOMM_TA_COPY
fi

#rm -rf $COMP_PATH_BASE/../Bin/
