xref: /optee_os/mk/aosp_optee.mk (revision ca6737b41c68973c6a0bb271906423c9e2d4e7db)
1*ca6737b4SYongqin Liu##########################################################
2*ca6737b4SYongqin Liu## Common mk file used for Android to compile and       ##
3*ca6737b4SYongqin Liu## integrate OP-TEE related components                   ##
4*ca6737b4SYongqin Liu## Following flags need to be defined in device.mk    ##
5*ca6737b4SYongqin Liu##    OPTEE_OS_DIR                                      ##
6*ca6737b4SYongqin Liu##    OPTEE_TA_TARGETS                                  ##
7*ca6737b4SYongqin Liu##    OPTEE_CFG_ARM64_CORE                              ##
8*ca6737b4SYongqin Liu##    OPTEE_PLATFORM                                    ##
9*ca6737b4SYongqin Liu## And BUILD_OPTEE_MK needs to be defined in device.mk  ##
10*ca6737b4SYongqin Liu## to point to this file                                ##
11*ca6737b4SYongqin Liu##                                                      ##
12*ca6737b4SYongqin Liu## local_module needs to be defined before including    ##
13*ca6737b4SYongqin Liu## this file to build TAs                               ##
14*ca6737b4SYongqin Liu##                                                      ##
15*ca6737b4SYongqin Liu##########################################################
16*ca6737b4SYongqin Liu
17*ca6737b4SYongqin Liu##########################################################
18*ca6737b4SYongqin Liu## define common variables, like TA_DEV_KIT_DIR         ##
19*ca6737b4SYongqin Liu##########################################################
20*ca6737b4SYongqin LiuOPTEE_OUT_DIR ?= $(PRODUCT_OUT)/optee
21*ca6737b4SYongqin LiuOPTEE_TA_OUT_DIR ?= $(OPTEE_OUT_DIR)/ta
22*ca6737b4SYongqin Liu# Set so that OP-TEE clients can find the installed dev-kit, which
23*ca6737b4SYongqin Liu# depends on platform and its OP-TEE word-size.
24*ca6737b4SYongqin LiuOPTEE_OS_OUT_DIR ?= $(OPTEE_OUT_DIR)/arm-plat-$(OPTEE_PLATFORM)
25*ca6737b4SYongqin LiuTA_DEV_KIT_DIR := $(OPTEE_OS_OUT_DIR)/export-${OPTEE_TA_TARGETS}
26*ca6737b4SYongqin Liu
27*ca6737b4SYongqin LiuTOP_ROOT_ABS := $(realpath $(TOP))
28*ca6737b4SYongqin LiuCROSS_COMPILE64 := $(TOP_ROOT_ABS)/$(TARGET_TOOLS_PREFIX)
29*ca6737b4SYongqin LiuCROSS_COMPILE_LINE := CROSS_COMPILE64="$(CROSS_COMPILE64)"
30*ca6737b4SYongqin Liuifeq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),)
31*ca6737b4SYongqin LiuCROSS_COMPILE32 := $(TOP_ROOT_ABS)/$($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)
32*ca6737b4SYongqin LiuCROSS_COMPILE_LINE += CROSS_COMPILE32="$(CROSS_COMPILE32)"
33*ca6737b4SYongqin Liuendif
34*ca6737b4SYongqin Liu
35*ca6737b4SYongqin Liu##########################################################
36*ca6737b4SYongqin Liu## define BUILD_OPTEE_OS target, add condition check    ##
37*ca6737b4SYongqin Liu## to make it only be defined once even though          ##
38*ca6737b4SYongqin Liu## this file might be included multiple times           ##
39*ca6737b4SYongqin Liu##########################################################
40*ca6737b4SYongqin Liuifneq (true,$(BUILD_OPTEE_OS_DEFINED))
41*ca6737b4SYongqin LiuBUILD_OPTEE_OS_DEFINED := true
42*ca6737b4SYongqin Liu
43*ca6737b4SYongqin Liu.PHONY: BUILD_OPTEE_OS
44*ca6737b4SYongqin LiuBUILD_OPTEE_OS:
45*ca6737b4SYongqin Liu	@echo "Start building optee_os..."
46*ca6737b4SYongqin Liu	$(MAKE) -C $(TOP_ROOT_ABS)/$(OPTEE_OS_DIR) \
47*ca6737b4SYongqin Liu		O=$(TOP_ROOT_ABS)/$(OPTEE_OS_OUT_DIR) \
48*ca6737b4SYongqin Liu		ta-targets=$(OPTEE_TA_TARGETS) \
49*ca6737b4SYongqin Liu		CFG_ARM64_core=$(OPTEE_CFG_ARM64_CORE) \
50*ca6737b4SYongqin Liu		PLATFORM=$(OPTEE_PLATFORM) \
51*ca6737b4SYongqin Liu		$(CROSS_COMPILE_LINE)
52*ca6737b4SYongqin Liu	@echo "Finished building optee_os..."
53*ca6737b4SYongqin Liu
54*ca6737b4SYongqin Liuendif
55*ca6737b4SYongqin Liu
56*ca6737b4SYongqin Liu##########################################################
57*ca6737b4SYongqin Liu## Lines for building TAs automatically                 ##
58*ca6737b4SYongqin Liu## will only be included in Android.mk for TAs          ##
59*ca6737b4SYongqin Liu## local_module:                                        ##
60*ca6737b4SYongqin Liu##     need to be defined before include for this       ##
61*ca6737b4SYongqin Liu##########################################################
62*ca6737b4SYongqin Liuifneq (false,$(INCLUDE_FOR_BUILD_TA))
63*ca6737b4SYongqin Liuinclude $(CLEAR_VARS)
64*ca6737b4SYongqin Liu
65*ca6737b4SYongqin LiuLOCAL_MODULE := $(local_module)
66*ca6737b4SYongqin LiuLOCAL_PREBUILT_MODULE_FILE := $(OPTEE_TA_OUT_DIR)/$(LOCAL_MODULE)
67*ca6737b4SYongqin LiuLOCAL_MODULE_PATH := $(TARGET_OUT)/lib/optee_armtz
68*ca6737b4SYongqin LiuLOCAL_MODULE_CLASS := EXECUTABLES
69*ca6737b4SYongqin LiuLOCAL_MODULE_TAGS := optional
70*ca6737b4SYongqin Liu
71*ca6737b4SYongqin LiuTA_TMP_DIR := $(subst /,_,$(LOCAL_PATH))
72*ca6737b4SYongqin LiuTA_TMP_FILE := $(OPTEE_TA_OUT_DIR)/$(TA_TMP_DIR)/$(LOCAL_MODULE)
73*ca6737b4SYongqin Liu$(LOCAL_PREBUILT_MODULE_FILE): $(TA_TMP_FILE)
74*ca6737b4SYongqin Liu	@mkdir -p $(dir $@)
75*ca6737b4SYongqin Liu	cp -uvf $< $@
76*ca6737b4SYongqin Liu
77*ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_SRC_DIR := $(LOCAL_PATH)
78*ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_TMP_FILE := $(TA_TMP_FILE)
79*ca6737b4SYongqin Liu$(TA_TMP_FILE): PRIVATE_TA_TMP_DIR := $(TA_TMP_DIR)
80*ca6737b4SYongqin Liu$(TA_TMP_FILE): BUILD_OPTEE_OS
81*ca6737b4SYongqin Liu	@echo "Start building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..."
82*ca6737b4SYongqin Liu	$(MAKE) -C $(TOP_ROOT_ABS)/$(PRIVATE_TA_SRC_DIR) O=$(TOP_ROOT_ABS)/$(OPTEE_TA_OUT_DIR)/$(PRIVATE_TA_TMP_DIR) \
83*ca6737b4SYongqin Liu		TA_DEV_KIT_DIR=$(TOP_ROOT_ABS)/$(TA_DEV_KIT_DIR) \
84*ca6737b4SYongqin Liu		$(CROSS_COMPILE_LINE)
85*ca6737b4SYongqin Liu	@echo "Finished building TA for $(PRIVATE_TA_SRC_DIR) $(PRIVATE_TA_TMP_FILE)..."
86*ca6737b4SYongqin Liu
87*ca6737b4SYongqin Liuinclude $(BUILD_PREBUILT)
88*ca6737b4SYongqin Liuendif
89