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