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 := libdrv_shared$(TARG).so 12 13libdrv_shared_c_files := 14 15libdrv_shared_c_files += src/io_operations.c 16libdrv_shared_c_files += src/drv_share.c 17libdrv_shared_c_files += $(DRVLIB)/common/libdrv_frame/src/drv_thread.c 18libdrv_shared_c_files += $(DRVLIB)/common/libdrv_frame/src/drv_param_ops.c 19 20ifneq ($(CONFIG_DRVMGR_64BIT), ) 21libdrv_shared_c_files += src/tee_drv_entry.c 22libdrv_shared_c_files += src/drv_dispatch.c 23libdrv_shared_c_files += src/drv_operations.c 24 25ifneq ($(CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT), ) 26flags += -DCRYPTO_MGR_SERVER_ENABLE 27libdrv_shared_c_files += src/drv_random.c 28endif 29 30ifeq ($(WITH_ENG_VERSION), true) 31flags += -DTEE_SUPPORT_CMD_DUMP 32flags += -DTEE_SUPPORT_DRV_FD_DUMP 33endif 34endif 35 36include $(BUILD_LIB)/lib-common.mk 37inc-flags += -I$(DRIVERS_PATH)/include 38inc-flags += -I$(PREBUILD_HEADER)/libc/arch/$(ARCH)/bits 39inc-flags += -I$(DRVLIB)/common/libdrv_frame/include 40inc-flags += -I$(DRVLIB)/libdrv_shared/include 41inc-flags += -I$(TEELIB)/libdrv/include 42inc-flags += -I$(TEELIB)/libteeos/include 43inc-flags += -I$(TEELIB)/libteeos/include/tee 44inc-flags += -I$(TEELIB)/libteeos/include/legacy 45inc-flags += -I$(TEELIB)/libteemem/include 46inc-flags += -I$(TEELIB)/libipc_hal/include 47 48ifneq ($(CONFIG_DRVMGR_64BIT), ) 49inc-flags += -I$(SYSLIB)/libspawn_common/include 50inc-flags += -I$(TEELIB)/libteeconfig/include 51endif 52 53ifneq ($(CRYPTO_MGR_SERVER_ENABLE), ) 54inc-flags += -I$(TEELIB)/libcrypto_hal/include 55inc-flags += -I$(TEELIB)/libcrypto/include 56endif 57 58include $(BUILD_CONFIG)/feature-macro.mk 59 60MODULE_FILE = $(BUILD_DIR)/$(SONAME) 61INSTALL_FILE = $(LIB_DIR)/$(SONAME) 62 63target: $(INSTALL_FILE) 64$(INSTALL_FILE): $(MODULE_FILE) 65 @test -d $(LIB_DIR) || mkdir -p $(LIB_DIR) 66 @echo "libdrv_shared [ INSTALL ] $(MODULE_FILE)" 67 $(VER)cp -rafp $(MODULE_FILE) $(LIB_DIR) 68 69$(BUILD_DIR)/extern.txt: extern.txt $(BUILD_DIR)/export.txt 70 @echo "libdrv_shared preprocess ${BUILD_DIR}/extern.txt" 71 @mkdir -p $(@D) 72 @echo "libdrv_shared extern ${flags}" 73 @${CC} ${flags} -P -E -o $@ -x c $< 74$(BUILD_DIR)/export.txt: export.txt 75 @echo "libdrv_shared preprocess ${BUILD_DIR}/export.txt" 76 @mkdir -p $(@D) 77 @echo "libdrv_shared export ${flags}" 78 @${CC} ${flags} -P -E -o $@ -x c $< 79 80ld-flags := 81ld-flags += -lc_shared$(TARG) -lteemem$(TARG) -lteeconfig$(TARG) 82 83ld-flags += -z separate-loadable-segments 84 85$(MODULE_FILE): $(BUILD_DIR)/extern.txt $(libdrv_shared_objs) 86 @echo "libdrv_shared xom32_disable ld-flags is $(ld-flags) [ LD ] $@ LIB_DIR=$(LIB_DIR)" 87 $(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections --version-script=$(BUILD_DIR)/export.txt -o $@ \ 88 $^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group \ 89 $(LIBCOMPILER_RT_BUILTINS) --end-group $(ld-flags) -nostdlib -z max-page-size=4096 90 $(VER)$(OBJCOPY) $@ 91