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) ## 114f1712c6SAndrii Chepurnyi## OPTEE_EXTRA_TA_FLAGS (optional) ## 12b96f67dbSVictor Chong## And BUILD_OPTEE_MK needs to be defined in optee*.mk ## 13ca6737b4SYongqin Liu## to point to this file ## 14ca6737b4SYongqin Liu## ## 15ca6737b4SYongqin Liu## local_module needs to be defined before including ## 16ca6737b4SYongqin Liu## this file to build TAs ## 17ca6737b4SYongqin Liu## ## 18ca6737b4SYongqin Liu########################################################## 19ca6737b4SYongqin Liu 20ca6737b4SYongqin Liu########################################################## 21ca6737b4SYongqin Liu## define common variables, like TA_DEV_KIT_DIR ## 22ca6737b4SYongqin Liu########################################################## 232f773f5dSYongqin LiuTOP_ROOT_ABS := $(realpath $(TOP)) 242f773f5dSYongqin Liu 25b2c322aeSYongqin LiuPREBUILT_MAKE ?= prebuilts/build-tools/linux-x86/bin/make 26b2c322aeSYongqin Liu# we need this check because the Pie build does not have 27b2c322aeSYongqin Liu# this prebuilt make tool 28b2c322aeSYongqin Liuifneq (,$(wildcard $(PREBUILT_MAKE))) 29b2c322aeSYongqin Liu# for master and versions which has prebuilt make 30b2c322aeSYongqin LiuHOST_MAKE := $(PREBUILT_MAKE) 31b2c322aeSYongqin Liu 32b2c322aeSYongqin Liu# The AOSP build tool is not the regular make, 33b2c322aeSYongqin Liu# that it adds -jN to $(MAKE), and that we should preserve 34b2c322aeSYongqin Liu# the flag or we would lose parallel build 35b2c322aeSYongqin Liu# The MAKE is redefined here in AOSP ckati: 36b2c322aeSYongqin Liu# https://android.googlesource.com/platform/build/kati/+/master/main.cc#100 37b2c322aeSYongqin Liuifneq (,$(filter -j%, $(MAKE))) 38b2c322aeSYongqin LiuHOST_MAKE += $(filter -j%, $(MAKE)) 39b2c322aeSYongqin Liuendif 40b2c322aeSYongqin Liu 41b2c322aeSYongqin Liuelse 42b2c322aeSYongqin Liu# For P and old versions which does not have prebuilt make, 43b2c322aeSYongqin Liu# let's use MAKE as what we did before 44b2c322aeSYongqin LiuHOST_MAKE := $(MAKE) 45b2c322aeSYongqin Liuendif 46b2c322aeSYongqin Liu 47b2c322aeSYongqin Liu 482f773f5dSYongqin Liu# OPTEE_OUT_DIR could be exported explicitly 492f773f5dSYongqin Liu# if PRODUCT_OUT is not the default out directory in aosp workspace 502f773f5dSYongqin LiuOPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee 512f773f5dSYongqin LiuABS_OPTEE_OUT_DIR ?= $(realpath $(PRODUCT_OUT))/optee 52ca6737b4SYongqin LiuOPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta 532f773f5dSYongqin LiuABS_OPTEE_TA_OUT_DIR ?= $(ABS_OPTEE_OUT_DIR)/ta 54ca6737b4SYongqin Liu# Set so that OP-TEE clients can find the installed dev-kit, which 55ca6737b4SYongqin Liu# depends on platform and its OP-TEE word-size. 56ca6737b4SYongqin LiuOPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 572f773f5dSYongqin LiuABS_OPTEE_OS_OUT_DIR := $(ABS_OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM) 58def7f398STadd Kaoifneq ($(local_optee_ta_target),) 59def7f398STadd KaoTA_TARGET := $(local_optee_ta_target) 60def7f398STadd Kaoelse 61def7f398STadd KaoTA_TARGET := $(OPTEE_TA_TARGETS) 62def7f398STadd Kaoendif 63*a82b93c6STadd KaoTA_DEV_KIT_DIR := $(OPTEE_OS_OUT_DIR)/export-$(TA_TARGET) 64*a82b93c6STadd KaoABS_TA_DEV_KIT_DIR := $(ABS_OPTEE_OS_OUT_DIR)/export-$(TA_TARGET) 65ca6737b4SYongqin Liu 662f291abeSAndrii ChepurnyiCROSS_COMPILE64 ?= $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX) 67ca6737b4SYongqin LiuCROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)" 68a8173b25SVictor Chongifneq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),) 692f291abeSAndrii ChepurnyiCROSS_COMPILE32 ?= $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX) 70ca6737b4SYongqin LiuCROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)" 71ca6737b4SYongqin Liuendif 72ca6737b4SYongqin Liu 732f773f5dSYongqin LiuOPTEE_BIN := $(OPTEE_OS_OUT_DIR)/core/tee.bin 742ef721a7SYongqin Liu 752f773f5dSYongqin Liu$(OPTEE_BIN) : $(sort $(shell find -L $(OPTEE_OS_DIR))) 762ef721a7SYongqin Liu 77*a82b93c6STadd KaoOPTEE_TA_DEV_KIT_MK := $(TA_DEV_KIT_DIR)/mk/ta_dev_kit.mk 78*a82b93c6STadd Kao 79*a82b93c6STadd Kao$(OPTEE_TA_DEV_KIT_MK) : $(sort $(shell find -L $(OPTEE_OS_DIR))) 80*a82b93c6STadd Kao 812ef721a7SYongqin Liu########################################################### 822f773f5dSYongqin Liu## define making rules for $(OPTEE_BIN) target, and add ## 832f773f5dSYongqin Liu## condition check to make it only be defined once ## 842f773f5dSYongqin Liu## even though this mk file might be included multiple ## 852f773f5dSYongqin Liu## times. The process to generate $(OPTEE_BIN) file will ## 862f773f5dSYongqin Liu## generate the header files under ## 872f773f5dSYongqin Liu## $(TA_DEV_KIT_DIR)/host_include too. ## 882f773f5dSYongqin Liu## And the $(OPTEE_BIN) will be used as dependency for ## 892f773f5dSYongqin Liu## other projects ## 902ef721a7SYongqin Liu########################################################### 91ca6737b4SYongqin Liuifneq (true,$(BUILD_OPTEE_OS_DEFINED)) 92ca6737b4SYongqin LiuBUILD_OPTEE_OS_DEFINED := true 932f773f5dSYongqin Liu$(OPTEE_BIN): 94ca6737b4SYongqin Liu @echo "Start building optee_os..." 95b2c322aeSYongqin Liu +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \ 962f773f5dSYongqin Liu O=$(ABS_OPTEE_OS_OUT_DIR) \ 97dc701d99SJerome Forissier CFG_USER_TA_TARGETS=$(OPTEE_TA_TARGETS) \ 98ca6737b4SYongqin Liu CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \ 99ca6737b4SYongqin Liu PLATFORM=$(OPTEE_PLATFORM) \ 1000251b775SZhizhou Zhang PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \ 101b96f67dbSVictor Chong $(CROSS_COMPILE_LINE) \ 102b96f67dbSVictor Chong $(OPTEE_EXTRA_FLAGS) 103ca6737b4SYongqin Liu @echo "Finished building optee_os..." 104ca6737b4SYongqin Liu 105ca6737b4SYongqin Liuendif 106ca6737b4SYongqin Liu 107*a82b93c6STadd Kao########################################################### 108*a82b93c6STadd Kao## similar to the $(OPTEE_BIN) target above, use condition 109*a82b93c6STadd Kao## check to make $(OPTEE_TA_DEV_KIT_MK) for different ta 110*a82b93c6STadd Kao## targets only be defined once 111*a82b93c6STadd Kao########################################################### 112*a82b93c6STadd Kaoifeq ($(filter $(TA_TARGET),$(BUILD_TA_DEV_KIT_DEFINED)),) 113*a82b93c6STadd KaoBUILD_TA_DEV_KIT_DEFINED := $(TA_TARGET) $(BUILD_TA_DEV_KIT_DEFINED) 114*a82b93c6STadd Kao$(OPTEE_TA_DEV_KIT_MK): PRIVATE_TA_TARGET := $(TA_TARGET) 115*a82b93c6STadd Kao$(OPTEE_TA_DEV_KIT_MK): 116*a82b93c6STadd Kao @echo "Start building ta_dev_kit ($(PRIVATE_TA_TARGET))..." 117*a82b93c6STadd Kao +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \ 118*a82b93c6STadd Kao O=$(ABS_OPTEE_OS_OUT_DIR) \ 119*a82b93c6STadd Kao CFG_USER_TA_TARGETS=$(PRIVATE_TA_TARGET) \ 120*a82b93c6STadd Kao CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \ 121*a82b93c6STadd Kao PLATFORM=$(OPTEE_PLATFORM) \ 122*a82b93c6STadd Kao PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \ 123*a82b93c6STadd Kao $(CROSS_COMPILE_LINE) \ 124*a82b93c6STadd Kao $(OPTEE_EXTRA_FLAGS) ta_dev_kit 125*a82b93c6STadd Kao @echo "Finished building ta_dev_kit ($(PRIVATE_TA_TARGET))..." 126*a82b93c6STadd Kaoendif 127*a82b93c6STadd Kao 128ca6737b4SYongqin Liu########################################################## 129ca6737b4SYongqin Liu## Lines for building TAs automatically ## 130ca6737b4SYongqin Liu## will only be included in Android.mk for TAs ## 131ca6737b4SYongqin Liu## local_module: ## 132ca6737b4SYongqin Liu## need to be defined before include for this ## 133ca6737b4SYongqin Liu########################################################## 134ca6737b4SYongqin Liuifneq (false,$(INCLUDE_FOR_BUILD_TA)) 135ca6737b4SYongqin Liuinclude $(CLEAR_VARS) 136ca6737b4SYongqin Liu 137a1e5e940STadd Kaodefine ta_class 138a1e5e940STadd Kao$(if $(filter %.ta,$1),EXECUTABLES,STATIC_LIBRARIES) 139a1e5e940STadd Kaoendef 140a1e5e940STadd Kao 141ca6737b4SYongqin LiuLOCAL_MODULE := $(local_module) 142ca6737b4SYongqin LiuLOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE) 1437247a01eSYongqin LiuLOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/optee_armtz 144a1e5e940STadd KaoLOCAL_MODULE_CLASS := $(call ta_class,$(local_module)) 145ca6737b4SYongqin LiuLOCAL_MODULE_TAGS := optional 146fb66b364STadd KaoLOCAL_REQUIRED_MODULES := $(local_module_deps) 147ca6737b4SYongqin Liu 148def7f398STadd KaoTA_TMP_DIR := $(addsuffix _$(TA_TARGET), $(subst /,_,$(LOCAL_PATH))) 149ca6737b4SYongqin LiuTA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE) 150ca6737b4SYongqin Liu$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE) 151ca6737b4SYongqin Liu @mkdir -p $(dir $@) 1523ec2cabcSVictor Chong cp -vf $< $@ 153ca6737b4SYongqin Liu 154a1e5e940STadd KaoTA_TMP_FILE_DEPS := 155a1e5e940STadd Kaoifneq ($(local_module_deps),) 156a1e5e940STadd Kao$(foreach dep, $(local_module_deps), $(eval TA_TMP_FILE_DEPS += $(call intermediates-dir-for,$(call ta_class,$(dep)),$(dep))/$(dep))) 157a1e5e940STadd Kaoendif 158a1e5e940STadd Kao$(TA_TMP_FILE): $(TA_TMP_FILE_DEPS) 159ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH) 160ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE) 161ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR) 162*a82b93c6STadd Kao$(TA_TMP_FILE): PRIVATE_TA_DEV_KIT_DIR := $(ABS_TA_DEV_KIT_DIR) 163*a82b93c6STadd Kao$(TA_TMP_FILE): $(OPTEE_TA_DEV_KIT_MK) 164ca6737b4SYongqin Liu @echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 165b2c322aeSYongqin Liu +$(HOST_MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(ABS_OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \ 166def7f398STadd Kao TA_DEV_KIT_DIR=$(PRIVATE_TA_DEV_KIT_DIR) \ 1674f1712c6SAndrii Chepurnyi $(CROSS_COMPILE_LINE) \ 1684f1712c6SAndrii Chepurnyi $(OPTEE_EXTRA_TA_FLAGS) 169ca6737b4SYongqin Liu @echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..." 170ca6737b4SYongqin Liu 171ca6737b4SYongqin Liuinclude $(BUILD_PREBUILT) 172*a82b93c6STadd Kao 173*a82b93c6STadd Kao# To get ta elf files for early-ta, 174*a82b93c6STadd Kao# copy them to $(PRODUCT_OUT)/unsigned/ on host 175*a82b93c6STadd Kaoifeq ($(call ta_class,$(local_module)),EXECUTABLES) 176*a82b93c6STadd Kaoinclude $(CLEAR_VARS) 177*a82b93c6STadd KaoLOCAL_MODULE := $(local_module).unsigned 178*a82b93c6STadd KaoLOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE) 179*a82b93c6STadd KaoLOCAL_MODULE_PATH := $(PRODUCT_OUT)/unsigned 180*a82b93c6STadd KaoLOCAL_MODULE_CLASS := $(call ta_class,$(local_module)) 181*a82b93c6STadd KaoLOCAL_MODULE_TAGS := optional 182*a82b93c6STadd Kao 183*a82b93c6STadd KaoTA_TMP_STRIPPED_ELF_FILE := $(patsubst %.ta,%.stripped.elf,$(TA_TMP_FILE)) 184*a82b93c6STadd Kao$(TA_TMP_STRIPPED_ELF_FILE): $(TA_TMP_FILE) 185*a82b93c6STadd Kao 186*a82b93c6STadd Kao$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_STRIPPED_ELF_FILE) 187*a82b93c6STadd Kao @mkdir -p $(dir $@) 188*a82b93c6STadd Kao cp -vf $< $@ 189*a82b93c6STadd Kao 190*a82b93c6STadd Kaoinclude $(BUILD_PREBUILT) 191*a82b93c6STadd Kaoendif # to get ta elf files for early-ta 192*a82b93c6STadd Kao 1934c4e0dd0SVictor Chonglocal_module_deps := 194def7f398STadd Kaolocal_optee_ta_target := 195ca6737b4SYongqin Liuendif 196