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