_sdk_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))

include $(_sdk_dir)/qsee-utils.mk
include $(_sdk_dir)/path-utilities.mk
include $(_sdk_dir)/uuid-utils.mk

##########################
# Strip input parameters #
##########################

LOCAL_NAME := $(strip $(LOCAL_NAME))
LOCAL_CHIP := $(strip $(LOCAL_CHIP))
LOCAL_SDK_PATH := $(strip $(LOCAL_SDK_PATH))
LOCAL_QSEE_PROC := $(strip $(LOCAL_QSEE_PROC))
LOCAL_UUID := $(strip $(LOCAL_UUID))
LOCAL_OUT := $(strip $(LOCAL_OUT))
LOCAL_SIGNCLIENT_JAR := $(strip $(LOCAL_SIGNCLIENT_JAR))

####################################
# Check necessary input parameters #
####################################

ifeq ($(LOCAL_SDK_PATH),)
  $(error LOCAL_SDK_PATH is not specified)
endif

ifeq ($(LOCAL_NAME),)
  $(error LOCAL_NAME is not specified)
endif

ifeq ($(LOCAL_CHIP),)
  $(error LOCAL_CHIP is not specified)
endif

ifeq ($(LOCAL_UUID),)
  $(error LOCAL_UUID is not specified)
endif

ifeq ($(LOCAL_QSEE_PROC),)
  LOCAL_QSEE_PROC := scorpion
endif

ifeq ($(LOCAL_OUT),)
  LOCAL_OUT := $(abspath ./out)
endif

ifeq ($(LOCAL_SIGNCLIENT_JAR),)
  # If path to signclient.jar is not set use default
  LOCAL_SIGNCLIENT_JAR := $(_sdk_dir)/../tools/signclient.jar
endif

####################################
# Check of user input parameters   #
####################################

include $(_sdk_dir)/rules-utils.mk
$(call qsee-sign-rules)

####################################

_local_output_base := $(strip $(call get-absolute-path,$(LOCAL_OUT)/$(LOCAL_TARGET_NAME:=/)qsee/$(LOCAL_CHIP)_$(LOCAL_QSEE_PROC)))
_local_output_dir := $(strip $(_local_output_base)/$(LOCAL_NAME))
_local_qsee_uuid := $(strip $(call get-qsee-uuid,$(LOCAL_UUID)))

-name-by-runtype = \
  $(eval _e :=) \
  $(eval _w=$(subst _, ,$(strip $(1)))) \
  $(subst $(_e) $(_e),_,$(wordlist 3,$(words $(_w)),$(_w)))

_local_input_orig := $(_local_output_dir)/$(LOCAL_NAME).mbn
_local_input_uuid := $(_local_output_dir)/$(_local_qsee_uuid).mbn
# Sign Server uses another sign schem for SM8150:
# Runtype is single ("tzapp"). But input and output name should be equal
# to registered TA UUID (name).
ifneq ($(LOCAL_RUNTYPE),$(filter $(LOCAL_RUNTYPE),qc_secimg50_tzapp qc_secimg50_bl))
_local_input := $(_local_output_dir)/$(strip $(call -name-by-runtype,$(LOCAL_RUNTYPE))).mbn
else
_local_input := $(_local_input_uuid)
endif
_local_output_orig := $(_local_output_dir)/signed/$(_local_qsee_uuid).mbn
_local_output := $(_local_output_orig:%.mbn=%.mdt)
_splitter_script := $(strip $(call get-qsee-splitter-script,$(LOCAL_SDK_PATH)))
ifeq ($(LOCAL_SIGN_TYPE),locally)
  # local sign for chips listed below is specific and <pil_splitter> shouldn't be used
  ifeq ($(LOCAL_CHIP),$(filter $(LOCAL_CHIP),msm8998 msm8x26))
    _splitter_script :=
  endif
endif
##################
# Add sign goals #
##################

$(_local_output): $(_local_output_orig)
$(_local_output): _local_output_orig := $(_local_output_orig)
ifneq ($(_splitter_script),)
$(_local_output): _local_splitter_script := $(_splitter_script)
$(_local_output):
	$(_local_splitter_script) $(_local_output_orig) $(@:%.mdt=%)
endif

# Rename qsee ta before signing if module name doesn't match the accepted uuid
ifneq ($(_local_input_orig),$(_local_input_uuid))
$(_local_input_uuid): $(_local_input_orig)
	cp -f $(<) $(@)
endif

# Rename qsee ta before signing if uuid doesn't match the accepted runtype
ifneq ($(_local_input_uuid),$(_local_input))
$(_local_input): $(_local_input_uuid)
	@printf "\t********************************************************************\n"
	@printf "\t Warning! Trustlet is renamed to satisfy QSEE signing requirements! \n"
	@printf "\t >>> $(notdir $(<)) to $(notdir $(@))\n"
	@printf "\t Please, use only for test purpose.                                 \n"
	@printf "\t********************************************************************\n"
	cp -f $(<) $(@)
endif

# Execute fixed command line according to goal.
$(_local_output_orig): $(_local_input)
	mkdir -p $(dir $(_local_output_orig))
	$($(<)_sign)
