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 24PREBUILT_MAKE ?= prebuilts/build-tools/linux-x86/bin/make 25# we need this check because the Pie build does not have 26# this prebuilt make tool 27ifneq (,$(wildcard $(PREBUILT_MAKE))) 28# for master and versions which has prebuilt make 29HOST_MAKE := $(PREBUILT_MAKE) 30 31# The AOSP build tool is not the regular make, 32# that it adds -jN to $(MAKE), and that we should preserve 33# the flag or we would lose parallel build 34# The MAKE is redefined here in AOSP ckati: 35# https://android.googlesource.com/platform/build/kati/+/master/main.cc#100 36ifneq (,$(filter -j%, $(MAKE))) 37HOST_MAKE += $(filter -j%, $(MAKE)) 38endif 39 40else 41# For P and old versions which does not have prebuilt make, 42# let's use MAKE as what we did before 43HOST_MAKE := $(MAKE) 44endif 45 46 47# OPTEE_OUT_DIR could be exported explicitly 48# if PRODUCT_OUT is not the default out directory in aosp workspace 49OPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee 50ABS_OPTEE_OUT_DIR ?= $(realpath $(PRODUCT_OUT))/optee 51OPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta 52ABS_OPTEE_TA_OUT_DIR ?= $(ABS_OPTEE_OUT_DIR)/ta 53# Set so that OP-TEE clients can find the installed dev-kit, which 54# depends on platform and its OP-TEE word-size. 55OPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 56ABS_OPTEE_OS_OUT_DIR := $(ABS_OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 57TA_DEV_KIT_DIR := $(ABS_OPTEE_OS_OUT_DIR)/export-${OPTEE_TA_TARGETS} 58 59CROSS_COMPILE64 := $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX) 60CROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)" 61ifneq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),) 62CROSS_COMPILE32 := $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX) 63CROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)" 64endif 65 66OPTEE_BIN := $(OPTEE_OS_OUT_DIR)/core/tee.bin 67 68$(OPTEE_BIN) : $(sort $(shell find -L $(OPTEE_OS_DIR))) 69 70########################################################### 71## define making rules for $(OPTEE_BIN) target, and add ## 72## condition check to make it only be defined once ## 73## even though this mk file might be included multiple ## 74## times. The process to generate $(OPTEE_BIN) file will ## 75## generate the header files under ## 76## $(TA_DEV_KIT_DIR)/host_include too. ## 77## And the $(OPTEE_BIN) will be used as dependency for ## 78## other projects ## 79########################################################### 80ifneq (true,$(BUILD_OPTEE_OS_DEFINED)) 81BUILD_OPTEE_OS_DEFINED := true 82$(OPTEE_BIN): 83 @echo "Start building optee_os..." 84 +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \ 85 O=$(ABS_OPTEE_OS_OUT_DIR) \ 86 CFG_USER_TA_TARGETS=$(OPTEE_TA_TARGETS) \ 87 CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \ 88 PLATFORM=$(OPTEE_PLATFORM) \ 89 PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \ 90 $(CROSS_COMPILE_LINE) \ 91 $(OPTEE_EXTRA_FLAGS) 92 @echo "Finished building optee_os..." 93 94endif 95 96########################################################## 97## Lines for building TAs automatically ## 98## will only be included in Android.mk for TAs ## 99## local_module: ## 100## need to be defined before include for this ## 101########################################################## 102ifneq (false,$(INCLUDE_FOR_BUILD_TA)) 103include $(CLEAR_VARS) 104 105LOCAL_MODULE := $(local_module) 106LOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE) 107LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/optee_armtz 108LOCAL_MODULE_CLASS := EXECUTABLES 109LOCAL_MODULE_TAGS := optional 110 111TA_TMP_DIR := $(subst /,_,$(LOCAL_PATH)) 112TA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE) 113$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE) 114 @mkdir -p $(dir $@) 115 cp -vf $< $@ 116 117TA_TMP_FILE_DEPS := 118ifneq ($(local_module_deps), ) 119$(foreach dep,$(local_module_deps), $(eval TA_TMP_FILE_DEPS += $(TARGET_OUT_VENDOR)/lib/optee_armtz/$(dep))) 120endif 121$(TA_TMP_FILE): $(TA_TMP_FILE_DEPS) 122$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH) 123$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE) 124$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR) 125$(TA_TMP_FILE): $(OPTEE_BIN) 126 @echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 127 +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(ABS_OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \ 128 TA_DEV_KIT_DIR=$(TA_DEV_KIT_DIR) \ 129 $(CROSS_COMPILE_LINE) 130 @echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 131 132include $(BUILD_PREBUILT) 133local_module_deps := 134endif 135