1########################################################## 2## Common mk file used for Android to compile and ## 3## integrate OP-TEE related components ## 4## Following flags need to be defined in optee*.mk ## 5## OPTEE_OS_DIR ## 6## OPTEE_TA_TARGETS ## 7## OPTEE_CFG_ARM64_CORE ## 8## OPTEE_PLATFORM ## 9## OPTEE_PLATFORM_FLAVOR ## 10## OPTEE_EXTRA_FLAGS (optional) ## 11## And BUILD_OPTEE_MK needs to be defined in optee*.mk ## 12## to point to this file ## 13## ## 14## local_module needs to be defined before including ## 15## this file to build TAs ## 16## ## 17########################################################## 18 19########################################################## 20## define common variables, like TA_DEV_KIT_DIR ## 21########################################################## 22OPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee 23OPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta 24# Set so that OP-TEE clients can find the installed dev-kit, which 25# depends on platform and its OP-TEE word-size. 26OPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 27TA_DEV_KIT_DIR := $(OPTEE_OS_OUT_DIR)/export-${OPTEE_TA_TARGETS} 28 29TOP_ROOT_ABS := $(realpath $(TOP)) 30CROSS_COMPILE64 := $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX) 31CROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)" 32ifneq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),) 33CROSS_COMPILE32 := $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX) 34CROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)" 35endif 36 37OPTEE_BIN := $(TOP_ROOT_ABS)/$(OPTEE_OS_OUT_DIR)/core/tee.bin 38 39$(OPTEE_BIN) : BUILD_OPTEE_OS 40 41########################################################### 42## define BUILD_OPTEE_OS target, add condition check ## 43## to make it only be defined once even though ## 44## this file might be included multiple times ## 45## This BUILD_OPTEE_OS will help to generate the header ## 46## files under $(TA_DEV_KIT_DIR)/host_include and ## 47## the $(OPTEE_BIN) file which will be used as dependency## 48## for other projects ## 49########################################################### 50ifneq (true,$(BUILD_OPTEE_OS_DEFINED)) 51BUILD_OPTEE_OS_DEFINED := true 52 53.PHONY: BUILD_OPTEE_OS 54BUILD_OPTEE_OS: 55 @echo "Start building optee_os..." 56 $(MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \ 57 O=$(TOP_ROOT_ABS)/$(OPTEE_OS_OUT_DIR) \ 58 ta-targets=$(OPTEE_TA_TARGETS) \ 59 CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \ 60 PLATFORM=$(OPTEE_PLATFORM) \ 61 PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \ 62 $(CROSS_COMPILE_LINE) \ 63 $(OPTEE_EXTRA_FLAGS) 64 @echo "Finished building optee_os..." 65 66endif 67 68########################################################## 69## Lines for building TAs automatically ## 70## will only be included in Android.mk for TAs ## 71## local_module: ## 72## need to be defined before include for this ## 73########################################################## 74ifneq (false,$(INCLUDE_FOR_BUILD_TA)) 75include $(CLEAR_VARS) 76 77LOCAL_MODULE := $(local_module) 78LOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE) 79LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/optee_armtz 80LOCAL_MODULE_CLASS := EXECUTABLES 81LOCAL_MODULE_TAGS := optional 82 83TA_TMP_DIR := $(subst /,_,$(LOCAL_PATH)) 84TA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE) 85$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE) 86 @mkdir -p $(dir $@) 87 cp -uvf $< $@ 88 89$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH) 90$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE) 91$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR) 92$(TA_TMP_FILE): BUILD_OPTEE_OS 93 @echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 94 $(MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(TOP_ROOT_ABS)/$(OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \ 95 TA_DEV_KIT_DIR=$(TOP_ROOT_ABS)/$(TA_DEV_KIT_DIR) \ 96 $(CROSS_COMPILE_LINE) 97 @echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 98 99include $(BUILD_PREBUILT) 100endif 101