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