#!/usr/bin/env bash
#
# Copyright (c) 2019-2021 Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#

export CROSS_COMPILE=aarch64-none-elf-

# We need to clean the platform build between each configuration because Trusted
# Firmware's build system doesn't track build options dependencies and won't
# rebuild the files affected by build options changes.
clean_build()
{
    local flags="$*"
    echo "Building TF with the following build flags:"
    echo "  $flags"
    make distclean
    make $flags all
    echo "Build config complete."
    echo
}

# Defines common flags between platforms
common_flags() {
    local release="${1:-}"
    local num_cpus="$(/usr/bin/getconf _NPROCESSORS_ONLN)"
    local parallel_make="-j $num_cpus"

    # default to debug mode, unless a parameter is passed to the function
    debug="DEBUG=1"
    [ -n "$release" ] && debug=""

    echo " $parallel_make $debug -s "
}

# Check if execution environment is ARM's jenkins (Jenkins running under ARM
# infraestructure)
is_arm_jenkins_env() {
    if [ "$JENKINS_HOME" ]; then
	if echo "$JENKINS_URL" | grep -q "oss.arm.com"; then
	    return 0;
	fi
    fi
    return 1
}

# Use "$1" as a boolean
upon() {
	case "$1" in
		"" | "0" | "false") return 1;;
		*) return 0;;
	esac
}

# Provide correct linaro cross toolchain based on environment
set_cross_compile_gcc_linaro_toolchain() {
    local cross_compile_path="/home/buildslave/tools"

    # if under arm enviroment, overide cross-compilation path
    is_arm_jenkins_env || upon "$local_ci" && cross_compile_path="/arm/pdsw/tools"

    echo "${cross_compile_path}/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"
}

# Provide correct armclang toolchain based on environment
set_armclang_toolchain() {
    local armclang_path="/home/buildslave/tools/armclang-6.8/bin"

    # if under arm enviroment, overide cross-compilation path
    is_arm_jenkins_env || upon "$local_ci" && armclang_path="/arm/warehouse/Distributions/FA/ARMCompiler/6.8/25/standalone-linux-x86_64-rel/bin"

    echo "${armclang_path}/armclang"
}

# mbed TLS variables
MBED_TLS_DIR=mbedtls
MBED_TLS_URL_REPO=https://github.com/ARMmbed/mbedtls.git

# mbed TLS source tag to checkout when building Trusted Firmware with Trusted
# Board Boot support.
MBED_TLS_SOURCES_TAG="mbedtls-2.26.0"

ARMCLANG_PATH="$(set_armclang_toolchain)"

CRYPTOCELL_LIB_PATH=/arm/projectscratch/ssg/trusted-fw/dummy-crypto-lib

TBB_OPTIONS="TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 MBEDTLS_DIR=$(pwd)/mbedtls"
ARM_TBB_OPTIONS="$TBB_OPTIONS ARM_ROTPK_LOCATION=devel_rsa"
