TRUSTLET_DIR := $(KINIBI_TA_BUILD_ROOT)/kinibi_source/skm/Locals/Code

# output binary name without path or extension
OUTPUT_NAME := skm

### this is our home dir
SRC_DIR := $(TRUSTLET_DIR)/src
INC_DIR := $(TRUSTLET_DIR)/include
LIB_DIR := $(TRUSTLET_DIR)/lib
COMMON_INC_DIR := $(INC_DIR)/common
CRYPTO_INC_DIR := $(INC_DIR)/crypto
LOG_ENCRYPTOR_INC_DIR := $(INC_DIR)/logEncryptor
TRUSTLET_INC_DIR := $(INC_DIR)/skm
COMMON_SRC_DIR := $(SRC_DIR)/common
CRYPTO_SRC_DIR := $(SRC_DIR)/crypto
LOG_ENCRYPTOR_SRC_DIR := $(SRC_DIR)/logEncryptor
TRUSTLET_DIR := $(SRC_DIR)/skm
BUILD_SCRIPTS_DIR := .
TRUSTLET_SIGN_CONF := "-s 3 -n 1 -i 1 -m 2 -f 8 -mh 61440"

#protect_stack
ENABLE_STACK_PROTECTION := true

### 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 :=ffffffff00000000000000000000000d
# --servicetype <num>
TRUSTLET_SERVICE_TYPE := 3 # 2: service provider trustlet; 3: system trustlet

## optional parameters
# --flags
TRUSTLET_FLAGS := 0 # 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

USE_SCRYPTO := FALSE
OS_TYPE := android
#-------------------------------------------------------------------------------
# Files and include paths - Add your files here
#-------------------------------------------------------------------------------

### Add include path here
INCLUDE_DIRS += \
    $(COMMON_INC_DIR) \
    $(COMMON_INC_DIR)/platform/mc \
    $(COMMON_INC_DIR)/platform/$(OS_TYPE) \
    $(CRYPTO_INC_DIR) \
    $(CRYPTO_INC_DIR)/pbkdf \
    $(CRYPTO_INC_DIR)/x509 \
    $(TRUSTLET_INC_DIR) \
    $(TRUSTLET_INC_DIR)/mc \
    $(LOG_ENCRYPTOR_INC_DIR)


### Add source code files for C compiler here
SRC_C += \
    $(TRUSTLET_DIR)/cryptoPlatform.c \
    $(TRUSTLET_DIR)/keyManager.c \
    $(TRUSTLET_DIR)/log.c \
    $(TRUSTLET_DIR)/teeCmdExecuter.c \
    $(TRUSTLET_DIR)/mc/mcAppMain.c \
    $(TRUSTLET_DIR)/mc/mcCryptoApi.c \
    $(TRUSTLET_DIR)/mc/mcStackProtection.c \
    $(CRYPTO_SRC_DIR)/cryptoEngine.c \
    $(CRYPTO_SRC_DIR)/secMemoryManager.c \
    $(CRYPTO_SRC_DIR)/sha_256_hash.c \
    $(CRYPTO_SRC_DIR)/pbkdf/hmac_sha256.c \
    $(CRYPTO_SRC_DIR)/pbkdf/pbkdf2.c \
    $(CRYPTO_SRC_DIR)/x509/asn1build.c \
    $(CRYPTO_SRC_DIR)/x509/asn1build_ec.c \
    $(CRYPTO_SRC_DIR)/x509/asn1build_rsa.c \
    $(CRYPTO_SRC_DIR)/x509/asn1.c \
    $(CRYPTO_SRC_DIR)/x509/asn1ec.c \
    $(CRYPTO_SRC_DIR)/x509/asn1gen.c \
    $(CRYPTO_SRC_DIR)/x509/asn1rsa.c \
    $(CRYPTO_SRC_DIR)/x509/certGenerator.c \
    $(CRYPTO_SRC_DIR)/x509/certParser.c \
    $(CRYPTO_SRC_DIR)/x509/x509v3.c \
    $(COMMON_SRC_DIR)/TLV.c \
    $(COMMON_SRC_DIR)/ServiceName.c \
    $(LOG_ENCRYPTOR_SRC_DIR)/circularQueue.c \
    $(LOG_ENCRYPTOR_SRC_DIR)/logEncryptor.c

### Add source code files for C++ compiler here
SRC_CPP += # nothing

### Add source code files for assembler here
SRC_S += # nothing

### Add library files for linker here
CUSTOMER_DRIVER_LIBS =
#-------------------------------------------------------------------------------
# TRUSTLET CONFIG

ifeq ($(USE_SCRYPTO), TRUE)
$(info "Used USE_SCRYPTO Crypto engine")
TRUSTLET_OPTS +=
    -DUSE_SCRYPTO \
    -DOPENSSL_FIPS

INCLUDE_DIRS += \
    $(SKM_DIR)/../../../tools/scrypto/fips/include/openssl \
    $(SKM_DIR)/../../common/include/scrypto \
    $(SKM_DIR)/../../common/src/scrypto \
    $(SKM_DIR)/../../common/src/scrypto/openssl

SRC_C += \
    $(TRUSTLET_DIR)/../../common/src/crypto/crypto_core/rsa.c \
    $(TRUSTLET_DIR)/../../common/src/crypto/crypto_core/ec.c \
    $(TRUSTLET_DIR)/../../../tools/scrypto/fips/lib/fips_premain.c \
    $(TRUSTLET_DIR)/../../../tools/scrypto/fips/lib/fips_static_hmac.c

else
$(info "Used default Crypto engine")
INCLUDE_DIRS += \
    $(CRYPTO_INC_DIR)/openssl

SRC_C += \
    $(CRYPTO_SRC_DIR)/openssl_mini/ex_data.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/mem_clr.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/memmgrs.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/aes/aes_core.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/aes/aes_gcm.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/aes/gcm128.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/a_int.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/a_bitstr.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/asn1_lib.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/a_type.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/tasn_dec.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/tasn_enc.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/tasn_fre.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/tasn_new.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/tasn_typ.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/tasn_utl.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/asn1/x_bignum.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_add.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_asm.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_ctx.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_div.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_gcd.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_exp.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_kron.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_lib.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_mod.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_mont.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_mul.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_prime.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_rand.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_recp.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_shift.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_sqr.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_sqrt.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/bn/bn_word.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec_curve.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec_cvt.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec_key.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec_lib.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec_mult.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ec_oct.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ecp_mont.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ecp_oct.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ec/ecp_smpl.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ecdsa/ecs_asn1.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ecdsa/ecs_lib.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ecdsa/ecs_ossl.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ecdsa/ecs_sign.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/ecdsa/ecs_vrf.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/lhash/lhash.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/rsa/rsa.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/rsa/rsa_lib.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/rsa/rsa_gen.c \
    $(CRYPTO_SRC_DIR)/openssl_mini/stack/stack.c

TRUSTLET_OPTS += -DUSE_OPENSSL_MINI
endif

TRUSTLET_OPTS += \
    -DUSE_MOBICORE \

ifeq ($(OS_TYPE), android)
TRUSTLET_OPTS += -DUSE_ANDROID
endif

ifeq ($(OS_TYPE), tizen)
TRUSTLET_OPTS += -DUSE_TIZEN
endif

ifeq ($(SYSTEM_HIDL_ENABLED), true)
TRUSTLET_OPTS += -DSYSTEM_ROOT_IMAGE_ENABLED
endif   #End of BOARD_BUILD_SYSTEM_ROOT_IMAGE

ifeq ($(MODE), Debug)
TRUSTLET_OPTS += -DDEBUG
endif

# Apply stack protection - requested by yj0729.kim at 17.12.05.
ARMCC_COMPILATION_FLAGS += --protect_stack --protect_stack_all
TA_LINK_OPTS := --no_strict_wchar_size --diag_suppress=L6436W

#-------------------------------------------------------------------------------
# use generic make file
include $(TLSDK_DIR_SRC)/trustlet.mk
