_local_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
ROOT_DIR := $(_local_dir)/..

ifneq ($(_global_target_names),)
### Prebuilt SCrypto libraries #################################################
LOCAL_NAME := scrypto
LOCAL_EXPORT_LIBRARY-exynos9810_kinibi500 := $(realpath thirdparty/scrypto/scrypto_v2.5_x32_kinibi_release.a)
LOCAL_EXPORT_LIBRARY-exynos9810 := $(realpath thirdparty/scrypto/mobicore_exynos9810_scrypto_v2.2_x32_release.a)
LOCAL_EXPORT_LIBRARY-sdm845 := $(realpath thirdparty/scrypto/qualcomm_sdm845_scrypto_v2.2_x64_release.a)
LOCAL_EXPORT_INCLUDE_DIRS :=
LOCAL_EXPORT_INCLUDE_DIRS-exynos9810_kinibi500 := thirdparty/scrypto/include
LOCAL_EXPORT_INCLUDE_DIRS-exynos9810 := thirdparty/scrypto/include
LOCAL_EXPORT_INCLUDE_DIRS-sdm845 := thirdparty/scrypto/include
include $(PREBUILT_TARGET_STATIC_LIBRARY)

### FIVE TA ####################################################################
LOCAL_NAME := five_trusted_app
LOCAL_SHRINK_PROTOCOL_BUFFER := y
LOCAL_UUID-tbase     := ffffffff000000000000000000000072
LOCAL_UUID-qsee      := 666976655f6170700000000000000000
LOCAL_UUID-blowfish  := 00000000000000000000000046495645
LOCAL_UUID-teegris   := 00000000000000000000000046495645
LOCAL_UUID-host      := 0000000000000000454d554c46495645
LOCAL_LINK_GP_TEE := y

LOCAL_QSEE_PRIVILEGES-sm8350 := System

LOCAL_SRC_C := $(_local_dir)/trusted_app.c \
               $(_local_dir)/version.c
LOCAL_SRC_C-blowfish := \
        $(ROOT_DIR)/multibuild/source/gp-api/protocol/tee_param_utils.c \
        $(_local_dir)/arch/teegris20/kernel_handler.c

LOCAL_INCLUDE_DIRS := $(ROOT_DIR)/include $(_local_dir)/

LOCAL_INCLUDE_DIRS-tbase := $(_local_dir)/arch/other
LOCAL_INCLUDE_DIRS-qsee := $(_local_dir)/arch/other
LOCAL_INCLUDE_DIRS-host := $(_local_dir)/arch/other
LOCAL_INCLUDE_DIRS-teegris := $(_local_dir)/arch/other

LOCAL_INCLUDE_DIRS-blowfish := $(ROOT_DIR)/multibuild/source/gp-api/protocol \
                               $(_local_dir)/arch/teegris20

LOCAL_GROUP_ID-blowfish := samsung_ta
LOCAL_GROUP_ID-teegris := samsung_ta

LOCAL_STATIC_LIBRARIES := scrypto
LOCAL_IMPRINT_TOOL-exynos9810_kinibi500 := $(realpath thirdparty/scrypto/imprint256)
LOCAL_IMPRINT_TOOL-exynos9810 := $(realpath thirdparty/scrypto/imprint)
LOCAL_IMPRINT_TOOL-sdm845 := $(realpath thirdparty/scrypto/imprint)

LOCAL_FIPS_CRYPTO-exynos9810_kinibi500 := y
LOCAL_FIPS_CRYPTO-exynos9810 := y
LOCAL_FIPS_CRYPTO-sdm845 := y

LOCAL_CFLAGS-teegris += -DTEEGRIS30
# For test purpose you may need to enable command handling from USERSPACE
# LOCAL_CFLAGS-blowfish := -DCONFIG_ENABLE_USERSPACE_ACCESS

CONFIG_CL_SYNC ?= 000 # no CL SYNC by default
# CONFIG_BUILD_USER is just username in case of local build and
# teamcity@<build number> in case of Teamcity
CONFIG_BUILD_USER ?= $(USER)
CONFIG_VERSION := 1.1
LOCAL_CFLAGS := -DPLATFORM_LOG_TAG=\"FIVE_APP\" \
	            -DCONFIG_CL_SYNC=$(CONFIG_CL_SYNC) \
				-DCONFIG_BUILD_USER=$(CONFIG_BUILD_USER) \
				-DCONFIG_VERSION=$(CONFIG_VERSION)
ifeq ($(CONFIG_RELEASE),y)
  LOCAL_CFLAGS += -DMB_NO_LOGS
  LOCAL_CFLAGS += -DCONFIG_RELEASE
endif # CONFIG_RELEASE

include $(BUILD_TARGET_TRUSTLET)

LOCAL_HEAP_SIZE_INIT-exynos9810_kinibi500 := 21504
LOCAL_HEAP_SIZE_MAX-exynos9810_kinibi500 := 43008

LOCAL_NAME       := five_trusted_app
LOCAL_UUID-tbase     := ffffffff000000000000000000000072
LOCAL_UUID-qsee      := 666976655f6170700000000000000000
LOCAL_UUID-blowfish  := 00000000000000000000000046495645
LOCAL_UUID-teegris   := 00000000000000000000000046495645
LOCAL_UUID-host      := 0000000000000000454d554c46495645
include $(SIGN_TARGET)

define eval_tbase_deploy
.PHONY: push_to_device_tbase-$(strip $(1))
push_to_device_tbase-$(strip $(1)): \
  $(ROOT_DIR)/out/$(strip $(1))/tbase/five_trusted_app/ffffffff000000000000000000000072.tlbin \
  five_trusted_app-$(strip $(1))-sign-remotely
	adb push $$< /system/app/mcRegistry/
endef

$(foreach _target,$(_global_target_names), \
  $(if $(filter tbase,$(_global_target_$(_target)_platforms)), \
	$(eval $(call eval_tbase_deploy,$(_target))), \
  ) \
)

define eval_qsee_deploy
.PHONY: push_to_device_qsee-$(strip $(1))
push_to_device_qsee-$(strip $(1)): \
  five_trusted_app-$(strip $(1))-sign-remotely
	adb shell mount -o rw,remount /firmware
	@for i in $(ROOT_DIR)/out/$(strip $(1))/qsee/*/five_trusted_app/signed/*; do \
	echo "$$$${i} push to /firmware/image";adb push $$$${i} /firmware/image/; done
endef

$(foreach _target,$(_global_target_names), \
  $(if $(filter qsee,$(_global_target_$(_target)_platforms)), \
	$(eval $(call eval_qsee_deploy,$(_target))), \
  ) \
)

define eval_teegris_deploy
.PHONY: push_to_device_teegris-$(strip $(1))
push_to_device_teegris-$(strip $(1)): \
  $(ROOT_DIR)/out/$(strip $(1))/blowfish/five_trusted_app/00000000-0000-0000-0000-000046495645 \
  five_trusted_app-$(strip $(1))-sign-remotely
	adb push $$< /vendor/tee/driver/
endef

$(foreach _target,$(_global_target_names), \
  $(if $(filter blowfish,$(_global_target_$(_target)_platforms)), \
	$(eval $(call eval_teegris_deploy,$(_target))), \
  ) \
)

endif # $(_global_target_names)
