1# Copyright (C) 2022 Huawei Technologies Co., Ltd. 2# Licensed under the Mulan PSL v2. 3# You can use this software according to the terms and conditions of the Mulan PSL v2. 4# You may obtain a copy of Mulan PSL v2 at: 5# http://license.coscl.org.cn/MulanPSL2 6# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 7# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 8# PURPOSE. 9# See the Mulan PSL v2 for more details. 10ifneq ($V,) 11VER := 12else 13VER := @ 14endif 15 16ifneq ($(TOPDIR),) 17export TOPDIR := $(TOPDIR) 18else 19export TOPDIR := $(CURDIR)/../ 20endif 21 22ifneq (${TARGET_BOARD_PLATFORM},) 23export TARGET_BOARD_PLATFORM := ${TARGET_BOARD_PLATFORM} 24else 25export TARGET_BOARD_PLATFORM := oh_64 26endif 27 28ifneq (${FRAMEWORK_ELF_PATH},) 29export FRAMEWORK_ELF_PATH := ${FRAMEWORK_ELF_PATH} 30else 31export FRAMEWORK_ELF_PATH := $(TOPDIR)/elf_out 32endif 33 34ifneq (${TEE_COMPILER_DIR},) 35export TEE_COMPILER_DIR := ${TEE_COMPILER_DIR} 36else 37export TEE_COMPILER_DIR := $(TOPDIR)/../../../../tools/llvm 38endif 39 40ifneq (${LLVM_BASEVER},) 41export LLVM_BASEVER := ${LLVM_BASEVER} 42else 43export LLVM_BASEVER := 15.0.4 44endif 45 46ifneq ($(THIRDPARTY),) 47 export THIRDPARTY := $(THIRDPARTY) 48else 49 # Try to find third_party directory in default places 50 IS_THIRDPARTY_EMPTY := $(wildcard $(TOPDIR)/../third_party/*) 51 ifneq ($(IS_THIRDPARTY_EMPTY),) 52 export THIRDPARTY := $(TOPDIR)/../third_party/ 53 endif 54 55 IS_THIRDPARTY_EMPTY := $(wildcard $(TOPDIR)/../../../third_party/*) 56 ifneq ($(IS_THIRDPARTY_EMPTY),) 57 export THIRDPARTY := $(TOPDIR)/../../../third_party/ 58 endif 59endif 60 61export TEE_CLANG_DIR := ${TEE_COMPILER_DIR}/bin 62export TEE_SECUREC_DIR := $(THIRDPARTY)/bounds_checking_function 63export OLD_TOPDIR := $(TOPDIR)/config 64export TOOLS := $(TOPDIR)/build/tools 65export VER 66export PLATFORM_DIR := $(OLD_TOPDIR)/platform 67export TEELIB := $(TOPDIR)/lib/teelib 68export DRVLIB := $(TOPDIR)/lib/drvlib 69export FRAMEWORK_PATH := $(TOPDIR)/framework 70export SYSLIB := $(TOPDIR)/lib/syslib 71export SERVICES_PATH := $(TOPDIR)/services 72export DRIVERS_PATH := $(TOPDIR)/drivers 73export CONFIG_PATH := $(TOPDIR)/config 74 75export BUILD_TOOLS := $(TOPDIR)/build/tools 76export BUILD_PACK := $(TOPDIR)/build/mk/pack 77export BUILD_LIB := $(TOPDIR)/build/mk/lib_common 78export BUILD_SERVICE := $(TOPDIR)/build/mk/service_common 79export BUILD_DRIVER := $(TOPDIR)/build/mk/driver_common 80export BUILD_FRAMEWORK := $(TOPDIR)/build/mk/framework_common 81export BUILD_CFI := $(TOPDIR)/build/mk/common/cfi 82export BUILD_CONFIG := $(TOPDIR)/build/mk/common/config 83export BUILD_OPERATION := $(TOPDIR)/build/mk/common/operation 84 85export PREBUILD_ROOT := $(TOPDIR)/prebuild 86export OUTPUTDIR := $(TOPDIR)/output 87 88export SDK_VER := tee-kernel-local-release 89 90ifneq ($(PLATFORM),) 91export PLATFORM_DRIVERS_PATH := $(DRIVERS_PATH)/platform/$(PLATFORM) 92endif 93 94PHONY += default 95default: all 96 97# top directory use aarch64 98ARCH = aarch64 99include $(BUILD_CONFIG)/var.mk 100include $(BUILD_CONFIG)/plat_config_file.mk 101 102PHONY += GEN_CONF_FILE PREBUILD_OPENSSL 103 104GEN_CONF_FILE: 105 echo "generated platautoconf.h " 106 rm -rf $(PLAT_AUTOCONF_FILE) 107 test -d $(PREBUILD_DIR)/headers || mkdir -p $(PREBUILD_DIR)/headers 108 touch $(PLAT_AUTOCONF_FILE) 109 grep '.*=.*' < $(CONFIG_FILE) > $(PLAT_AUTOCONF_FILE) 110 sed -i '1i\#define PLAT_AUTO_CONFIG_H' $(PLAT_AUTOCONF_FILE) 111 sed -i '1i\#ifndef PLAT_AUTO_CONFIG_H' $(PLAT_AUTOCONF_FILE) 112 sed -i -r 's/(.*)=y/#define \1\t1/g' $(PLAT_AUTOCONF_FILE) 113 sed -i -r '/(.*)=n/d' $(PLAT_AUTOCONF_FILE) 114 sed -i -r 's/(.*)=(.*)/#define \1\t\2/g' $(PLAT_AUTOCONF_FILE) 115 sed -i '$$a\#endif /* AUTO_CONFIG_H */' $(PLAT_AUTOCONF_FILE) 116 rm -rf $(PREBUILD_DIR)/headers/.config 117 cat $(CONFIG_FILE) | tee $(PREBUILD_DIR)/headers/.config 118 119PREBUILD_OPENSSL: 120 @bash $(TOPDIR)/lib/teelib/libopenssl/build_openssl.sh $(THIRDPARTY) $(TOPDIR) 121 122export CONFIG_CRYPTO_SOFT_ENGINE := $(CONFIG_CRYPTO_SOFT_ENGINE) 123 124export PLAT_CFG_DIR := $(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/$(CHIP_NAME)/plat_cfg 125export PLAT_COMMON_DIR := $(PLATFORM_DIR)/common 126ifneq ($(strip $(TARGET_BOARD_PLATFORM)), ) 127ifeq ($(LIBS_INSTALL_DIR),) 128include $(BUILD_PACK)/plat_config.mk 129endif 130endif 131include $(BUILD_CONFIG)/toolchain.mk 132include $(BUILD_OPERATION)/project.mk 133 134# for install header 135ifeq ($(HDR_INSTALL_DIR),) 136HDR_INSTALL_DIR:=$(HDR_L_DIR) 137$(shell test -d $(HDR_INSTALL_DIR) || mkdir -p $(HDR_INSTALL_DIR)) 138endif 139 140check_platform: 141ifndef PLATFORM 142 $(error PLATFORM is not set) 143endif 144 @echo "PLATFORM is set to $(PLATFORM)" 145 146PHONY += check_platform 147 148# default target 149PHONY += libs $(drivers) $(platform_drivers) $(frameworks) $(service) package 150all: install_headers setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service) package 151tees: setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service) 152$(drivers): setup_links libs link_libs 153$(platform_drivers): check_platform setup_links libs link_libs 154$(frameworks): setup_links libs link_libs 155$(service): setup_links libs link_libs 156package: check_sym 157 @mkdir -p $(FRAMEWORK_ELF_PATH) 158 @mkdir -p $(FRAMEWORK_ELF_PATH)/apps 159 cp -a $(product_apps) $(FRAMEWORK_ELF_PATH)/apps 160 161ifeq ($(CONFIG_SUPPORT_64BIT),) 162PHONY += link_libs link_arm_libs link_aarch64_libs $(product_apps) 163link_libs: link_arm_libs link_aarch64_libs 164endif 165 166ifeq ($(CONFIG_SUPPORT_64BIT), false) 167PHONY += link_libs link_arm_libs $(product_apps) 168link_libs: link_arm_libs 169endif 170 171ifeq ($(CONFIG_SUPPORT_64BIT), true) 172PHONY += link_libs link_aarch64_libs $(product_apps) 173link_libs: link_aarch64_libs 174endif 175 176link_arm_libs: libs 177 @echo "[link] libs=$(libs)" 178 $(VER) PBD=$(PREBUILD_LIBS)/arm/ ; \ 179 for lib in `ls $$PBD`; do \ 180 link=$(OUTPUTDIR)/arm/libs/$$lib ; \ 181 f=$$PBD/$$lib ; \ 182 if [ ! -L $$link ] && [ ! -e $$link ] ; then \ 183 ln -s $$f $$link && \ 184 echo "link prebuild library: $$link" ; \ 185 fi \ 186 done 187 188link_aarch64_libs: libs 189 @echo "[link] aarch libs=$(libs)" 190 $(VER) PBD=$(PREBUILD_LIBS)/aarch64/ ; \ 191 for lib in `ls $$PBD`; do \ 192 link=$(OUTPUTDIR)/aarch64/libs/$$lib ; \ 193 f=$$PBD/$$lib ; \ 194 if [ ! -L $$link ] && [ ! -e $$link ] ; then \ 195 ln -s $$f $$link && \ 196 echo "link prebuild library: $$link" ; \ 197 fi \ 198 done 199 200check_sym: $(product_apps) 201 @if [ "xy" = "xy" ] ; then \ 202 set -e ;\ 203 for i in $(check-syms-y) ; do \ 204 echo " [ CHECK SYMS ]: $$i" ;\ 205 $(BUILD_TOOLS)/generate_img/check-syms.sh $$i \ 206 $(PREBUILD_LIBS)/arm/libc_shared_a32.so \ 207 $(OUTPUTDIR)/arm/obj/arm/libtee_shared/libtee_shared_a32.so; \ 208 done ;\ 209 for i in $(check-a64-syms-y) ; do \ 210 echo " [ CHECK a64 SYMS ]: $$i" ;\ 211 $(BUILD_TOOLS)/generate_img/check-syms.sh $$i \ 212 $(PREBUILD_LIBS)/aarch64/libc_shared.so \ 213 $(OUTPUTDIR)/aarch64/obj/aarch64/libtee_shared/libtee_shared.so \ 214 $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so; \ 215 done ; fi 216 $(BUILD_TOOLS)/generate_img/smart-strip.sh $(product_apps) 217 218## setup & clean directory symbol-links, to compatible with CI circle-complexity 219setup_links: 220 221clean_links: 222 223## install headers: 224install_headers: setup_links $(HDR_INSTALL_DIR)/.timestamp 225$(HDR_INSTALL_DIR)/.timestamp: 226 @echo "before tools ${EXPORT_HDRS}" 227 $(VER) if [ -f "$(PLATFORM_DIR)/${PLATFORM_NAME}/${PRODUCT_NAME}/${CHIP_NAME}/plat_cfg/plat_cfg.h" ] ; then \ 228 cp $(PLATFORM_DIR)/${PLATFORM_NAME}/${PRODUCT_NAME}/${CHIP_NAME}/plat_cfg/plat_cfg.h $(HDR_INSTALL_DIR)/; fi; 229 touch $(HDR_INSTALL_DIR)/.timestamp 230 231## install libs: 232install_libs: 233 @for l in $(OUTPUTDIR)/arm/libs/* $(OUTPUTDIR)/aarch64/libs/*; do \ 234 if [ -e $$l ] && [ ! -L $$l ]; then cp -rf $$l $(LIBS_INSTALL_DIR); fi; \ 235 done 236 237PHONY += release 238release: 239 @echo "!!compile release" 240 @rm -rf tools/elf_extract 241 242PHONY += clean 243clean: clean_links 244 bash $(TOPDIR)/lib/teelib/libopenssl/clean_openssl.sh $(TOPDIR) 245 @rm -rf $(OUTPUTDIR) 246 @rm -rf sec_trustedcore.img 247 @rm -rf tools/linker.lds_pp 248 @rm -rf $(TOPDIR)/prebuild 249 250.PHONY: $(PHONY) 251