xref: /optee_os/mk/aosp_optee.mk (revision 2f773f5d75ace20105b9a1589d7db9c70427499c)
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
24# OPTEE_OUT_DIR could be exported explicitly
25# if PRODUCT_OUT is not the default out directory in aosp workspace
26OPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee
27ABS_OPTEE_OUT_DIR ?= $(realpath $(PRODUCT_OUT))/optee
28OPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta
29ABS_OPTEE_TA_OUT_DIR ?= $(ABS_OPTEE_OUT_DIR)/ta
30# Set so that OP-TEE clients can find the installed dev-kit, which
31# depends on platform and its OP-TEE word-size.
32OPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM)
33ABS_OPTEE_OS_OUT_DIR := $(ABS_OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM)
34TA_DEV_KIT_DIR := $(ABS_OPTEE_OS_OUT_DIR)/export-${OPTEE_TA_TARGETS}
35
36CROSS_COMPILE64 := $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX)
37CROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)"
38ifneq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),)
39CROSS_COMPILE32 := $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)
40CROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)"
41endif
42
43OPTEE_BIN := $(OPTEE_OS_OUT_DIR)/core/tee.bin
44
45$(OPTEE_BIN) : $(sort $(shell find -L $(OPTEE_OS_DIR)))
46
47###########################################################
48## define making rules for $(OPTEE_BIN) target, and add  ##
49## condition check to make it only be defined once       ##
50## even though this mk file might be included multiple   ##
51## times. The process to generate $(OPTEE_BIN) file will ##
52## generate the header files under                       ##
53## $(TA_DEV_KIT_DIR)/host_include too.                   ##
54## And the $(OPTEE_BIN) will be used as dependency for   ##
55## other projects                                        ##
56###########################################################
57ifneq (true,$(BUILD_OPTEE_OS_DEFINED))
58BUILD_OPTEE_OS_DEFINED := true
59$(OPTEE_BIN):
60	@echo "Start building optee_os..."
61	$(MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \
62		O=$(ABS_OPTEE_OS_OUT_DIR) \
63		ta-targets=$(OPTEE_TA_TARGETS) \
64		CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \
65		PLATFORM=$(OPTEE_PLATFORM) \
66		PLATFORM_FLAVOR=$(OPTEE_PLATFORM_FLAVOR) \
67		$(CROSS_COMPILE_LINE) \
68		$(OPTEE_EXTRA_FLAGS)
69	@echo "Finished building optee_os..."
70
71endif
72
73##########################################################
74## Lines for building TAs automatically                 ##
75## will only be included in Android.mk for TAs          ##
76## local_module:                                        ##
77##     need to be defined before include for this       ##
78##########################################################
79ifneq (false,$(INCLUDE_FOR_BUILD_TA))
80include $(CLEAR_VARS)
81
82LOCAL_MODULE := $(local_module)
83LOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE)
84LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/optee_armtz
85LOCAL_MODULE_CLASS := EXECUTABLES
86LOCAL_MODULE_TAGS := optional
87
88TA_TMP_DIR := $(subst /,_,$(LOCAL_PATH))
89TA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE)
90$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE)
91	@mkdir -p $(dir $@)
92	cp -uvf $< $@
93
94TA_TMP_FILE_DEPS :=
95ifneq ($(local_module_deps), )
96$(foreach dep,$(local_module_deps), $(eval TA_TMP_FILE_DEPS += $(TARGET_OUT_VENDOR)/lib/optee_armtz/$(dep)))
97endif
98$(TA_TMP_FILE): $(TA_TMP_FILE_DEPS)
99$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH)
100$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE)
101$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR)
102$(TA_TMP_FILE): $(OPTEE_BIN)
103	@echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..."
104	$(MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(ABS_OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \
105		TA_DEV_KIT_DIR=$(TA_DEV_KIT_DIR) \
106		$(CROSS_COMPILE_LINE)
107	@echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..."
108
109include $(BUILD_PREBUILT)
110local_module_deps :=
111endif
112