_sdk_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))

##########################
# Strip input parameters #
##########################

LOCAL_NAME := $(strip $(LOCAL_NAME))
LOCAL_UUID := $(strip $(LOCAL_UUID))
LOCAL_DRIVER_ID := $(strip $(LOCAL_DRIVER_ID))
LOCAL_API_LEVEL := $(strip $(LOCAL_API_LEVEL))
LOCAL_OUT := $(strip $(LOCAL_OUT))
LOCAL_SIGNCLIENT_JAR := $(strip $(LOCAL_SIGNCLIENT_JAR))
LOCAL_INTERFACE_VERSION := $(strip $(LOCAL_INTERFACE_VERSION))

####################################
# Check necessary input parameters #
####################################

ifeq ($(LOCAL_NAME),)
  $(error LOCAL_NAME is not specified)
endif

ifeq ($(LOCAL_UUID),)
  $(error LOCAL_UUID is not specified)
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

include $(_sdk_dir)/path-utilities.mk

_app_type :=
_conf_string :=

ifneq ($(LOCAL_INTERFACE_VERSION),)
  _conf_string += -interfaceversion $(LOCAL_INTERFACE_VERSION)
endif

ifneq ($(LOCAL_DRIVER_ID),)
  include $(_sdk_dir)/tbase-driver-params.mk
  _conf_string += -d $(DRIVER_ID) \
                  $(DRIVER_ID)
  _app_type := DRIVER
else
  include $(_sdk_dir)/tbase-trustlet-params.mk
  _app_type := TRUSTLET
endif

####################################
# Check of user input parameters   #
####################################

include $(_sdk_dir)/rules-utils.mk
$(call tbase-sign-rules)

####################################

# Extended memory layout support is by default for TBASE_API_LEVEL>=5
_is_extended_layout := $(shell if [ $(LOCAL_API_LEVEL) -ge 5 ]; then echo Y ; else echo NO ; fi)
HEAP_SIZE_MAX_PARAM :=
HEAP_SIZE_INIT_PARAM :=
ifeq ($(call _is_extended_layout),Y)
    $(_app_type)_FLAGS := $$(($($(_app_type)_FLAGS)|8))
    ifneq ($(LOCAL_HEAP_SIZE_INIT),)
        HEAP_SIZE_INIT_PARAM :=  -initheapsize $(LOCAL_HEAP_SIZE_INIT)
        ifeq ($(LOCAL_HEAP_SIZE_MAX),)
            HEAP_SIZE_MAX_PARAM :=  -maxheapsize $(LOCAL_HEAP_SIZE_INIT)
        else
            HEAP_SIZE_MAX_PARAM :=  -maxheapsize $(LOCAL_HEAP_SIZE_MAX)
        endif
    endif
endif

_conf_string += -memtype $($(_app_type)_MEMTYPE) \
                -flags $($(_app_type)_FLAGS) \
                -servicetype $($(_app_type)_SERVICE_TYPE) \
                -numberofthreads $($(_app_type)_NO_OF_THREADS) \
                -numberofinstances $($(_app_type)_INSTANCES) \
                $(HEAP_SIZE_INIT_PARAM) \
                $(HEAP_SIZE_MAX_PARAM)

_local_output_dir := $(strip $(call get-absolute-path,$(LOCAL_OUT)/$(LOCAL_TARGET_NAME:=/)tbase/$(LOCAL_NAME)))

# The path must be exactly the same as target in trustlet.mk (t-base SDK) to create a right dependency.
_local_input := $(_local_output_dir)/$(LOCAL_NAME)
_local_output := $(_local_output_dir)/$(LOCAL_UUID).tlbin


# Execute fixed command line according to goal.
$(_local_output): $(_local_input)
	$($(<)_sign)
# Sign client always return 0 (OK) even if there is an error. Force verification is there a target file after signing.
# "test -f" returns an error if target file is not generated.
	@test -f $(@)

