xref: /optee_os/mk/aosp_optee.mk (revision dc701d99e0d0714089099ba92ae7aa2a0b9f5fb8)
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