xref: /OK3568_Linux_fs/buildroot/boot/optee-os/optee-os.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# optee-os
4#
5################################################################################
6
7OPTEE_OS_VERSION = $(call qstrip,$(BR2_TARGET_OPTEE_OS_VERSION))
8OPTEE_OS_LICENSE = BSD-2-Clause
9ifeq ($(BR2_TARGET_OPTEE_OS_LATEST),y)
10OPTEE_OS_LICENSE_FILES = LICENSE
11endif
12
13OPTEE_OS_INSTALL_STAGING = YES
14OPTEE_OS_INSTALL_IMAGES = YES
15
16ifeq ($(BR2_TARGET_OPTEE_OS_CUSTOM_GIT),y)
17OPTEE_OS_SITE = $(call qstrip,$(BR2_TARGET_OPTEE_OS_CUSTOM_REPO_URL))
18OPTEE_OS_SITE_METHOD = git
19BR_NO_CHECK_HASH_FOR += $(OPTEE_OS_SOURCE)
20else
21OPTEE_OS_SITE = $(call github,OP-TEE,optee_os,$(OPTEE_OS_VERSION))
22endif
23
24OPTEE_OS_DEPENDENCIES = host-openssl host-python3 host-python3-pycryptodomex host-python3-pyelftools
25
26# On 64bit targets, OP-TEE OS can be built in 32bit mode, or
27# can be built in 64bit mode and support 32bit and 64bit
28# trusted applications. Since buildroot currently references
29# a single cross compiler, build exclusively in 32bit
30# or 64bit mode.
31OPTEE_OS_MAKE_OPTS = \
32	CROSS_COMPILE="$(TARGET_CROSS)" \
33	CROSS_COMPILE_core="$(TARGET_CROSS)" \
34	CROSS_COMPILE_ta_arm64="$(TARGET_CROSS)" \
35	CROSS_COMPILE_ta_arm32="$(TARGET_CROSS)" \
36	PYTHON3="$(HOST_DIR)/bin/python3"
37
38ifeq ($(BR2_aarch64),y)
39OPTEE_OS_MAKE_OPTS += \
40	CFG_ARM64_core=y \
41	CFG_USER_TA_TARGETS=ta_arm64
42else
43OPTEE_OS_MAKE_OPTS += \
44	CFG_ARM32_core=y
45endif
46
47# Get mandatory PLAFORM and optional PLATFORM_FLAVOR and additional
48# variables
49OPTEE_OS_MAKE_OPTS += PLATFORM=$(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM))
50ifneq ($(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM_FLAVOR)),)
51OPTEE_OS_MAKE_OPTS += PLATFORM_FLAVOR=$(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM_FLAVOR))
52endif
53OPTEE_OS_MAKE_OPTS += $(call qstrip,$(BR2_TARGET_OPTEE_OS_ADDITIONAL_VARIABLES))
54
55# Requests OP-TEE OS to build from subdirectory out/ of its sourcetree
56# root path otherwise the output directory path depends on the target
57# platform name.
58OPTEE_OS_BUILDDIR_OUT = out
59ifeq ($(BR2_aarch64),y)
60OPTEE_OS_LOCAL_SDK = $(OPTEE_OS_BUILDDIR_OUT)/export-ta_arm64
61OPTEE_OS_SDK = $(STAGING_DIR)/lib/optee/export-ta_arm64
62endif
63ifeq ($(BR2_arm),y)
64OPTEE_OS_LOCAL_SDK = $(OPTEE_OS_BUILDDIR_OUT)/export-ta_arm32
65OPTEE_OS_SDK = $(STAGING_DIR)/lib/optee/export-ta_arm32
66endif
67
68OPTEE_OS_IMAGE_FILES = $(call qstrip,$(BR2_TARGET_OPTEE_OS_CORE_IMAGES))
69
70ifeq ($(BR2_TARGET_OPTEE_OS_CORE),y)
71define OPTEE_OS_BUILD_CORE
72	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) O=$(OPTEE_OS_BUILDDIR_OUT) \
73		$(TARGET_CONFIGURE_OPTS) $(OPTEE_OS_MAKE_OPTS) all
74endef
75define OPTEE_OS_INSTALL_IMAGES_CORE
76	mkdir -p $(BINARIES_DIR)
77	$(foreach f,$(OPTEE_OS_IMAGE_FILES), \
78		cp -dpf $(wildcard $(@D)/$(OPTEE_OS_BUILDDIR_OUT)/core/$(f)) $(BINARIES_DIR)/
79	)
80endef
81endif # BR2_TARGET_OPTEE_OS_CORE
82
83ifeq ($(BR2_TARGET_OPTEE_OS_SERVICES),y)
84define OPTEE_OS_INSTALL_TARGET_CMDS
85	$(if $(wildcard $(@D)/$(OPTEE_OS_BUILDDIR_OUT)/ta/*/*.ta),
86		$(INSTALL) -D -m 444 -t $(TARGET_DIR)/lib/optee_armtz \
87			$(@D)/$(OPTEE_OS_BUILDDIR_OUT)/ta/*/*.ta)
88	$(if $(wildcard $(@D)/$(OPTEE_OS_LOCAL_SDK)/lib/*.ta),
89		$(INSTALL) -D -m 444 -t $(TARGET_DIR)/lib/optee_armtz \
90			$(@D)/$(OPTEE_OS_LOCAL_SDK)/lib/*.ta)
91endef
92endif # BR2_TARGET_OPTEE_OS_SERVICES
93
94ifeq ($(BR2_TARGET_OPTEE_OS_SDK),y)
95define OPTEE_OS_BUILD_SDK
96	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) O=$(OPTEE_OS_BUILDDIR_OUT) \
97		 $(TARGET_CONFIGURE_OPTS) $(OPTEE_OS_MAKE_OPTS) ta_dev_kit
98endef
99define OPTEE_OS_INSTALL_STAGING_CMDS
100	mkdir -p $(OPTEE_OS_SDK)
101	cp -ardpf $(@D)/$(OPTEE_OS_LOCAL_SDK)/* $(OPTEE_OS_SDK)
102endef
103endif # BR2_TARGET_OPTEE_OS_SDK
104
105define OPTEE_OS_BUILD_CMDS
106	$(OPTEE_OS_BUILD_CORE)
107	$(OPTEE_OS_BUILD_SDK)
108endef
109
110define OPTEE_OS_INSTALL_IMAGES_CMDS
111	$(OPTEE_OS_INSTALL_IMAGES_CORE)
112	$(OPTEE_OS_INSTALL_IMAGES_SERVICES)
113endef
114
115ifeq ($(BR2_TARGET_OPTEE_OS)$(BR_BUILDING),yy)
116ifeq ($(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM)),)
117$(error No OP-TEE OS platform set. Check your BR2_TARGET_OPTEE_OS_PLATFORM setting)
118endif
119endif # BR2_TARGET_OPTEE_OS && BR2_BUILDING
120
121$(eval $(generic-package))
122