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