TRUSTLET_DIR := $(KINIBI_TA_BUILD_ROOT)/kinibi_source/tz_knoxai/Locals/Code
ICCC_CONFIG := $(KINIBI_TA_BUILD_ROOT)/kinibi_source/tz_iccc_common

# output binary name without path or extension
OUTPUT_NAME := tz_knoxai

### Mobiconvert parameters
## For more information about the different parameters, see the "MobiConvert User Manual"

## mandatory parameters

# the uuid( also used as output base file name)
TRUSTLET_UUID := ffffffff000000000000000000000096
# --servicetype <num>
TRUSTLET_SERVICE_TYPE := 3 # 2: service provider trustlet; 3: system trustlet

## optional parameters
# --flags
TRUSTLET_FLAGS := 8 # 0: no flag; 1: permanent; 2: service has no WSM control interface; 3: both (permanent and service has not WSM control interface); 4: debuggable
# ---numberofinstances <num>
TRUSTLET_INSTANCES := 1 # min: 1; max: 16
# --numberofthreads <num>
TRUSTLET_NO_OF_THREADS := 1 # has to be 1 for Trustlets
# --memtype <type>
TRUSTLET_MEMTYPE := 2 # 0: internal memory prefered; 1: internal memory used; 2: external memory used
# -- GP
GP_ENTRYPOINTS := N
# -- API LEVEL > 7
TBASE_API_LEVEL := 7
HW_FLOATING_POINT := Y

#-------------------------------------------------------------------------------
# Files and include paths - Add your files here
#-------------------------------------------------------------------------------

### Add include path here
INCLUDE_DIRS += \
    $(TRUSTLET_DIR)/inc \
    $(ICCC_CONFIG)/public \
    $(TZ_SCRYPTO_HEADER_PATH)
    
### Add source code files for C++ compiler here
SRC_CPP += \
    $(TRUSTLET_DIR)/src/app_main.c \
    $(TRUSTLET_DIR)/src/knoxai_ec.c \
    $(TRUSTLET_DIR)/src/knoxai_rsa.c \
    $(TRUSTLET_DIR)/src/knoxai_prov.c \
    $(TRUSTLET_DIR)/src/knoxai_factory_model_key.c \
    $(TRUSTLET_DIR)/src/knoxai_drk.c \
    $(TRUSTLET_DIR)/src/base64.c \
    $(TRUSTLET_DIR)/src/knoxai_vendor_utils.c

### Add source code files for C compiler here
SRC_C += # nothing

### Add source code files for assembler here
SRC_S += # nothing

include $(ICCC_CONFIG)/iccc_config.mk

ifeq ($(GP_ENTRYPOINTS),Y)
ARMCC_COMPILATION_FLAGS += -DGP_ENTRY
endif
ARMCC_COMPILATION_FLAGS += -DUSE_MOBICORE -DCONFIG_KINIBI
ARMCC_COMPILATION_FLAGS += --diag_error=C167,C152,C185,C513,C1254,C1293,C550,C61,C47,C144,C231,C111,C225 #,C546,C188,C191,C223,C1461,C177
ARMCC_COMPILATION_FLAGS += --protect_stack --protect_stack_all
ARMCC_COMPILATION_FLAGS += -W

#CUSTOMER_TA_LIBS += $(TZ_SCRYPTO_LIB32)
CUSTOMER_DRIVER_LIBS += $(TZ_SCRYPTO_LIB32)
### Build mode (Release/Debug) / Debug default on
MODE := Debug

ifeq ($(findstring exynos,$(TA_TARGET_SOC)), exynos)
PLATFORM = EXYNOS_$(strip $(subst exynos, ,$(TA_TARGET_SOC)))_STD
ARMCC_COMPILATION_FLAGS += -DCONFIG_SMDK$(strip $(subst exynos, ,$(TA_TARGET_SOC)))
### __stack_chk_guard and __stack_chk_fail not supported
ifeq ($(TA_TARGET_SOC), exynos7885)
RUNTYPE := gd_mobicore400_trustlet
TRUSTLET_SIGN_CONF := "-s 3 -n 1 -i 1 -m 2 -f 8 -sh 1048576 -mh 1048576"
### __stack_chk_guard and __stack_chk_fail supported
else ifeq ($(TA_TARGET_SOC), exynos9810)
RUNTYPE := gd_mobicore400_trustlet
TRUSTLET_SIGN_CONF := "-s 3 -n 1 -i 2 -m 2 -f 8 -sh 1048576 -mh 1048576"
TBASE_API_LEVEL := 8
ENABLE_STACK_PROTECTION := true
ARMCC_COMPILATION_FLAGS += -DENABLE_STACK_PROTECTION
endif
else
ifeq ($(TA_TARGET_SOC), mt6768)
RUNTYPE := gd_mobicore410_trustlet # $KINIBI_VERSION == "410A"
TRUSTLET_SIGN_CONF := "-s 3 -n 1 -i 1 -m 2 -f 8 -sh 1048576 -mh 1048576"
TOOLCHAIN := ARM
ENABLE_STACK_PROTECTION := true
ARMCC_COMPILATION_FLAGS += -DENABLE_STACK_PROTECTION
endif
endif

$(info [knoxai] Build Conf KINIBI_VERSION : $(KINIBI_VERSION))
$(info [knoxai] Build Conf TRUSTLET_SIGN_CONF : $(TRUSTLET_SIGN_CONF))
$(info [knoxai] Build Conf RUNTYPE : $(RUNTYPE))
$(info [knoxai] Build Conf TBASE_API_LEVEL : $(TBASE_API_LEVEL))

# use generic make file
include $(TLSDK_DIR_SRC)/trustlet.mk

run_fips_tools: $(TA_AXF)
	$(info [knoxai] run_fips_tools run/path:  $(TZ_SCRYPTO_TOOLS_PATH))
	$(TZ_SCRYPTO_TOOLS_PATH)/run_fips_tools.sh $<

$(TA_BIN): run_fips_tools