#! /bin/bash

if [ "$1" == "" ] || [ "$2" == "" ]; then
echo " ========= COMPILATION EXAMPLES ==========="
echo " ./build_pebble.sh exynos9830 sdk40"
echo " ./build_pebble.sh exynos9820 sdk30"
echo " ================= END ===================="
exit
fi

RESULT_DIR="BF_TA_OUT"
rm -rf $RESULT_DIR
mkdir $RESULT_DIR

TA_ALIAS=("drv" "tks" "ccm" "atn" "ese" "icc" "pkm" "dmv" "arc" "pebble")
TA_CONFIGS_default=("ta_driver:1" "ta_keystore:1" "ta_ccm:1" "ta_attestation:1" "ta_esecomm:1" "ta_iccc:1" "ta_pkm:1" "ta_dmverity:1" "ta_arcounter:0" "pebble:0")
TA_CONFIGS_exynos9830=("ta_driver:0" "ta_keystore:0" "ta_ccm:0" "ta_attestation:0" "ta_esecomm:0" "ta_iccc:0" "ta_pkm:0" "ta_dmverity:0" "ta_arcounter:0" "pebble:1")
TA_CONFIGS_exynos9820=("ta_driver:0" "ta_keystore:0" "ta_ccm:0" "ta_attestation:0" "ta_esecomm:0" "ta_iccc:0" "ta_pkm:0" "ta_dmverity:0" "ta_arcounter:0" "pebble:1")
TA_BUILD_SCRIPT=("build_driver_for_signing"
                 "build_keystore_for_signing"
                 "build_ccm_for_signing"
                 "build_attestation_for_signing"
                 "build_esecomm_for_signing"
                 "build_iccc_for_signing"
                 "build_pkm_for_signing"
                 "build_dmverity_for_signing"
                 "build_arcounter_for_signing"
                 "build_pebble_for_signing")

TA_CONFIGS_CHIPSETS=(
    "exynos9830" "exynos9820"
)

if [[ $2 == "sdk30" ]]; then
    echo "sdk link set to teegris_sdk_3.0.x"
    SEC_SDK_LINK=teegris_sdk_3.0.x
    export SEC_SDK_LINK
elif [[ $2 == "sdk40" ]]; then    
    echo "sdk link set to teegris_sdk_4.1.x"
    SEC_SDK_LINK=teegris_sdk_4.1.x
    export SEC_SDK_LINK
fi

show_summary()
{
    chipset=$1
    sdk=$2
    config_array=("${!3}")
    config_num=${#config_array[@]}
    count=0

    echo "======= Summary ======="
    echo " chipset: ${chipset}"
    echo " sdk    : ${sdk}"
    echo " configs(${config_num})"

    while [ $count -lt $config_num ]
    do
        echo "  ${TA_ALIAS[count]} -> ${config_array[$count]}"
        count=`expr $count + 1`
    done

    echo "Summary done."
    echo ""
}

show_sdk_version()
{
	sdk_link=$SEC_SDK_LINK

	if [ -h "./$sdk_link" ]; then
		echo "Below SDK used for this build."
		ls -al ./$sdk_link
	else
		echo "No sdk link used."
	fi
}

get_buildconfig()
{
    config_num=${#TA_CONFIGS_CHIPSETS[@]}
    count=0
    _buildconfig="none"

    #echo "======= get_build_config ======="
    #echo " chipset: ${chipset}"
    #echo " configs(${config_num})"

    while [ $count -lt $config_num ]
    do
        chipname=${TA_CONFIGS_CHIPSETS[$count]}
        #echo "  ${count} -> ${TA_CONFIGS_CHIPSETS[$count]}"
        if [[ $1 == ${chipname} ]]; then
            _buildconfig="TA_CONFIGS_${chipname}"
            break
        fi
        count=`expr $count + 1`
    done

    echo "${_buildconfig}"
 }

build_ta_all()
{
    config_array=("${!3}")
    config_num=${#config_array[@]}
    count=0

    while [ $count -lt $config_num ]
    do
        item=${config_array[$count]}
        itemArr=(${item//:/ })
        count=`expr $count + 1`

        ta_name=${itemArr[0]}
        ta_supported=${itemArr[1]}
        
        if [ -d $ta_name ]; then
            if [ $ta_supported == "1" ]; then
                echo "Building ${ta_name}"
                cd ./${ta_name}
                rm -rf Out	
                ./${TA_BUILD_SCRIPT[count-1]}.sh $1 $2
                cp -rf Out/0* ../$RESULT_DIR
                cd ..
                echo "${ta_name} build done."  
            else
                echo "${ta_name} is NOT supported."
            fi
		else
            echo "${ta_name} does NOT exist."
        fi

        echo ""

    done	
}

build_smc_handler()
{
    cd bf_SMC_handler
    rm -rf Out
    ./build.sh  $1 $2
    cp -rf out/*.bin ../$RESULT_DIR
    cd ..
}

buildconfig=$(get_buildconfig $1)

if [[ ${buildconfig} != "none" ]]; then
    echo "${buildconfig} retrieved."
    show_summary $1 $2 TA_CONFIGS_$1[@]

    # build_smc_handler $1 $2
    build_ta_all $1 $2 TA_CONFIGS_$1[@] 
    show_sdk_version
    echo "exit..."
    exit 0
fi

cd bf_SMC_handler
rm -rf Out
./build.sh  $1 $2
cp -rf out/*.bin ../$RESULT_DIR

cd ../ta_driver
rm -rf Out
./build_driver_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR

#cd ../ta_pkm
#rm -rf Out
#./build_pkm_for_signing.sh $1 $2
#cp -rf Out/0* ../$RESULT_DIR

cd ../ta_keystore
rm -rf Out
./build_keystore_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR

cd ../ta_attestation
rm -rf Out
./build_attestation_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR

cd ../ta_ccm
rm -rf Out
./build_ccm_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR

cd ../ta_dmverity
rm -rf Out
./build_dmverity_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR

cd ../ta_iccc
rm -rf Out
./build_iccc_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR

if [ $2 == "sdk30"]; then
cd ../ta_arcounter
rm -rf Out
./build_arcounter_for_signing.sh $1 $2
cp -rf Out/0* ../$RESULT_DIR
fi
