#!/bin/bash
#
# This file sets the path variables and resolves the dependencies for the
# different Makefiles included in the release.
#
# If you prefer to use the ARM DS-5 tools instead of GNU, please set
# 1) TOOLCHAIN=ARM
# 2) ARM_RVCT_PATH and LM_LICENSE_FILE according to your environment.
#
################### EDIT HERE ####################

export COMP_PATH_ROOT=$(dirname $(readlink -f ${BASH_SOURCE[0]}))

# TOOLCHAIN:
# ARM, GNU
# If variable is not set, use ARM by default // Samsung change : GNU -> ARM
##########################################################
# Samsung change : Set TOOLCHAIN="ARM"
##########################################################
export TOOLCHAIN=${TOOLCHAIN:-"ARM"}

##########################################################
# Samsung change : Set SIGNING_TYPE, MODEL and RUNTYPE
##########################################################
export SIGNING_TYPE=samsung_mobile
export MODEL=MT6768_MOBICORE
export RUNTYPE=gd_mobicore410_trustlet

# Mode used for building samples:
# Debug, Release
export MODE=${MODE:-"Debug"}


##########################################################
# Samsung change : Set TARGET_OS
##########################################################
# OS target:
# Android, Linux
export TARGET_OS=${TARGET_OS:-"TEE"}

# Arch target:
# arm, arm64, x86, x86-64
export TARGET_ARCH=${TARGET_ARCH:-"arm"}

# Platform target : arm64-v8a, armeabi-v7a, x86, x86-64, armgnueabi-v7a
# APP_ABI is now set depending on uplevel parameters

if [ "$TARGET_OS" == "Android" ]; then
    if [ "$TARGET_ARCH" == "arm64" ]; then
        APP_ABI="armeabi-v7a arm64-v8a"
        echo "Target architecture forced to \"armeabi-v7a arm64-v8a\" when compiling samples for Android"
    elif [ "$TARGET_ARCH" == "arm" ]; then
        APP_ABI="armeabi-v7a"
    else
        echo "ERROR: arch [$TARGET_ARCH] not supported"
        exit 1
    fi

    # Android NDK path to ndk-build
    export NDK_BUILD=/data/buildserver/jenkins/workspace/ProductPackageBuildAndDeploy/dev/packaging/packagers/t-base/Mediatek/MT6752/../../../../../../../../Common/AndroidNdk/android-64/ndk-build

    # Android SDK Directory
    export ANDROID_HOME=/data/buildserver/jenkins/workspace/ProductPackageBuildAndDeploy/dev/packaging/packagers/t-base/Mediatek/MT6752/../../../../../../../../Common/AndroidSdk/r22.0.5-linux

    # Java Home Directory
    export JAVA_HOME=/data/buildserver/jenkins/workspace/ProductPackageBuildAndDeploy/dev/packaging/packagers/t-base/Mediatek/MT6752/../../../../../../../../Common/JavaJdk/7u25-linux-i586/jdk1.7.0_25

elif [ "${TARGET_OS}" == "TEE" ]; then

    if [ "${TOOLCHAIN}" == "GNU" ]; then
        # GCC Compiler variables
        export CROSS_GCC_PATH=$COMP_PATH_ROOT/../../Common/gcc-linaro-7.1.1-2017.08-x86_64_arm-eabi/
        export CROSS_GCC_PATH_INC=${CROSS_GCC_PATH}/arm-eabi/include
        export CROSS_GCC_PATH_LIB=${CROSS_GCC_PATH}/arm-eabi/lib
        export CROSS_GCC_PATH_BIN=${CROSS_GCC_PATH}/bin/arm-eabi-

    elif [ "${TOOLCHAIN}" == "CLANG" ]; then
        # NOTE: When using the CLANG toochain, we still need the GNU one during
        # the compilation to get the GCC headers and libraries
        # GCC Compiler variables
        export CROSS_GCC_PATH=/data/buildserver/jenkins/workspace/ProductPackageBuildAndDeploy/dev/packaging/packagers/t-base/Mediatek/MT6752/../../../../../../../../Common/LinaroGcc/gcc-linaro-7.1.1-2017.08-x86_64_arm-eabi
        export CROSS_GCC_PATH_INC=${CROSS_GCC_PATH}/arm-eabi/libc/usr/include
        export CROSS_GCC_PATH_LIB=${CROSS_GCC_PATH}/arm-eabi/libc/usr/lib
        export CROSS_GCC_PATH_BIN=${CROSS_GCC_PATH}/bin/arm-eabi-
        # CLANG Compiler variables
        export COMP_PATH_CLANG=/opt/toolchain/clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-14.04

    elif [ "${TOOLCHAIN}" == "ARM" ]; then
	    #####################################
	    # Samsung change : Set ARM_RVCT_PATH and LM_LICENSE_FILE
	    #####################################
        export ARM_RVCT_PATH=$COMP_PATH_ROOT/../../Common/ArmRvct/sec_rvct40/Out
        export LM_LICENSE_FILE=8224@168.219.209.143:8224@168.219.209.108
        export ARM_RVCT_PATH_BIN=$ARM_RVCT_PATH/bin/linux_x86_64
        export ARM_RVCT_PATH_LIB=$ARM_RVCT_PATH/lib
        export ARM_RVCT_PATH_INC=$ARM_RVCT_PATH/inc

    else
        echo "ERROR: TOOLCHAIN [${TOOLCHAIN}] not supported"
        exit 1
    fi
else
    echo "ERROR: TARGET_OS [${TARGET_OS}] not supported"
    exit 1
fi

TA_PIE=PIE
if [ "${TOOLCHAIN}" == "ARM" ]; then
    TA_PIE=NON_PIE
fi
export TA_PIE

######################################################
# Checks
######################################################
if [ "${TARGET_OS}" == "TEE" ]; then
    if [ "${TOOLCHAIN}" == "GNU" ]; then
        if [[ -z "${CROSS_GCC_PATH}" ]]; then
            echo "CROSS_GCC_PATH is not set in setup.sh"
            exit 1
        fi
        if [ ! -d "${CROSS_GCC_PATH}" ]; then
            echo "Please set CROSS_GCC_PATH to a valid compiler path in setup.sh  : ${CROSS_GCC_PATH} "
            exit 1
        fi
    fi

    if [ "${TOOLCHAIN}" == "CLANG" ]; then
        if [[ -z "${CROSS_GCC_PATH}" ]]; then
            echo "CROSS_GCC_PATH is not set in setup.sh"
            exit 1
        fi
        if [ ! -d "${CROSS_GCC_PATH}" ]; then
            echo "Please set CROSS_GCC_PATH to a valid compiler path in setup.sh  : ${CROSS_GCC_PATH} "
            exit 1
        fi

        if [[ -z "${COMP_PATH_CLANG}" ]]; then
            echo "COMP_PATH_CLANG is not set in setup.sh"
            exit 1
        fi
        if [ ! -d "${COMP_PATH_CLANG}" ]; then
            echo "Please set COMP_PATH_CLANG to a valid compiler path in setup.sh  : ${COMP_PATH_CLANG} "
            exit 1
        fi
    fi

    if [ "${TOOLCHAIN}" == "ARM" ]; then
        if [[ -z "${ARM_RVCT_PATH}" ]] ;then
            echo "ARM_RVCT_PATH is not set in setup.sh"
            exit 1
        fi
    fi
fi

if [ "$TARGET_OS" == "Android" ]; then
    if [[ -z "$NDK_BUILD" ]] ;then
        echo "NDK_BUILD is not set in setup.sh"
        exit 1
    fi

    if [[ -z "$ANDROID_HOME" ]] ;then
        echo "ANDROID_HOME is not set in setup.sh"
        exit 1
    fi

    if [[ -z "$JAVA_HOME" ]] ;then
        echo "JAVA_HOME is not set in setup.sh"
        exit 1
    fi
    export COMP_PATH_AndroidNdkLinux=$(dirname ${NDK_BUILD})
fi

######################################################
# Components
######################################################

export t_base_dev_kit=${COMP_PATH_ROOT}/t-base-dev-kit
export COMP_PATH_OTA=${t_base_dev_kit}/t-sdk/OTA
export COMP_PATH_Tools=${t_base_dev_kit}/Tools

#relative path needed for COMP_PATH_MobiCoreClientLib_module (multi-OS compatibility for including library)
export COMP_PATH_MobiCoreClientLib_module=${t_base_dev_kit}/t-sdk/TlcSdk
export COMP_PATH_TeeClient_module=${t_base_dev_kit}/t-sdk/TlcSdk
export COMP_PATH_TlSdk=${t_base_dev_kit}/t-sdk/TlSdk
export COMP_PATH_DrSdk=${t_base_dev_kit}/t-sdk/DrSdk/Out
export COMP_PATH_MobiCore=$COMP_PATH_ROOT/SecureIntegration/t-base-kit/Out
export COMP_PATH_DrRPMB=$COMP_PATH_ROOT/SecureIntegration/rpmb/DrRPMB/Out

# Trusted Applications Samples
export COMP_PATH_TlFloat=${t_base_dev_kit}/Samples/Float/TlFloat/Out
export COMP_PATH_TlSamplePinpad=${t_base_dev_kit}/Samples/Pinpad/TlSamplePinpad/Out
export COMP_PATH_TASamplePinpadGP=${t_base_dev_kit}/Samples/Pinpad/TASamplePinpadGP/Out
export COMP_PATH_TASampleGP=${t_base_dev_kit}/Samples/GP/TASampleGP/Out
export COMP_PATH_TACryptoCatalog=${t_base_dev_kit}/Samples/CryptoCatalog_GP/TACryptoCatalog/Out
export COMP_PATH_TlAsyncExample=${t_base_dev_kit}/Samples/AsyncExample/TlAsyncExample/Out

# Drivers
export COMP_PATH_DrAsyncExample=${t_base_dev_kit}/Samples/AsyncExample/DrAsyncExample/Out

# Client Applications
export COMP_PATH_TlcFloat=${t_base_dev_kit}/Samples/Float/TlcFloat/Out
export COMP_PATH_TlcAsyncExample=${t_base_dev_kit}/Samples/AsyncExample/TlcAsyncExample/Out
export COMP_PATH_CASampleGP=${t_base_dev_kit}/Samples/GP/CASampleGP/Out
export COMP_PATH_CryptoCatalog_GP=${t_base_dev_kit}/Samples/CryptoCatalog_GP/CACryptoCatalog/Out

# APK
export COMP_PATH_SamplePinpad=${t_base_dev_kit}/Samples/Pinpad/SamplePinpad/Out
export COMP_PATH_SamplePinpadGP=${t_base_dev_kit}/Samples/Pinpad/SamplePinpadGP/Out

##########################################################
# Samsung change : Set TLSDK_DIR
##########################################################
export TLSDK_DIR=${COMP_PATH_TlSdk}

######################################################
# AndroidIntegration
######################################################
# Global variables needed by build scripts
export COMP_PATH_MobiCoreDriverMod=$COMP_PATH_ROOT/AndroidIntegration/Src/mobicore/MobiCoreDriverMod
export COMP_PATH_DrTui=$COMP_PATH_ROOT/SecureIntegration/tui/DrTui
export COMP_PATH_INTEGRATION_MobiCoreDriverLib=$COMP_PATH_ROOT/AndroidIntegration/Src/mobicore/MobiCoreDriverLib
export COMP_PATH_INTEGRATION_MobiCore=$COMP_PATH_ROOT/AndroidIntegration/Src/mobicore
