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########################################################## 22TOP_ROOT_ABS := $(realpath $(TOP)) 23 24# OPTEE_OUT_DIR could be exported explicitly 25# if PRODUCT_OUT is not the default out directory in aosp workspace 26OPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee 27ABS_OPTEE_OUT_DIR ?= $(realpath $(PRODUCT_OUT))/optee 28OPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta 29ABS_OPTEE_TA_OUT_DIR ?= $(ABS_OPTEE_OUT_DIR)/ta 30# Set so that OP-TEE clients can find the installed dev-kit, which 31# depends on platform and its OP-TEE word-size. 32OPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 33ABS_OPTEE_OS_OUT_DIR := $(ABS_OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 34TA_DEV_KIT_DIR := $(ABS_OPTEE_OS_OUT_DIR)/export-${OPTEE_TA_TARGETS} 35 36CROSS_COMPILE64 := $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX) 37CROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)" 38ifneq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),) 39CROSS_COMPILE32 := $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX) 40CROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)" 41endif 42 43OPTEE_BIN := $(OPTEE_OS_OUT_DIR)/core/tee.bin 44 45$(OPTEE_BIN) : $(sort $(shell find -L $(OPTEE_OS_DIR))) 46 47########################################################### 48## define making rules for $(OPTEE_BIN) target, and add ## 49## condition check to make it only be defined once ## 50## even though this mk file might be included multiple ## 51## times. The process to generate $(OPTEE_BIN) file will ## 52## generate the header files under ## 53## $(TA_DEV_KIT_DIR)/host_include too. ## 54## And the $(OPTEE_BIN) will be used as dependency for ## 55## other projects ## 56########################################################### 57ifneq (true,$(BUILD_OPTEE_OS_DEFINED)) 58BUILD_OPTEE_OS_DEFINED := true 59$(OPTEE_BIN): 60 @echo "Start building optee_os..." 61 $(MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \ 62 O=$(ABS_OPTEE_OS_OUT_DIR) \ 63 ta-targets=$(OPTEE_TA_TARGETS) \ 64 CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \ 65 PLATFORM=$(OPTEE_PLATFORM) \ 66 PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \ 67 $(CROSS_COMPILE_LINE) \ 68 $(OPTEE_EXTRA_FLAGS) 69 @echo "Finished building optee_os..." 70 71endif 72 73########################################################## 74## Lines for building TAs automatically ## 75## will only be included in Android.mk for TAs ## 76## local_module: ## 77## need to be defined before include for this ## 78########################################################## 79ifneq (false,$(INCLUDE_FOR_BUILD_TA)) 80include $(CLEAR_VARS) 81 82LOCAL_MODULE := $(local_module) 83LOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE) 84LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/optee_armtz 85LOCAL_MODULE_CLASS := EXECUTABLES 86LOCAL_MODULE_TAGS := optional 87 88TA_TMP_DIR := $(subst /,_,$(LOCAL_PATH)) 89TA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE) 90$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE) 91 @mkdir -p $(dir $@) 92 cp -uvf $< $@ 93 94TA_TMP_FILE_DEPS := 95ifneq ($(local_module_deps), ) 96$(foreach dep,$(local_module_deps), $(eval TA_TMP_FILE_DEPS += $(TARGET_OUT_VENDOR)/lib/optee_armtz/$(dep))) 97endif 98$(TA_TMP_FILE): $(TA_TMP_FILE_DEPS) 99$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH) 100$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE) 101$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR) 102$(TA_TMP_FILE): $(OPTEE_BIN) 103 @echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 104 $(MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(ABS_OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \ 105 TA_DEV_KIT_DIR=$(TA_DEV_KIT_DIR) \ 106 $(CROSS_COMPILE_LINE) 107 @echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 108 109include $(BUILD_PREBUILT) 110local_module_deps := 111endif 112