#!/bin/bash

### Pre-condition for 300 version
###
### 1. Donwload nhlos folder for target chipset
###
### 2. Add 'vaultkeeper' feature
###	in ../build/ms/build.sh
###	in ../core/bsp/trustzone/qsapps/build/secimage.xml *app_id : 0x0000000000001000
###	in ../core/kernel/libstd/build/SConscript
###	in ../core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/SConscript
###	in ../core/securemsm/trustzone/qsapps/libs/applib/proxy/build/SConscript
###	in ../core/securemsm/trustzone/qsapps/libs/applib/qsee/build/SConscript
###
### 3. Copy sampleapp folder to vaultkeeper folder (copy_300_sconscript function will do this)
###	    core/kernel/libstd/build/
###     core/securemsm/trustzone/qsapps/libs/applib/qsee/build/
###     core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/
###     core/securemsm/trustzone/qsapps/libs/applib/proxy/build/

### Pre-condition for 400 version
###
### 1. Donwload nhlos folder for target chipset
###
### 2. Add 'vaultkeeper' 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 vaultkeeper TA. (by bootloader team)

shopt -s extglob

source utils.sh
source configure.sh

export COMP_PATH_BASE=$(pwd)
export COMP_PATH_SECAPP=$COMP_PATH_BASE/app/platform/qsee
export COMP_PATH_VAULT_COMMON=$COMP_PATH_BASE/app
###### LLVM_ROOT : Perforce //TOOLS/toolchains/Qualcomm/llvm/
export VK_LLVM_ROOT=$P4_ROOT_PATH/TOOLS/toolchains/Qualcomm/llvm

export SEC_SOC_NUM=$1
export VKBUILD_MODE=$2

if [ "$2" == "" ]; then
	VKBUILD_MODE=release
fi

function show_invalid_param()
{
	print_info "------------------------------------------------------------------"
	print_info "Please check parameter, "
	print_info "Your args (Chipset:${SEC_SOC_NUM}) (VkBuildMode:${VKBUILD_MODE})"
	print_info "[Usage] ./build_QSEE.sh [Chipset] [VkBuildMode]"
	print_info "[Chipset Support] 8150, 845, 660, 450, 8998, 8917, 710, 429, 710, 6150, 7150, 8996, 429_450, 8250, 439, 439_450"
	# debug mode : Add logs for debugging
	# no_key : Disable RPMB forcely(include debug mode)
	print_info "[VkBuildMode Support - default release] debug, no_key"
	print_info "------------------------------------------------------------------"
}

function validate_params()
{
	print_info "================================== PREPARING =================================="

	if [ "$SEC_SOC_NUM" ]; then
		printGreen "VaultKeeper QSEE TA build For MSM$SEC_SOC_NUM"
		case "$SEC_SOC_NUM" in
		8996)
			BUILD_ID=IADAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/MSM8996_LA2.0.2/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8996_scrypto_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			BRANCH_SOC_NUM=$SEC_SOC_NUM
			BUILD_SOC_NUM=$SEC_SOC_NUM
			CHIPSET_NAME=msm8996
			BUILD_CHIPSET_NAME=msm8996
			;;
		8998)
			BUILD_ID=RAGAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/MSM8998_LA2.0.1/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8998_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			BRANCH_SOC_NUM=$SEC_SOC_NUM
			BUILD_SOC_NUM=$SEC_SOC_NUM
			CHIPSET_NAME=msm8998
			;;
		450)
			BUILD_ID=SANAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM450_LA3.0.1/TZ.BF.4.0.5/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8953_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			BRANCH_SOC_NUM=8953
			BUILD_SOC_NUM=8953
			CHIPSET_NAME=sdm450
			BUILD_CHIPSET_NAME=msm8953
			;;
		429_450) # JDM - A20s
			BUILD_ID=SANAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM429_SPF1.0.1/TZ.BF.4.0.5/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8953_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			BRANCH_SOC_NUM=8953
			BUILD_SOC_NUM=8953
			CHIPSET_NAME=sdm429_450
			BUILD_CHIPSET_NAME=msm8953
			;;
		429) # JDM - Waffle
			BUILD_ID=QAOAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM429_SPF1.0.1/TZ.BF.4.0.5/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8953_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			CHIPSET_NAME=sdm429
			BUILD_CHIPSET_NAME=sdm439
			;;
		8917) # SDM450-GANGA
			BUILD_ID=ZALAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM450_LA3.0.1/TZ.BF.4.0.5/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8953_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			BRANCH_SOC_NUM=8937
			BUILD_SOC_NUM=8937
			CHIPSET_NAME=msm8917
			BUILD_CHIPSET_NAME=msm8937
			;;
		660)
			BUILD_ID=KAJAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM6xx_SPF2.1/TZ.BF.4.0.7/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_sdm660_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			BRANCH_SOC_NUM=6xx
			BUILD_SOC_NUM=6xx
			CHIPSET_NAME=sdm660
			BUILD_CHIPSET_NAME=sdm660
			;;
		845)
			BUILD_ID=WAXAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM845_LA1.0/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_sdm845_scrypto_v2.2_x32_release.a
			IMPRINT_TOOL=imprint
			export LLVM_VERSION=3.9.9
			export LLVMROOT=$VK_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=sdm845
			BUILD_CHIPSET_NAME=sdm845
			;;
		8150)
			BUILD_ID=YAQAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SM8150_LA1.0/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/vaultkeeper/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT_TOOL=imprint
			export LLVM_VERSION=4.0.11
			export LLVMROOT=$VK_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=sm8150
			BUILD_CHIPSET_NAME=sm8150
			;;
		710)
			BUILD_ID=XAWAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM710_SPF1.0/TZ.XF.5.0/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT_TOOL=imprint
			export LLVM_VERSION=4.0.3
			export LLVMROOT=$VK_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=sdm710
			BUILD_CHIPSET_NAME=sdm710
			;;
		6150)
			BUILD_ID=PAZAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SM6150_SPF1.0/TZ.XF.5.0.3/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/vaultkeeper/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT_TOOL=imprint
			export LLVM_VERSION=4.0.11
			export LLVMROOT=$VK_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
			BUILD_CHIPSET_NAME=sm6150
			;;
		7150)
			BUILD_ID=QAOAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SM6150_SPF1.0/TZ.XF.5.0.3/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/vaultkeeper/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=scrypto_v2.4_x32_qsee_release.a
			IMPRINT_TOOL=imprint
			export LLVM_VERSION=4.0.11
			export LLVMROOT=$VK_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=sm7150
			BUILD_CHIPSET_NAME=sm7150
			;;
		8250)
			BUILD_ID=DARAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SM8250_LA1.0/sm8250_tz/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/ssg/bsp/trustzone/qsapps/vaultkeeper/build/scorpion/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/ssg/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=scrypto_v2.5_x32_qsee_release.a
			IMPRINT_TOOL=imprint256
			export LLVM_VERSION=4.0.11
			export LLVMROOT=$VK_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=sm8250
			BUILD_CHIPSET_NAME=sm8250
			;;
		439) # JDM - Hotdog A01
			BUILD_ID=QAOAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM439_LA2.0/TZ.BF.4.0.5/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8953_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			CHIPSET_NAME=sdm439
			BUILD_CHIPSET_NAME=sdm439
			;;
		439_450) # JDM - Hotdog A11 M11
			BUILD_ID=SANAANAA
			COMP_PATH_TZIMG=$P4_ROOT_PATH/NHLOS/MAIN/SDM439_LA2.0/TZ.BF.4.0.5/trustzone_images
			COMP_PATH_OUTPUT=$COMP_PATH_TZIMG/core/bsp/trustzone/qsapps/vaultkeeper/build/$BUILD_ID
			COMP_PATH_SRC=$COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/vaultkeeper
			SCRYPTO_LIB=qualcomm_msm8953_scrypto_v2.1_x32_release.a
			IMPRINT_TOOL=imprint
			SCL_TYPE=vaultkeeper.ld
			CHIPSET_NAME=sdm439_450
			BUILD_CHIPSET_NAME=msm8953
			;;
		*)

			return 1
			;;
		esac
	else
		return 1
	fi

	# Check build mode parameter
	if [ "$VKBUILD_MODE" ]; then
		printGreen "VaultKeeper QSEE TA build as $VKBUILD_MODE mode"

		OLD="env = env.Clone()"
		NEW="env = env.Clone()"
		SPATH="$COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript"
		TPATH="$COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new"
		case "$VKBUILD_MODE" in
			release)
				;;
			debug)
				NEW="env = env.Clone()\nenv.Append(CCFLAGS = ' -D__DEBUG__ ')"
				;;
			no_key)
				NEW="env = env.Clone()\nenv.Append(CCFLAGS = ' -D__DEBUG__ -D__NO_RPMB_KEY__ ')"
				;;
			*)
				return 1
				;;
		esac
		rm -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new
		sed "s/$OLD/$NEW/" $SPATH > $TPATH
	else
		return 1
	fi

	return 0
}

function delete_local_output()
{
	## trustzone_images/core/bsp/trustzone/qsapps/vaultkeeper/
	rm -rf $COMP_PATH_OUTPUT
	mkdir -p $COMP_PATH_OUTPUT

	## trustzone_images/core/securemsm/trustzone/qsapps/vaultkeeper
	rm -rf $COMP_PATH_SRC
	mkdir -p $COMP_PATH_SRC/build

	case "$SEC_SOC_NUM" in
	450|8917|429|429_450|8996|8250|439|439_450)
		rm -rf $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID
		mkdir -p $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID
		;;
	*)
		rm -rf $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME
		mkdir -p $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME
		;;
	esac

	rm -rf $COMP_PATH_TZIMG/build/ms/bin/$BUILD_ID/vaultkeeper.mbn
	mkdir -p $COMP_PATH_TZIMG/build/ms/bin/$BUILD_ID
}

function build_ta_library()
{
	case "$SEC_SOC_NUM" in
		8150|845|710|6150|7150|8250)
			printGreen "************************************"
			printGreen "Build VaultKeeper library for TA API"

			mkdir -p $COMP_PATH_SECAPP/vkmanager/lib

			cd $COMP_PATH_SECAPP/vkmanager/
			make MODEL=$CHIPSET_NAME ARCH=64
			cp -f $COMP_PATH_SECAPP/vkmanager/vkmanager* $COMP_PATH_SECAPP/vkmanager/lib/
			make clean
			make MODEL=$CHIPSET_NAME ARCH=32
			cp -f $COMP_PATH_SECAPP/vkmanager/vkmanager* $COMP_PATH_SECAPP/vkmanager/lib/
			make clean

			printGreen "************************************"
			;;
		*)
			;;
	esac
}

function copy_300_sconscript()
{
	case "$SEC_SOC_NUM" in
		429|429_450|439|439_450)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new $COMP_PATH_SRC/src/SConscript
			;;
		*)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new $COMP_PATH_SRC/build/SConscript
			;;
	esac

	cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/signing_SConscript $COMP_PATH_OUTPUT/../SConscript
	cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/$SCL_TYPE $COMP_PATH_SRC/build/

	## copy sampleapp to load static libarary
	rm -rf $COMP_PATH_TZIMG/core/kernel/libstd/build/vaultkeeper
	rm -rf $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/vaultkeeper
	rm -rf $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/vaultkeeper
	rm -rf $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/vaultkeeper
	cp -rf $COMP_PATH_TZIMG/core/kernel/libstd/build/sampleapp $COMP_PATH_TZIMG/core/kernel/libstd/build/vaultkeeper
	cp -rf $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/sampleapp $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/vaultkeeper
	cp -rf $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/sampleapp $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/vaultkeeper
	cp -rf $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/sampleapp $COMP_PATH_TZIMG/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/vaultkeeper
}

function copy_400_sconscript()
{
	case "$SEC_SOC_NUM" in
		8998)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/signing_SConscript $COMP_PATH_OUTPUT/../SConscript
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new $COMP_PATH_SRC/src/SConscript
			;;
		845|710)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/signing_SConscript $COMP_PATH_OUTPUT/../SConscript
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new $COMP_PATH_SRC/src/SConscript
			;;
		660)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/signing_SConscript $COMP_PATH_OUTPUT/../SConscript
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new $COMP_PATH_SRC/src/SConscript
			;;
		8150|6150|7150|8250)
			cp -f $COMP_PATH_SECAPP/build/$CHIPSET_NAME/packaging_SConscript.new $COMP_PATH_SRC/src/SConscript
			;;
		*)
			;;
	esac
}

function copy_sconscript()
{
	case "$SEC_SOC_NUM" in
		8996|8917|450|429|429_450|439|439_450)
			copy_300_sconscript
			;;
		8998|845|660|8150|710|6150|7150|8250)
			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/
	cp -rf $COMP_PATH_VAULT_COMMON/include/* $COMP_PATH_SRC/inc/

	case "$SEC_SOC_NUM" in
		845|8150|710|6150|7150|8250)
			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_SECAPP/vkmanager $COMP_PATH_SRC/vkmanager
	cp -rf $COMP_PATH_VAULT_COMMON/src/* $COMP_PATH_SRC/src/

	## SCrypto2.0 files
	cp -f $COMP_PATH_SECAPP/scrypto/$SCRYPTO_LIB $COMP_PATH_SRC/build/qc_scrypto.lib
	cp -f $COMP_PATH_SECAPP/scrypto/$IMPRINT_TOOL $COMP_PATH_SRC/build/imprint

	## proca library
	cp -f $COMP_PATH_SECAPP/libs/pa_tz_api_32.a $COMP_PATH_SRC/build/pa_tz_api.a
	
	## SConscript
	copy_sconscript
	if [ $? != 0 ]; then
		print_error "Failed copy_sconscript."
		return 1
	else
		print_success "Success copy_sconscript."
		return 0
	fi
}

function build_300_TA()
{
	cd $COMP_PATH_TZIMG/build/ms
	./build.sh CHIPSET=$BUILD_CHIPSET_NAME vaultkeeper -c
	./build.sh CHIPSET=$BUILD_CHIPSET_NAME vaultkeeper
	check_return_code $? "QC_build_300_TA"
}

function build_400_TA()
{
	case "$SEC_SOC_NUM" in
		8998)
			cd $COMP_PATH_TZIMG/build/ms

			python ./build_all.py -b TZ.BF.4.0 CHIPSET=msm8998 PRODUCT_NAME=SM-T835_EUR_XX_EUR0 vaultkeeper -c
			python ./build_all.py -b TZ.BF.4.0 CHIPSET=msm8998 PRODUCT_NAME=SM-T835_EUR_XX_EUR0 vaultkeeper
			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
				-model QSEE_MSM8998_TA \
				-runtype qc_secimg40_vaultkeeper \
				-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
				-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/core/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		845)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_vk.xml .

			python ./build_all.py -b TZ.XF.5.0 CHIPSET=sdm845 --config=build_config_vk.xml

			check_return_code $? "QC_build_sdm845_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
				-model QSEE_SDM845_TA    \
				-runtype qc_secimg40_vaultkeeper \
				-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
				-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		660)
			cd $COMP_PATH_TZIMG/build/ms

			python ./build_all.py -b TZ.BF.4.0 CHIPSET=sdm660 PRODUCT_NAME=QSEE_SDM660_TA vaultkeeper -c
			python ./build_all.py -b TZ.BF.4.0 CHIPSET=sdm660 PRODUCT_NAME=QSEE_SDM660_TA vaultkeeper
			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model QSEE_SDM660_TA \
					-runtype qc_secimg40_vaultkeeper \
					-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
					-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/core/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		8150)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_vk.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sm8150 --cnb --config=build_config_vk.xml 

			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model QSEE_SM8150_TA \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
					-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		710)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_vk.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sdm670 --cnb --config=build_config_vk.xml

			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model QSEE_SDM710_TA \
					-runtype qc_secimg40_vaultkeeper \
					-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
					-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		6150)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_vk.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sm6150 --cnb --config=build_config_vk.xml 

			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model QSEE_SM6150_TA \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
					-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		7150)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_vk.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sm7150 --cnb --config=build_config_vk.xml 

			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model QSEE_SM6150_TA \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
					-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		8250)
			cd $COMP_PATH_TZIMG/build/ms
			cp $COMP_PATH_SECAPP/build/$CHIPSET_NAME/build_config_vk.xml .

			python build_all.py -b TZ.XF.5.0 CHIPSET=sm8250 --cnb --config=build_config_vk.xml 

			check_return_code $? "QC_build_400_TA"

			java -jar $COMP_PATH_SECAPP/scrypto/signclient.jar \
					-model SM-G981U_NA_VZW_QKEY0 \
					-runtype qc_secimg50_tzapp \
					-input $COMP_PATH_OUTPUT/vaultkeeper.mbn \
					-output $COMP_PATH_OUTPUT/signed_vaultkeeper.mbn

			cd $COMP_PATH_OUTPUT
			python ${COMP_PATH_TZIMG}/ssg/bsp/build/scripts/pil_splitter.py signed_vaultkeeper.mbn vaultkee
			;;
		*)
			;;
	esac
}

function build_TA()	
{
	case "$SEC_SOC_NUM" in
		8996|8917|450|429|429_450|439|439_450)
			build_300_TA
			return $?
			;;
		8998|845|660|8150|710|6150|7150|8250)
			build_400_TA
			return $?
			;;
		*)
			print_error "Invalid chipset in build_TA ($SEC_SOC_NUM)"
			return -1
	esac
}

function copy_local_output_to_integ_branch()
{
	case "$SEC_SOC_NUM" in
		845|8150|710|6150|7150)
			cp $COMP_PATH_OUTPUT/vaultkee.* \
			   $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			cp $COMP_PATH_OUTPUT/vaultkeeper.mbn \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			;;
		660)
			cp $COMP_PATH_OUTPUT/vaultkee.* \
			   $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			cp $COMP_PATH_OUTPUT/vaultkeeper.mbn \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			;;
		429|429_450|439|439_450)
			cp ./bin/$BUILD_ID/unsigned/vaultkeeper.mbn $COMP_PATH_TZIMG/build/ms/bin/$BUILD_ID/vaultkeeper.mbn
			python ../../core/bsp/build/scripts/pil_splitter.py ./bin/$BUILD_ID/signed/signed_vaultkeeper.mbn vaultkeeper
			mv ./vaultkeeper.* ./bin/PIL_IMAGES/SPLITBINS_$BUILD_ID/
			cd $COMP_PATH_TZIMG/build/ms/bin/PIL_IMAGES/SPLITBINS_$BUILD_ID/
			cp vaultkeeper.b00 vaultkee.b00
			cp vaultkeeper.b01 vaultkee.b01
			cp vaultkeeper.b02 vaultkee.b02
			cp vaultkeeper.b03 vaultkee.b03
			cp vaultkeeper.b04 vaultkee.b04
			cp vaultkeeper.b05 vaultkee.b05
			cp vaultkeeper.b06 vaultkee.b06
			cp vaultkeeper.mdt vaultkee.mdt
			rm vaultkeeper.*
			cp vaultkee.* \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/
			cp $COMP_PATH_TZIMG/build/ms/bin/$BUILD_ID/vaultkeeper.mbn \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/
			;;
		450|8917|8996)
			cd $COMP_PATH_TZIMG/build/ms/bin/PIL_IMAGES/SPLITBINS_$BUILD_ID/
			cp vaultkeeper.b00 vaultkee.b00
			cp vaultkeeper.b01 vaultkee.b01
			cp vaultkeeper.b02 vaultkee.b02
			cp vaultkeeper.b03 vaultkee.b03
			cp vaultkeeper.b04 vaultkee.b04
			cp vaultkeeper.b05 vaultkee.b05
			cp vaultkeeper.b06 vaultkee.b06
			cp vaultkeeper.b07 vaultkee.b07
			cp vaultkeeper.mdt vaultkee.mdt
			cp vaultkee.* \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/
			cp $COMP_PATH_TZIMG/build/ms/bin/$BUILD_ID/vaultkeeper.mbn \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/
			;;
		8250)
			cp $COMP_PATH_OUTPUT/vaultkee.* \
			   $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/
			cp $COMP_PATH_OUTPUT/vaultkeeper.mbn \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/
			;;
		8998)
			cp $COMP_PATH_OUTPUT/vaultkee.* \
			   $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			cp $COMP_PATH_OUTPUT/vaultkeeper.mbn \
				$COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
		
			;;
		*)
			print_warning "-----------------------------------------------------------------"
			print_warning "Opps, something wrong, unexpected routine, please check script."
			print_warning "-----------------------------------------------------------------"
			;;
	esac

	print_info "Vaultkeeper TA output in Local"
	case "$SEC_SOC_NUM" in
		660|845|450|8150|710|6150|7150)
			ls $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/*
			;;
		8917|429|429_450|8250|439|439_450)
			ls $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID/*
			;;
		*)
			ls $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/*
		;;
	esac
}

function push_to_device()
{
	adb remount

	case "$SEC_SOC_NUM" in
		660)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			adb shell mount -o rw,remount /firmware
			adb shell rm -rf /firmware/image/vaultkee*
			adb push vaultkee.mdt /firmware/image/
			adb push vaultkee.b00 /firmware/image/
			adb push vaultkee.b01 /firmware/image/
			adb push vaultkee.b02 /firmware/image/
			adb push vaultkee.b03 /firmware/image/
			adb push vaultkee.b04 /firmware/image/
			adb push vaultkee.b05 /firmware/image/
			adb push vaultkee.b06 /firmware/image/
			adb push vaultkee.b07 /firmware/image/
		;;
		8998)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			adb shell mount -o rw,remount /firmware
			adb shell rm -rf /firmware/image/vaultkee*
			adb push vaultkee.mdt /firmware/image/
			adb push vaultkee.b00 /firmware/image/
			adb push vaultkee.b01 /firmware/image/
			adb push vaultkee.b02 /firmware/image/
			adb push vaultkee.b03 /firmware/image/
			adb push vaultkee.b04 /firmware/image/
			adb push vaultkee.b05 /firmware/image/
			adb push vaultkee.b06 /firmware/image/
			adb push vaultkee.b07 /firmware/image/
		;;
		450)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			adb shell mount -o rw,remount /firmware
			adb shell rm -rf /firmware/image/vaultkee*
			adb push vaultkee.mdt /firmware/image/
			adb push vaultkee.b00 /firmware/image/
			adb push vaultkee.b01 /firmware/image/
			adb push vaultkee.b02 /firmware/image/
			adb push vaultkee.b03 /firmware/image/
			adb push vaultkee.b04 /firmware/image/
			adb push vaultkee.b05 /firmware/image/
			adb push vaultkee.b06 /firmware/image/
		;;
		8917)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID
			adb shell mount -o rw,remount /firmware
			adb shell rm -rf /firmware/image/vaultkee*
			adb push vaultkee.mdt /firmware/image/
			adb push vaultkee.b00 /firmware/image/
			adb push vaultkee.b01 /firmware/image/
			adb push vaultkee.b02 /firmware/image/
			adb push vaultkee.b03 /firmware/image/
			adb push vaultkee.b04 /firmware/image/
			adb push vaultkee.b05 /firmware/image/
			adb push vaultkee.b06 /firmware/image/
		;;
		429|429_450|439|439_450)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID
			adb shell mount -o rw,remount /vendor/firmware_mnt
			adb shell rm -rf /vendor/firmware_mnt/image/vaultkee*
			adb push vaultkee.mdt /vendor/firmware_mnt/image
			adb push vaultkee.b00 /vendor/firmware_mnt/image
			adb push vaultkee.b01 /vendor/firmware_mnt/image
			adb push vaultkee.b02 /vendor/firmware_mnt/image
			adb push vaultkee.b03 /vendor/firmware_mnt/image
			adb push vaultkee.b04 /vendor/firmware_mnt/image
			adb push vaultkee.b05 /vendor/firmware_mnt/image
			adb push vaultkee.b06 /vendor/firmware_mnt/image
			adb push vaultkee.b07 /vendor/firmware_mnt/image
		;;
		845|8150|710|6150|7150)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			adb shell mount -o rw,remount /vendor/firmware_mnt
			adb shell rm -rf /vendor/firmware_mnt/image/vaultkee*
			adb push vaultkee.mdt /vendor/firmware_mnt/image
			adb push vaultkee.b00 /vendor/firmware_mnt/image
			adb push vaultkee.b01 /vendor/firmware_mnt/image
			adb push vaultkee.b02 /vendor/firmware_mnt/image
			adb push vaultkee.b03 /vendor/firmware_mnt/image
			adb push vaultkee.b04 /vendor/firmware_mnt/image
			adb push vaultkee.b05 /vendor/firmware_mnt/image
			adb push vaultkee.b06 /vendor/firmware_mnt/image
			adb push vaultkee.b07 /vendor/firmware_mnt/image
		;;
		8250)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/$BUILD_ID
			adb shell mount -o rw,remount /vendor/firmware_mnt
			adb shell rm -rf /vendor/firmware_mnt/image/vaultkee*
			adb push . /data/local/tmp
			adb shell cp /data/local/tmp/vaultkee.* /vendor/firmware_mnt/image
		;;
		*)
		cd $COMP_PATH_BASE/../Bin/TA/$CHIPSET_NAME/
			adb shell mount -o rw,remount /firmware
			adb shell rm -rf /firmware/image/vaultkee*
			adb push vaultkee.mdt /firmware/image/
			adb push vaultkee.b00 /firmware/image/
			adb push vaultkee.b01 /firmware/image/
			adb push vaultkee.b02 /firmware/image/
			adb push vaultkee.b03 /firmware/image/
			adb push vaultkee.b04 /firmware/image/
			adb push vaultkee.b05 /firmware/image/
			adb push vaultkee.b06 /firmware/image/
			adb push vaultkee.b07 /firmware/image/
		;;
	esac

	print_info "Vaultkeeper TA outputzone_images/build/ms/bin in device"
	case "$SEC_SOC_NUM" in
		845|8150|710|6150|7150|429|429_450|439|8250)
			adb shell ls -al /vendor/firmware_mnt/image/vault*
		;;
		*)
			adb shell ls -al /firmware/image/vault*
		;;
	esac
}

validate_params
if [ $? != 0 ]; then
	show_invalid_param
	print_error "Invaild parameters."
	exit
fi

## Delete Local Object files
delete_local_output

## Copy source files
copy_source_files_to_nhlos_folder
if [ $? != 0 ]; then
	print_error "Failed copy_source_files_to_nhlos_folder"
	exit
fi

## Build Vaultkeeper TA
build_TA
if [ $? != 0 ]; then
	print_error "Failed build_TA"
	exit
fi

## Build static library (Support TA interface)
build_ta_library

## Copy to integration branch
if [ "$P4_SECURITY_DEV_PATH" ]; then
	print_success "Copy to integration target file."
	copy_local_output_to_integ_branch
else
	print_warning "P4_SECURITY_DEV_PATH isn't set, skip copy to integration file."
fi

## Push binary to device
echo ""
adb start-server
RET="$(adb get-state)"
if [ "$RET" = "device" ]; then
	print_success "device is connected. push vaultkeeper binary to device."
	push_to_device
else
	print_warning "device isn't connected. skip vaultkeeper binary push"
fi
