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. 10 11SONAME := libtee_shared$(TARG).so 12 13libtee_shared_c_files := $(wildcard src/*.c) 14 15inc-flags += -I$(DRIVERS_PATH)/include # dynion.h 16inc-flags += -I$(TEELIB)/libtee_shared/include 17inc-flags += -I$(TEELIB)/libdrv/include 18inc-flags += -I$(TEELIB)/libteeos/include/tee 19inc-flags += -I$(TEELIB)/libteeos/include/legacy 20inc-flags += -I$(TEELIB)/libteeconfig/include 21inc-flags += -I$(TEELIB)/libtee_stub/include 22inc-flags += -I$(PREBUILD_HEADER)/sys 23 24include $(BUILD_LIB)/lib-common.mk 25include $(BUILD_CONFIG)/feature-macro.mk 26 27ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), false) 28flags += -DCONFIG_TEE_MISC_DRIVER 29endif 30 31ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), true) 32flags += -DCONFIG_TEE_MISC_DRIVER 33endif 34 35MODULE_FILE = $(BUILD_DIR)/$(SONAME) 36INSTALL_FILE = $(LIB_DIR)/$(SONAME) 37 38target: $(INSTALL_FILE) 39$(INSTALL_FILE): $(MODULE_FILE) 40 @test -d $(LIB_DIR) || mkdir -p $(LIB_DIR) 41 @echo "[ INSTALL ] $(MODULE_FILE)" 42 $(VER)cp -rafp $(MODULE_FILE) $(LIB_DIR) 43 44libtee_shared_c_files := $(filter-out src/gk_auth_token.c, $(libtee_shared_c_files)) 45 46ifeq ($(strip $(TARGET_BUILD_VARIANT)), user) 47flags += -DDEF_BUILDUSERMODE 48endif 49 50ifeq ($(CONFIG_EXPORT_OPENSSL_SYMBOL), true) 51flags += -DSUPPORT_EXPORT_OPENSSL_SYMBOL 52endif 53 54ifeq (${CONFIG_DYN_IMPORT_CERT},y) 55flags += -DDYN_IMPORT_CERT=1 56endif 57 58EXTERN_FILE := oh_extern.txt 59EXPORT_FILE := oh_export.txt 60 61${BUILD_DIR}/$(EXTERN_FILE): $(EXTERN_FILE) ${BUILD_DIR}/$(EXPORT_FILE) 62 @echo "preprocess ${BUILD_DIR}/$(EXTERN_FILE)" 63 @mkdir -p $(@D) 64 @${CC} ${flags} -P -E -o $@ -x c $< 65${BUILD_DIR}/$(EXPORT_FILE): $(EXPORT_FILE) 66 @echo "preprocess ${BUILD_DIR}/$(EXPORT_FILE)" 67 @mkdir -p $(@D) 68 @${CC} ${flags} -P -E -o $@ -x c $< 69ld-flags := -lcrypto_hal$(TARG) -ltimer$(TARG) -lagent$(TARG) -lagent_base$(TARG) -ldrv$(TARG) \ 70 -lteeos$(TARG) -lpermission_service$(TARG) -lswcrypto_engine$(TARG) -ltaentry$(TARG) -lteeagentcommon_client$(TARG) -lcrypto$(TARG) \ 71 -lteeconfig$(TARG) -lteemem$(TARG) -lssa$(TARG) -lhuk${TARG} -lteedynsrv$(TARG) -lipc_hal$(TARG) -ltee_stub$(TARG) 72 73 74ifeq ($(CONFIG_CRYPTO_SOFT_ENGINE),mbedtls) 75ld-flags += -lmbedtls${TARG} 76else ifeq ($(CONFIG_CRYPTO_SOFT_ENGINE),openssl3) 77ld-flags += -lopenssl${TARG} 78flag += -DOPENSSL3_ENABLE 79else 80ld-flags += -lopenssl${TARG} 81flag += -DOPENSSL_ENABLE 82endif 83 84ifeq ($(findstring true, $(CONFIG_SE_SERVICE_32BIT) $(CONFIG_SE_SERVICE_64BIT)), true) 85ld-flags += -lse$(TARG) 86endif 87 88ld-flags += -z separate-loadable-segments 89 90$(MODULE_FILE): $(BUILD_DIR)/$(EXTERN_FILE) $(libtee_shared_objs) 91 @echo "LibTEE [LD] $@ LIB_DIR=$(LIB_DIR)" 92 $(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections --version-script=$(BUILD_DIR)/$(EXPORT_FILE) -o $@ \ 93 $^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group \ 94 $(LIBCOMPILER_RT_BUILTINS) --end-group $(ld-flags) -nostdlib -z max-page-size=4096 95 $(VER)$(OBJCOPY) $@ 96