ROOT_DIR=./../../

include $(ROOT_DIR)/config/config.mk
include $(ROOT_DIR)/multibuild/sdk.mk

include $(ROOT_DIR)/config/targets.mk

################################################################################
#                                   SWD PART                                   #
################################################################################

### Prebuilt PA TZ library #####################################################
LOCAL_NAME := pa_tz_api
LOCAL_EXPORT_LIBRARY := $(ROOT_DIR)/deploy/$$$$(LOCAL_TARGET_NAME)/$$$$(LOCAL_PLATFORM)/pa_tz_api.a
LOCAL_EXPORT_INCLUDE_DIRS := $(ROOT_DIR)/deploy/include
include $(PREBUILT_TARGET_STATIC_LIBRARY)

### Test client SWD ############################################################
define ev_build_test_trustlet
local_name         := $(strip $(1))
local_uuid_tbase   := $(strip $(2))
local_uuid_teegris := $(strip $(3))
local_uuid_qsee    := $(strip $(4))
local_logtag       := $(strip $(5))

LOCAL_NAME := $$(local_name)

LOCAL_UUID :=
LOCAL_UUID-tbase := $$(local_uuid_tbase)
LOCAL_UUID-blowfish := $$(local_uuid_teegris)
LOCAL_UUID-teegris := $$(local_uuid_teegris)
LOCAL_UUID-qsee := $$(local_uuid_qsee)

LOCAL_INCLUDE_DIRS := include
LOCAL_INCLUDE_DIRS += $$(ROOT_DIR)/pa_nwd_lib/include
LOCAL_SRC_C := src/handler.c src/task_nwd_access.c

LOCAL_CFLAGS := $$(local_logtag)
LOCAL_CFLAGS-tbase := -Werror -std=c11
LOCAL_CFLAGS-blowfish := -Werror -std=c11
LOCAL_CFLAGS-teegris := -Werror -std=c11

LOCAL_LINK_GP_TEE := y
LOCAL_GROUP_ID-blowfish := samsung_drv
LOCAL_GROUP_ID-teegris  := samsung_drv

LOCAL_QSEE_PRIVILEGES := ProcessAuthenticator

LOCAL_STATIC_LIBRARIES := pa_tz_api
include $$(BUILD_TARGET_TRUSTLET)

LOCAL_NAME := $$(local_name)
LOCAL_UUID :=
LOCAL_UUID-tbase :=  $$(local_uuid_tbase)
LOCAL_UUID-blowfish := $$(local_uuid_teegris)
LOCAL_UUID-teegris  := $$(local_uuid_teegris)
LOCAL_UUID-qsee:= $$(local_uuid_qsee)
LOCAL_API_LEVEL := 5
LOCAL_HEAP_SIZE_INIT := 40960
LOCAL_HEAP_SIZE_MAX := 81920
include $$(SIGN_TARGET)

local_name       :=
local_uuid_tbase :=
local_uuid_qsee  :=
local_logtag     :=
endef

build_test_trustlet = $(eval $(call ev_build_test_trustlet, $(1), $(2), $(3), $(4), $(5)))

### TEST TRUSTLET ##############################################################
$(call build_test_trustlet, tl_pa_swd, \
    $(CONFIG_TBASE_PA_FTEST_UUID), $(CONFIG_TEEGRIS_PA_FTEST_UUID), \
    $(CONFIG_QSEE_PA_FTEST_UUID), -DPLATFORM_LOG_TAG=\"FTEST_PA_SWD\")

### STRESS TRUSTLET 1 ##########################################################
$(call build_test_trustlet, stest_trustlet_1, \
    $(CONFIG_STRESS_TEST_TA_UUID1), $(CONFIG_STRESS_TEST_TA_UUID1), \
    $(CONFIG_QSEE_STRESS_TEST_TA_UUID1), -DPLATFORM_LOG_TAG=\"STEST_TA_1\")

### STRESS TRUSTLET 2 ##########################################################
$(call build_test_trustlet, stest_trustlet_2, \
    $(CONFIG_STRESS_TEST_TA_UUID2), $(CONFIG_STRESS_TEST_TA_UUID2), \
    $(CONFIG_QSEE_STRESS_TEST_TA_UUID2), -DPLATFORM_LOG_TAG=\"STEST_TA_2\")

### STRESS TRUSTLET 3###########################################################
$(call build_test_trustlet, stest_trustlet_3, \
    $(CONFIG_STRESS_TEST_TA_UUID3), $(CONFIG_STRESS_TEST_TA_UUID3), \
    $(CONFIG_QSEE_STRESS_TEST_TA_UUID3), -DPLATFORM_LOG_TAG=\"STEST_TA_3\")

### Deploy/install targets #####################################################
.PHONY: _install_to_tbase_device
_install_to_tbase_device:
	@adb remount
	@adb push out/$(DEPLOY_TARGET)/tl_pa_swd/$(CONFIG_TBASE_PA_FTEST_UUID).tlbin \
	  /vendor/app/mcRegistry/
	@adb push out/$(DEPLOY_TARGET)/stest_trustlet_1/$(CONFIG_STRESS_TEST_TA_UUID1).tlbin \
	  /vendor/app/mcRegistry/
	@adb push out/$(DEPLOY_TARGET)/stest_trustlet_2/$(CONFIG_STRESS_TEST_TA_UUID2).tlbin \
	  /vendor/app/mcRegistry/
	@adb push out/$(DEPLOY_TARGET)/stest_trustlet_3/$(CONFIG_STRESS_TEST_TA_UUID3).tlbin \
	  /vendor/app/mcRegistry/

.PHONY: _install_to_blowfish_device
_install_to_blowfish_device:
	@adb remount
	@adb push out/$(DEPLOY_TARGET)/tl_pa_swd/$(strip $(call get-blowfish-local-sign-output-name,$(CONFIG_TEEGRIS_PA_FTEST_UUID))) /vendor/tee
	@adb push out/$(DEPLOY_TARGET)/stest_trustlet_1/$(strip $(call get-blowfish-local-sign-output-name,$(CONFIG_STRESS_TEST_TA_UUID1))) /vendor/tee/
	@adb push out/$(DEPLOY_TARGET)/stest_trustlet_2/$(strip $(call get-blowfish-local-sign-output-name,$(CONFIG_STRESS_TEST_TA_UUID2))) /vendor/tee/
	@adb push out/$(DEPLOY_TARGET)/stest_trustlet_3/$(strip $(call get-blowfish-local-sign-output-name,$(CONFIG_STRESS_TEST_TA_UUID3))) /vendor/tee/

.PHONY: _install_to_teegris_device
_install_to_teegris_device: _install_to_blowfish_device

.PHONY: _install_to_qsee_device
_install_to_qsee_device:
	@adb remount
	@firmware_dir=$$(adb shell ls -d /vendor/firmware_mnt); if [ ! "$${firmware_dir}" ]; then firmware_dir=/firmware; fi; \
	adb shell mount -o rw,remount $${firmware_dir}; \
	ls out/$(DEPLOY_TARGET)/*_A53_64 && QSEE_BIT=_A53_64 || QSEE_BIT=_scorpion; \
	adb shell mkdir -p /data/local/tmp/image_tmp; \
	adb push out/$(DEPLOY_TARGET)/*$${QSEE_BIT}/tl_pa_swd/signed/* /data/local/tmp/image_tmp; \
	for i in 1 2 3; do adb push out/$(DEPLOY_TARGET)/*$${QSEE_BIT}/stest_trustlet_$${i}/signed/* /data/local/tmp/image_tmp; done; \
	adb shell mv -fv /data/local/tmp/image_tmp/* $${firmware_dir}/image/; \
	adb shell rm -rf /data/local/tmp/image_tmp

.PHONY: install
install: _install_to_$(DEPLOY_PLATFORM)_device

### Clean targets ##############################################################
.PHONY: force_clean
force_clean: clean
	@rm -rf out/
