• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2
3# Copyright (C) 2024 Huawei Technologies Co., Ltd.
4# Licensed under the Mulan PSL v2.
5# You can use this software according to the terms and conditions of the Mulan
6# PSL v2.
7# You may obtain a copy of Mulan PSL v2 at:
8#     http://license.coscl.org.cn/MulanPSL2
9# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
10# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
11# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
12# See the Mulan PSL v2 for more details.
13
14set -e
15
16export SOURCE_PATH=$(dirname $0)
17export ABS_SOURCE_PATH=$(cd ${SOURCE_PATH};pwd)
18export TEE_OH_PATH=${ABS_SOURCE_PATH}/../../../
19export TEE_OH_BUILD_PATH=${TEE_OH_PATH}/build/teekit/
20export TEE_SRC_PATH=${TEE_OH_BUILD_PATH}/TA_demo/
21SIGNTOOL_DIR=${TEE_OH_BUILD_PATH}/script
22
23build_clean()
24{
25    [ -d "output" ] && rm -rf output #clean
26    make clean
27}
28
29get_config()
30{
31    while read line;do
32        eval "$line"
33    done < ${TEE_SRC_PATH}/defconfig
34}
35
36cmake_build()
37{
38    echo "start cmake build ${CONFIG_GCC} ${TARGET_IS_ARM64} target"
39    build_clean
40
41    mkdir -p output #create cmake_build file
42    cd output
43
44    if [ "${CONFIG_GCC}" == "y" ];then
45        if [ "${TARGET_IS_ARM64}" == "y" ];then
46            CMAKE_TOOLCHAIN_FILE=${TEE_OH_BUILD_PATH}/cmake/aarch64_toolchain.cmake
47        elif [ "${TARGET_IS_ARM64}" == "n" ];then
48            CMAKE_TOOLCHAIN_FILE=${TEE_OH_BUILD_PATH}/cmake/arm_toolchain.cmake
49        fi
50    elif [ "${CONFIG_GCC}" == "n" ];then
51        if [ "${TARGET_IS_ARM64}" == "y" ];then
52            CMAKE_TOOLCHAIN_FILE=${TEE_OH_BUILD_PATH}/cmake/llvm_toolchain.cmake
53        else
54            echo "LLVM only support 64bit TA.";
55            exit -1
56        fi
57    else
58        echo "Invalid tool chain";
59        exit -1
60    fi
61
62    cmake \
63          -DCMAKE_VERBOSE_MAKEFILE=on \
64          -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} \
65          -DTARGET_IS_ARM64=${TARGET_IS_ARM64} \
66          -DTEE_OH_PATH=${TEE_OH_PATH} \
67          -DTEE_OH_BUILD_PATH=${TEE_OH_BUILD_PATH} \
68          -DCONFIG_GCC=${CONFIG_GCC} \
69          ${TEE_SRC_PATH}
70
71    cmake --build . -j8
72}
73
74mk_build()
75{
76    echo "start make build ${CONFIG_GCC} ${TARGET_IS_ARM64} ${SIGNATURE_VER} target"
77    build_clean
78    if [ "${CONFIG_GCC}" == "n" ];then
79        if [ "${TARGET_IS_ARM64}" == "n" ];then
80            echo "LLVM only support 64bit TA.";
81            exit -1
82        fi
83    fi
84
85    export TARGET_IS_ARM64=${TARGET_IS_ARM64}
86    export CONFIG_GCC=${CONFIG_GCC}
87
88    make V=3 libcombine -j4
89}
90
91if [ "${1}" = "clean" ]; then
92    build_clean
93else
94    get_config
95    cd ../thirdparty/open_source/; bash import_open_source_header.sh; cd -
96    case "$CONFIG_BUILD_TOOL" in
97        "") echo "can not find config" ;;
98        "cmake")
99            echo "do cmake compile"
100            cmake_build ;;
101        "make")
102            echo "do make compile"
103            mk_build ;;
104        *) echo "do make compile" && exit -1 ;;
105    esac
106
107    python3 ${SIGNTOOL_DIR}/ta_check_undefined_symbol.py ${TEE_SRC_PATH}/libcombine.so
108    if [ "${SIGNATURE_VER}" == "V3" ];then
109        python3 -B ${SIGNTOOL_DIR}/signtool_sec.py --in_path ${TEE_SRC_PATH} --out_path ${TEE_SRC_PATH} \
110            --privateCfg ${TEE_OH_BUILD_PATH}/config/ta_sign_algo_config.ini
111    elif [ "${SIGNATURE_VER}" == "V3_1" ];then
112        python3 -B ${SIGNTOOL_DIR}/signtool_sec.py --in_path ${TEE_SRC_PATH} --out_path ${TEE_SRC_PATH} \
113            --privateCfg ${TEE_OH_BUILD_PATH}/config/ta_sign_algo_config.ini \
114            --publicCfg ${TEE_OH_BUILD_PATH}/config/config_ta_public.ini
115    else
116        echo "Invalid signature version.";
117        exit -1
118    fi
119fi
120