################################################################################
#
# MobiCore(t-base) Makefile Template
#
################################################################################

### this is our home dir
TRUSTLET_DIR := ../Code

### Secure driver directory
SECDRIVER_DIR := $(COMP_PATH_SECAPP)/SecDrv

#-------------------------------------------------------------------------------
# Output
#-------------------------------------------------------------------------------
### output name without path or extension
OUTPUT_NAME := tl

### Mobiconvert parameters
TRUSTLET_UUID :=  ffffffff000000000000000000000083
TRUSTLET_MEMTYPE := 2 # 0: internal memory prefered; 1: internal memory used; 2: external memory used
TRUSTLET_NO_OF_THREADS := 1 # min =1; max =8
TRUSTLET_SERVICE_TYPE := 3 # 1: driver; 2: service provider trustlet; 3: system trustlet
TRUSTLET_KEYFILE := ./pairVendorTltSig.pem
TRUSTLET_INSTANCES := 1 # min: 1; max: 16
TRUSTLET_FLAGS:= 0 # 0: no flag; 1: permanent; 2: service has no WSM control interface; 3: both

TBASE_API_LEVEL := 6
TA_PROPERTY := "-s 3 -n 1 -i 2 -m 2 -f 8 -sh 1048576 -mh 3145728"

HEAP_SIZE_INIT := 102400 # 100k
HEAP_SIZE_MAX  := 204800 # 200k

ifeq ($(USE_SIGNING_SERVER), true)
ifeq ($(TBASE), T300)
SIGN_RUNTYPE := gd_mobicore30_payauth
else ifeq ($(TBASE), T301)
SIGN_RUNTYPE := gd_mobicore31_payauth
else ifeq ($(TBASE), T302)
SIGN_RUNTYPE := gd_mobicore32_trustlet
else ifeq ($(TBASE), T200)
SIGN_RUNTYPE := gd_mobicore20_trustlet
else ifeq ($(TBASE), T310)
SIGN_RUNTYPE := gd_mobicore310_trustlet
else ifeq ($(TBASE), T311)
SIGN_RUNTYPE := gd_mobicore311_trustlet
else ifeq ($(TBASE), T400)
SIGN_RUNTYPE := gd_mobicore400_trustlet
else ifeq ($(TBASE), T410)
SIGN_RUNTYPE := gd_mobicore410_trustlet
else
$(error invalid TBASE = $(TBASE))
endif
endif

######################################## BUILD FLAG ########################################

ifeq ($(ENABLE_DEMO),true)
    ARMCC_COMPILATION_FLAGS += -DENABLE_DEMO
endif

ifeq ($(SEC_PRODUCT), mt6768)
#ARMCC_COMPILATION_FLAGS += -DUSE_SPU
ARMCC_COMPILATION_FLAGS += -DUSE_BTS
endif

ARMCC_COMPILATION_FLAGS += -DUSE_MOBICORE

ARMCC_COMPILATION_FLAGS += -DTL_STACK_SIZE=16384

ifeq ($(ICCC_ENABLED),true)
    ARMCC_COMPILATION_FLAGS += -DICCC_ENABLED
endif

ifeq ($(BUILD_STACK_PROTECTION),true)
    ARMCC_COMPILATION_FLAGS += -DBUILD_STACK_PROTECTION
    ARMCC_COMPILATION_FLAGS += --protect_stack --protect_stack_all
endif

ARMCC_COMPILATION_FLAGS += -DTA_VERSION=\"$(_VERSION_)\"
ARMCC_COMPILATION_FLAGS += -DENABLE_TA_ERR_MSG

ifeq ($(ENABLE_DBG_LOG),true)
    ARMCC_COMPILATION_FLAGS += -DENABLE_DBG_LOG
endif

ifeq ($(STAGING_ENV),true)
    ARMCC_COMPILATION_FLAGS += -DSTAGING_ENV
endif

ARMCC_COMPILATION_FLAGS += -DSPAY_TUI

ARMCC_COMPILATION_FLAGS += -DTA_INIT_REQUIRED

ifeq ($(DPI640),true)
    ARMCC_COMPILATION_FLAGS += -DDPI640
endif
ifeq ($(DPI480),true)
    ARMCC_COMPILATION_FLAGS += -DDPI480
endif
ifeq ($(DPI320),true)
    ARMCC_COMPILATION_FLAGS += -DDPI320
endif
ifeq ($(UX3_0),true)
    ARMCC_COMPILATION_FLAGS += -DUX3_0
endif
ifeq ($(SUPPORT_IRIS),true)
    ARMCC_COMPILATION_FLAGS += -DIRIS_SUPPORTED
endif
ifeq ($(SUPPORT_SOFTKEY),true)
    ARMCC_COMPILATION_FLAGS += -DSUPPORT_SOFTKEY
endif
ifeq ($(SOFT_KEY_EXIST),true)
    ARMCC_COMPILATION_FLAGS += -DSOFT_KEY_EXIST
endif
ifeq ($(NOTCH_EXIST),true)
    ARMCC_COMPILATION_FLAGS += -DNOTCH_EXIST
endif
ifeq ($(ENHANCED_UI),true)
    ARMCC_COMPILATION_FLAGS += -DENHANCED_UI
endif
ifeq ($(FAST_BACKGROUND),true)
    ARMCC_COMPILATION_FLAGS += -DFAST_BACKGROUND
endif

ARMCC_COMPILATION_FLAGS += -DCOLD_WALLET

######################################## BUILD FLAG ########################################

#-------------------------------------------------------------------------------
# Files and include paths - Add your files here
#-------------------------------------------------------------------------------
### A simple scatter file and set SCATTER_FILE.
### Uncomment this to use a custom scatter file $(OUTPUT_NAME).sct
# SCATTER_FILE := $(TRUSTLET_DIR)/$(OUTPUT_NAME).sct
### Add include path here
INCLUDE_DIRS += \
    $(TRUSTLET_DIR) \
    $(TRUSTLET_DIR)/shared \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/control \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/mnemonic \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/png \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/touch \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/secure_object \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/pinpad \
    $(TRUSTLET_DIR)/../../../../bc_tui/public \
    $(TRUSTLET_DIR)/../../../../bc_tui/resource \
    $(TRUSTLET_DIR)/../../../../tz_platform/public/tl \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/TBASE/tl \
    $(TRUSTLET_DIR)/../../../../tz_driver/Locals/Code/Public \
    $(TRUSTLET_DIR)/../../../../tz_local_common/public \
    $(TRUSTLET_DIR)/../../../../tz_local_common/public/msgs \
    $(TRUSTLET_DIR)/../../../../tz_local_common/shared \
    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/parson \
    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto \
    $(TRUSTLET_DIR)/../../../../tz_common/public \
    $(TRUSTLET_DIR)/../../../../tz_common/tl \
    $(TRUSTLET_DIR)/../../../../spay/public \
    $(SECDRIVER_DIR)/Locals/Code/public \
    $(TRUSTLET_DIR)/../../../../tz_spay_common/public
#    $(TRUSTLET_DIR)/../../../../tz_spay_platform/public

### Compile PURE business logic related functionality
SRC_CPP += \
    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_pin_random_util_tl.c \
    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_authenticate_transaction_tl.c \
    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_init_tl.c \
    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_msk_tl.c \
    $(TRUSTLET_DIR)/../../../../tz_spay_platform/tl/TBASE/Tl_main_spay.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/process_cmd.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/process_cmd_coldwallet.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/process_cmd_pinpad.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/control/TuiButton.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/control/TuiControl.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/control/TuiKeypad.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/control/TuiTextBox.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/control/TuiImageView.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/mnemonic/memzero.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/mnemonic/sha2.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/mnemonic/TuiMnemonic.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/png/TuiPng.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiScreenResource.c \
    $(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiBackupScreenController.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiRestoreScreenController.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiPopupScreenController.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiScreen.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiState.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiScreenProperty.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiRotation.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiLayout.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiLayout_w720.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiLayout_w1080.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiLayout_w1440.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/screen/TuiLayout_w1536.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/touch/TuiTouch.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/Vendor_Interface.c \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/TBASE/tl/TBASE_TZ_Vendor.c \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/TBASE/tl/TBASE_TZ_TUI_Vendor.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/secure_object/SecureObject.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/pinpad/TuiPinpadState.c \
	$(TRUSTLET_DIR)/../../../../bc_tui/tl/Locals/Code/shared/pinpad/TuiPinpadScreen.c
#        '../../tz_iccc_common/tl/tz_iccc_common_tl.c',
#    $(TRUSTLET_DIR)/shared/process_cmd.c \
#    $(TRUSTLET_DIR)/shared/generate_tl.c \
#    $(TRUSTLET_DIR)/shared/prepare_mst_data_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_transmit_mst_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_so_validation_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_json_parser_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_parse_cert_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/spay_inapp_data_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/base64.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/jose.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/des/ecb_enc.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/des/des_enc.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/des/set_key.c
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/transmit_card_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/load_cert_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/prepare_data4gts_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/store_gtsdata_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/store_data_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/retrieve_data_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/payment_workflow_data_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/clear_mst_data_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/gen_inapp_payinfo_tl.c \
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/des3.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/rsa.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/tfm.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/sha.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/der.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/pkcs.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/local_crypto/local_crypt.c\
#    $(TRUSTLET_DIR)/../../../../tz_local_common/shared/parson/parson.c \

# Compile AES-GCM library until we have this functionality in SCrypto
#SRC_CPP += \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/cryptolib_init.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/libc_functions/portable/allocators/memmgrs.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/libc_functions/libc_functions.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/mem_clr.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/modes/gcm128.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/modes/ctr128.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/aes/aes_core.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/aes/aes_ctr.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/evp/c_all.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/evp/c_allc.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/evp/c_alld.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/mem.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/o_init.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/openssl/aes/aes_misc.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/tests/selftest.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/tests/aes_test.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/tests/aes_ctr_test.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cryptolib/source/tests/test_utils.c \
#    $(TRUSTLET_DIR)/../../../../tz_spay_common/tl/cipher.c

# Compile stack protection related files
ifeq ($(BUILD_STACK_PROTECTION),true)
	SRC_CPP += $(TRUSTLET_DIR)/../../../../tz_spay_platform/tl/TBASE/stack_protection.c
endif

### Add library files for linker here
ifeq ($(SEC_PRODUCT),smdk9810)
ifeq ($(ICCC_ENABLED),true)
INCLUDE_DIRS += \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/iccc/inc

CUSTOMER_DRIVER_LIBS += \
    $(TRUSTLET_DIR)/../../../../tz_driver/Out/Bin/Debug/obj-local/TlApiDrTima.ol \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/iccc/libs/$(SEC_PRODUCT)/icccOperations.ol \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/iccc/libs/$(SEC_PRODUCT)/tl_tz_iccc_init.ol

else
INCLUDE_DIRS += \
    $(TRUSTLET_DIR)/../../../../FcHandler/Locals/Code/public

CUSTOMER_DRIVER_LIBS += \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/tz_driver/libs/$(SEC_PRODUCT)/TlApiDrTima.ol \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/FcHandler/libs/$(SEC_PRODUCT)/tlapi_fchandler.ol
endif

else ifeq ($(SEC_PRODUCT), mt6768)
INCLUDE_DIRS += \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/iccc/inc
    
CUSTOMER_DRIVER_LIBS += \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/iccc/libs/$(SEC_PRODUCT)/icccOperations.ol \
    $(TRUSTLET_DIR)/../../../../tz_platform/vendor/iccc/libs/$(SEC_PRODUCT)/tl_tz_iccc_init.ol        
        
else
INCLUDE_DIRS += \
    $(TRUSTLET_DIR)/../../../../FcHandler/Locals/Code/public

CUSTOMER_DRIVER_LIBS += \
    $(TRUSTLET_DIR)/../../../../tz_driver/Out/Bin/Debug/obj-local/TlApiDrTima.ol \
    $(TRUSTLET_DIR)/../../../../FcHandler/Out/Bin/Debug/obj-local/tlapi_fchandler.ol
endif

#these numbers were obtained from previous warning messages. These will now be treated as errors
ARMCC_COMPILATION_FLAGS += \
    --diag_error=C167,C152,C185,C513,C1254,C1293,C546,C550,C61,C47,C191,C144,C188,C231,C111,C225 #,C223,C1461,C177

### add all chipset specific configuration in model.mk
include $(TRUSTLET_DIR)/../../../../tz_common/scripts/model.mk

#-------------------------------------------------------------------------------
# use generic make file
include $(TLSDK_DIR_SRC)/trustlet.mk

ifeq ($(TOOLCHAIN),ARM)
ifeq ($(TBASE), T410)
$(OUTPUT_OBJ_PATH)/%.o : %.c
	$(CC) $(C99) $(CC_OPTS) $(CC_OPTS2) $(INC) -c -o $@ $<
endif
endif
