#!/bin/bash
# environment for build external vulkan driver.
# Copyright © Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.

NDK_PATH="${AN_NDKDIR}"
CMAKE_BIN="${CMAKE_PATH}/cmake"
MESON="${MESON_PATH}/meson.py"
NINJA="${NINJA_PATH}/ninja"

VULKAN_WORKSPACE="$(pwd)/../vulkan_workspace"
INSTALL_PATH="${VULKAN_WORKSPACE}/usr"
CROSS_PATH="${VULKAN_WORKSPACE}"
SRC_PATH="${VULKAN_WORKSPACE}/src"
PATCH_PATH="$(pwd)/../src/patchForCrossCompile"
OUTPUT_PATH="${VULKAN_WORKSPACE}/output"
ARCHIVE_PATH="${VULKAN_WORKSPACE}/archive"

set_env_aarch64() {
    export TOOLCHAIN=${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64
    export TARGET=aarch64-linux-android
    export API=28
    export AR=$TOOLCHAIN/bin/llvm-ar
    export CC=$TOOLCHAIN/bin/$TARGET$API-clang
    export AS=$CC
    export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
    export LD=$TOOLCHAIN/bin/ld
    export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
    export STRIP=$TOOLCHAIN/bin/llvm-strip
}

set_env_arm() {
    export TOOLCHAIN=${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64
    export TARGET=armv7a-linux-androideabi
    export API=28
    export AR=$TOOLCHAIN/bin/llvm-ar
    export CC=$TOOLCHAIN/bin/$TARGET$API-clang
    export AS=$CC
    export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
    export LD=$TOOLCHAIN/bin/ld
    export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
    export STRIP=$TOOLCHAIN/bin/llvm-strip
}

clean_env() {
    unset TOOLCHAIN
    unset TARGET
    unset API
    unset AR
    unset CC
    unset AS
    unset CXX
    unset LD
    unset RANLIB
    unset STRIP
}

gen_meson_cross_file() {
    if [ -f "${CROSS_PATH}/android-aarch64" ];then
        rm ${CROSS_PATH}/android-aarch64
    fi
    if [ -f "${CROSS_PATH}/android-arm" ];then
        rm ${CROSS_PATH}/android-arm
    fi
    touch ${CROSS_PATH}/android-aarch64
    echo "[binaries]" >> ${CROSS_PATH}/android-aarch64
    echo "ar = '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar'" >> ${CROSS_PATH}/android-aarch64
    echo "c = ['ccache', '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang']" >> ${CROSS_PATH}/android-aarch64
    echo "cpp = ['ccache', '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang++',\
        '-fno-exceptions', '-fno-unwind-tables', '-fno-asynchronous-unwind-tables', '-static-libstdc++']" >> ${CROSS_PATH}/android-aarch64
    echo "c_ld = 'lld'" >> ${CROSS_PATH}/android-aarch64
    echo "cpp_ld = 'lld'" >> ${CROSS_PATH}/android-aarch64
    echo "strip = '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip'" >> ${CROSS_PATH}/android-aarch64
    echo "pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=${INSTALL_PATH}/lib64/pkgconfig', '/usr/bin/pkg-config']" >> ${CROSS_PATH}/android-aarch64
    echo "llvm-config = '${SRC_PATH}/llvm/build64/bin/llvm-config'" >> ${CROSS_PATH}/android-aarch64
    echo "[host_machine]" >> ${CROSS_PATH}/android-aarch64
    echo "system = 'linux'" >> ${CROSS_PATH}/android-aarch64
    echo "cpu_family = 'arm'" >> ${CROSS_PATH}/android-aarch64
    echo "cpu = 'armv8'" >> ${CROSS_PATH}/android-aarch64
    echo "endian = 'little'" >> ${CROSS_PATH}/android-aarch64

    touch ${CROSS_PATH}/android-arm
    echo "[binaries]" >> ${CROSS_PATH}/android-arm
    echo "ar = '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar'" >> ${CROSS_PATH}/android-arm
    echo "c = ['ccache', '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi28-clang']" >> ${CROSS_PATH}/android-arm
    echo "cpp = ['ccache', '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi28-clang++',\
        '-fno-exceptions', '-fno-unwind-tables', '-fno-asynchronous-unwind-tables', '-static-libstdc++']" >> ${CROSS_PATH}/android-arm
    echo "c_ld = 'lld'" >> ${CROSS_PATH}/android-arm
    echo "cpp_ld = 'lld'" >> ${CROSS_PATH}/android-arm
    echo "strip = '${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip'" >> ${CROSS_PATH}/android-arm
    echo "pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=${INSTALL_PATH}/lib/pkgconfig', '/usr/bin/pkg-config']" >> ${CROSS_PATH}/android-arm
    echo "llvm-config = '${SRC_PATH}/llvm/build/bin/llvm-config'" >> ${CROSS_PATH}/android-arm
    echo "[host_machine]" >> ${CROSS_PATH}/android-arm
    echo "system = 'linux'" >> ${CROSS_PATH}/android-arm
    echo "cpu_family = 'arm'" >> ${CROSS_PATH}/android-arm
    echo "cpu = 'armv7'" >> ${CROSS_PATH}/android-arm
    echo "endian = 'little'" >> ${CROSS_PATH}/android-arm
}