1ca6737b4SYongqin Liu########################################################## 2ca6737b4SYongqin Liu## Common mk file used for Android to compile and ## 3ca6737b4SYongqin Liu## integrate OP-TEE related components ## 4b96f67dbSVictor Chong## Following flags need to be defined in optee*.mk ## 5ca6737b4SYongqin Liu## OPTEE_OS_DIR ## 6ca6737b4SYongqin Liu## OPTEE_TA_TARGETS ## 7ca6737b4SYongqin Liu## OPTEE_CFG_ARM64_CORE ## 8ca6737b4SYongqin Liu## OPTEE_PLATFORM ## 90251b775SZhizhou Zhang## OPTEE_PLATFORM_FLAVOR ## 10b96f67dbSVictor Chong## OPTEE_EXTRA_FLAGS (optional) ## 11b96f67dbSVictor Chong## And BUILD_OPTEE_MK needs to be defined in optee*.mk ## 12ca6737b4SYongqin Liu## to point to this file ## 13ca6737b4SYongqin Liu## ## 14ca6737b4SYongqin Liu## local_module needs to be defined before including ## 15ca6737b4SYongqin Liu## this file to build TAs ## 16ca6737b4SYongqin Liu## ## 17ca6737b4SYongqin Liu########################################################## 18ca6737b4SYongqin Liu 19ca6737b4SYongqin Liu########################################################## 20ca6737b4SYongqin Liu## define common variables, like TA_DEV_KIT_DIR ## 21ca6737b4SYongqin Liu########################################################## 222f773f5dSYongqin LiuTOP_ROOT_ABS := $(realpath $(TOP)) 232f773f5dSYongqin Liu 24b2c322aeSYongqin LiuPREBUILT_MAKE ?= prebuilts/build-tools/linux-x86/bin/make 25b2c322aeSYongqin Liu# we need this check because the Pie build does not have 26b2c322aeSYongqin Liu# this prebuilt make tool 27b2c322aeSYongqin Liuifneq (,$(wildcard $(PREBUILT_MAKE))) 28b2c322aeSYongqin Liu# for master and versions which has prebuilt make 29b2c322aeSYongqin LiuHOST_MAKE := $(PREBUILT_MAKE) 30b2c322aeSYongqin Liu 31b2c322aeSYongqin Liu# The AOSP build tool is not the regular make, 32b2c322aeSYongqin Liu# that it adds -jN to $(MAKE), and that we should preserve 33b2c322aeSYongqin Liu# the flag or we would lose parallel build 34b2c322aeSYongqin Liu# The MAKE is redefined here in AOSP ckati: 35b2c322aeSYongqin Liu# https://android.googlesource.com/platform/build/kati/+/master/main.cc#100 36b2c322aeSYongqin Liuifneq (,$(filter -j%, $(MAKE))) 37b2c322aeSYongqin LiuHOST_MAKE += $(filter -j%, $(MAKE)) 38b2c322aeSYongqin Liuendif 39b2c322aeSYongqin Liu 40b2c322aeSYongqin Liuelse 41b2c322aeSYongqin Liu# For P and old versions which does not have prebuilt make, 42b2c322aeSYongqin Liu# let's use MAKE as what we did before 43b2c322aeSYongqin LiuHOST_MAKE := $(MAKE) 44b2c322aeSYongqin Liuendif 45b2c322aeSYongqin Liu 46b2c322aeSYongqin Liu 472f773f5dSYongqin Liu# OPTEE_OUT_DIR could be exported explicitly 482f773f5dSYongqin Liu# if PRODUCT_OUT is not the default out directory in aosp workspace 492f773f5dSYongqin LiuOPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee 502f773f5dSYongqin LiuABS_OPTEE_OUT_DIR ?= $(realpath $(PRODUCT_OUT))/optee 51ca6737b4SYongqin LiuOPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta 522f773f5dSYongqin LiuABS_OPTEE_TA_OUT_DIR ?= $(ABS_OPTEE_OUT_DIR)/ta 53ca6737b4SYongqin Liu# Set so that OP-TEE clients can find the installed dev-kit, which 54ca6737b4SYongqin Liu# depends on platform and its OP-TEE word-size. 55ca6737b4SYongqin LiuOPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 562f773f5dSYongqin LiuABS_OPTEE_OS_OUT_DIR := $(ABS_OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 572f773f5dSYongqin LiuTA_DEV_KIT_DIR := $(ABS_OPTEE_OS_OUT_DIR)/export-${OPTEE_TA_TARGETS} 58ca6737b4SYongqin Liu 59ca6737b4SYongqin LiuCROSS_COMPILE64 := $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX) 60ca6737b4SYongqin LiuCROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)" 61a8173b25SVictor Chongifneq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),) 62ca6737b4SYongqin LiuCROSS_COMPILE32 := $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX) 63ca6737b4SYongqin LiuCROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)" 64ca6737b4SYongqin Liuendif 65ca6737b4SYongqin Liu 662f773f5dSYongqin LiuOPTEE_BIN := $(OPTEE_OS_OUT_DIR)/core/tee.bin 672ef721a7SYongqin Liu 682f773f5dSYongqin Liu$(OPTEE_BIN) : $(sort $(shell find -L $(OPTEE_OS_DIR))) 692ef721a7SYongqin Liu 702ef721a7SYongqin Liu########################################################### 712f773f5dSYongqin Liu## define making rules for $(OPTEE_BIN) target, and add ## 722f773f5dSYongqin Liu## condition check to make it only be defined once ## 732f773f5dSYongqin Liu## even though this mk file might be included multiple ## 742f773f5dSYongqin Liu## times. The process to generate $(OPTEE_BIN) file will ## 752f773f5dSYongqin Liu## generate the header files under ## 762f773f5dSYongqin Liu## $(TA_DEV_KIT_DIR)/host_include too. ## 772f773f5dSYongqin Liu## And the $(OPTEE_BIN) will be used as dependency for ## 782f773f5dSYongqin Liu## other projects ## 792ef721a7SYongqin Liu########################################################### 80ca6737b4SYongqin Liuifneq (true,$(BUILD_OPTEE_OS_DEFINED)) 81ca6737b4SYongqin LiuBUILD_OPTEE_OS_DEFINED := true 822f773f5dSYongqin Liu$(OPTEE_BIN): 83ca6737b4SYongqin Liu @echo "Start building optee_os..." 84b2c322aeSYongqin Liu +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \ 852f773f5dSYongqin Liu O=$(ABS_OPTEE_OS_OUT_DIR) \ 86*dc701d99SJerome Forissier CFG_USER_TA_TARGETS=$(OPTEE_TA_TARGETS) \ 87ca6737b4SYongqin Liu CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \ 88ca6737b4SYongqin Liu PLATFORM=$(OPTEE_PLATFORM) \ 890251b775SZhizhou Zhang PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \ 90b96f67dbSVictor Chong $(CROSS_COMPILE_LINE) \ 91b96f67dbSVictor Chong $(OPTEE_EXTRA_FLAGS) 92ca6737b4SYongqin Liu @echo "Finished building optee_os..." 93ca6737b4SYongqin Liu 94ca6737b4SYongqin Liuendif 95ca6737b4SYongqin Liu 96ca6737b4SYongqin Liu########################################################## 97ca6737b4SYongqin Liu## Lines for building TAs automatically ## 98ca6737b4SYongqin Liu## will only be included in Android.mk for TAs ## 99ca6737b4SYongqin Liu## local_module: ## 100ca6737b4SYongqin Liu## need to be defined before include for this ## 101ca6737b4SYongqin Liu########################################################## 102ca6737b4SYongqin Liuifneq (false,$(INCLUDE_FOR_BUILD_TA)) 103ca6737b4SYongqin Liuinclude $(CLEAR_VARS) 104ca6737b4SYongqin Liu 105ca6737b4SYongqin LiuLOCAL_MODULE := $(local_module) 106ca6737b4SYongqin LiuLOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE) 1077247a01eSYongqin LiuLOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/optee_armtz 108ca6737b4SYongqin LiuLOCAL_MODULE_CLASS := EXECUTABLES 109ca6737b4SYongqin LiuLOCAL_MODULE_TAGS := optional 110ca6737b4SYongqin Liu 111ca6737b4SYongqin LiuTA_TMP_DIR := $(subst /,_,$(LOCAL_PATH)) 112ca6737b4SYongqin LiuTA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE) 113ca6737b4SYongqin Liu$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE) 114ca6737b4SYongqin Liu @mkdir -p $(dir $@) 115ca6737b4SYongqin Liu cp -uvf $< $@ 116ca6737b4SYongqin Liu 1174c4e0dd0SVictor ChongTA_TMP_FILE_DEPS := 1184c4e0dd0SVictor Chongifneq ($(local_module_deps), ) 1197247a01eSYongqin Liu$(foreach dep,$(local_module_deps), $(eval TA_TMP_FILE_DEPS += $(TARGET_OUT_VENDOR)/lib/optee_armtz/$(dep))) 1204c4e0dd0SVictor Chongendif 1214c4e0dd0SVictor Chong$(TA_TMP_FILE): $(TA_TMP_FILE_DEPS) 122ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH) 123ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE) 124ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR) 1252f773f5dSYongqin Liu$(TA_TMP_FILE): $(OPTEE_BIN) 126ca6737b4SYongqin Liu @echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 127b2c322aeSYongqin Liu +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(ABS_OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \ 128c8645107SJassi Brar TA_DEV_KIT_DIR=$(TA_DEV_KIT_DIR) \ 129ca6737b4SYongqin Liu $(CROSS_COMPILE_LINE) 130ca6737b4SYongqin Liu @echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 131ca6737b4SYongqin Liu 132ca6737b4SYongqin Liuinclude $(BUILD_PREBUILT) 1334c4e0dd0SVictor Chonglocal_module_deps := 134ca6737b4SYongqin Liuendif 135