#==============================================================================
#
# tz_spay_common
#
# GENERAL DESCRIPTION
#    common tima functions
#
#-------------------------------------------------------------------------------
import os
Import('env')
env = env.Clone()

#-------------------------------------------------------------------------------
# Set search path for securemsm subsystem files
#-------------------------------------------------------------------------------
env.Append(CPPPATH = "${COREBSP_ROOT}/securemsm/trustzone/qsapps/tz_spay_common/public")

env.Append(CPPDEFINES = [
"QSEE",
"CRYPTO_CORE",
"NO_SYS_TYPES_H",
"CUSTOM_LIBC",
"OPENSSL_NO_DEPRECATED",
"OPENSSL_NO_ERR",
"OPENSSL_NO_LHASH",
"OPENSSL_NO_EVP",
"OPENSSL_NO_STDIO",
"OPENSSL_NO_EC",
"OPENSSL_NO_ECDSA",
"OPENSSL_NO_ECDH",
"OPENSSL_NO_RSA",
"OPENSSL_NO_SHA",
"OPENSSL_NO_SHA0",
"OPENSSL_NO_SHA1",
"OPENSSL_NO_SHA256",
"OPENSSL_NO_SHA384",
"OPENSSL_NO_SHA512",
"OPENSSL_NO_LOCKING",
"OPENSSL_NO_ENGINE",
"OPENSSL_NO_DSA",
"OPENSSL_NO_DH",
"OPENSSL_NO_STDIO",
"GETPID_IS_MEANINGLESS",
"OPENSSL_NO_CMS",
"OPENSSL_EXPORT_VAR_AS_FUNCTION",
"SWD",
])

#-------------------------------------------------------------------------------
# External depends within CoreBSP
#-------------------------------------------------------------------------------
CBSP_API = [
   'SERVICES',

   # needs to be last also contains wrong comdef.h
   'KERNEL',
]

env.RequirePublicApi(CBSP_API)

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
SRCPATH = "${COREBSP_ROOT}/securemsm/trustzone/qsapps/tz_spay_common"

#-------------------------------------------------------------------------------
# Let Scons build the object files in $(BUILDPATH} and don't copy over files
#-------------------------------------------------------------------------------
env.VariantDir('${BUILDPATH}', SRCPATH, duplicate=0)

#-------------------------------------------------------------------------------
# Compiler, object, and linker definitions
#-------------------------------------------------------------------------------
env.PublishPrivateApi('SECUREMSM', [
   "${INC_ROOT}/core/api/services",
   "${INC_ROOT}/core/api/securemsm/trustzone/qsee",
   "${INC_ROOT}/core/securemsm/secrsa/shared/inc",
   "${INC_ROOT}/core/securemsm/secrsa/shared/src",
   "${INC_ROOT}/core/api/securemsm/crypto",
   "${INC_ROOT}/core/securemsm/secmath/shared/inc",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_platform/tl/QSEE",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_platform/vendor/QSEE/tl",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_platform/public/tl",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_platform/vendor/ese/header_libs/swd/header/iso7816",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/public",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/tl/cryptolib/include",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/tl/cryptolib/source",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/tl/cryptolib/source/libc_functions/portable/allocators",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/tl/mbedtls/include",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/tl/mbedtls/include/mbedtls",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/tl/mbedtls/configs"
])

#-------------------------------------------------------------------------------
# Sources, libraries
#-------------------------------------------------------------------------------
TZ_SPAY_COMMON_SRC = [
   '${BUILDPATH}/tl/jose.c',
   '${BUILDPATH}/tl/uECC.c',
   '${BUILDPATH}/tl/spay_card_validator_tl.c',
   '${BUILDPATH}/tl/spay_pin_random_util_tl.c',
   '${BUILDPATH}/tl/spay_parse_cert_tl.c',
   '${BUILDPATH}/tl/spay_transmit_mst_tl.c',
   '${BUILDPATH}/tl/base64.c',
   '${BUILDPATH}/tl/spay_authenticate_transaction_tl.c',
   '${BUILDPATH}/tl/spay_init_tl.c',
   '${BUILDPATH}/tl/spay_json_parser_tl.c',
   '${BUILDPATH}/tl/spay_msk_tl.c',
   '${BUILDPATH}/tl/spay_inapp_data_tl.c',
   '${BUILDPATH}/tl/cryptolib/source/cryptolib_init.c',
#  '${BUILDPATH}/tl/cryptolib/source/libc_functions/portable/allocators/memmgrs.c',
   '${BUILDPATH}/tl/cryptolib/source/libc_functions/libc_functions.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/mem_clr.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/modes/gcm128.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/modes/ctr128.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/aes/aes_core.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/aes/aes_ctr.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/evp/c_all.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/evp/c_allc.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/evp/c_alld.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/mem.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/o_init.c',
   '${BUILDPATH}/tl/cryptolib/source/openssl/aes/aes_misc.c',
   '${BUILDPATH}/tl/cryptolib/source/tests/selftest.c',
   '${BUILDPATH}/tl/cryptolib/source/tests/aes_test.c',
   '${BUILDPATH}/tl/cryptolib/source/tests/aes_ctr_test.c',
   '${BUILDPATH}/tl/cryptolib/source/tests/test_utils.c',
   '${BUILDPATH}/tl/cipher.c'
]

if "USE_MBEDTLS" in env['CCFLAGS']:
    TZ_SPAY_COMMON_SRC += [
       '${BUILDPATH}/tl/mbedtls/library/bignum.c',
       '${BUILDPATH}/tl/mbedtls/library/platform.c',
       '${BUILDPATH}/tl/mbedtls/library/memory_buffer_alloc.c'
    ]

if "SUPPORT_P2P" in env['CCFLAGS']:
    TZ_SPAY_COMMON_SRC += [
       '${BUILDPATH}/tl/spay_p2p_data_tl.c',
    ]

env.Append(CPPPATH = "${COREBSP_ROOT}/api/securemsm/trustzone/qsee")

env.Append(CCFLAGS = ' -DUSE_QSEE')

#-------------------------------------------------------------------------------
# Add Libraries to images in the secboot3 boot architecture. Note we don't
# add the library into SBL1 image as SBL1 uses PBL secboot library instead
#-------------------------------------------------------------------------------
env.AddObject(['VISA_PAY_IMAGE', 'ITRC_PAY_IMAGE', 'AMEX_PAY_IMAGE',  'AMEX_PAYV2_IMAGE', 'PLCC_PAY_IMAGE', 'PAY_AUTH_IMAGE', 'MC_PAY_IMAGE', 'CNCC_PAY_IMAGE', 'CHNCMM_PAY_IMAGE', 'DC_PAY_IMAGE', 'KRCC_PAY_IMAGE', 'NAPAS_PAY_IMAGE', 'PURE_PAY_IMAGE', 'MIR_PAY_IMAGE', 'EURCMM_PAY_IMAGE', 'PAYPAL_IMAGE', 'TCH_MC_IMAGE', 'SPS_PAY_IMAGE', 'IDEMIA_PAY_IMAGE', 'BC_CORE_IMAGE', 'BC_TUI_IMAGE'], TZ_SPAY_COMMON_SRC);

env.LoadSoftwareUnits()
