#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
import os
Import('env')
env = env.Clone()

#------------------------------------------------------------------------------
# TUI FUNC
#------------------------------------------------------------------------------
def TUI_LOGD(str):
  print("\n\033[0;33;40m" +  "[TUI_DBG] " + str + "\033[0;m\n")

aliases = ['tz_tui']
env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/tz_tui/build')
#env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/tz_tui/build/${SHORT_BUILDPATH}')
env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/apps/bsp/trustzone/qsapps/${LIBNAME}/' + 'tz_tui' + '/${PROC}' + '/${SHORT_BUILDPATH}')

if not env.CheckAlias(aliases):
 Return()

if env.has_key('USES_NO_CP'):
  env.Append(CCFLAGS = ' -DUSES_NO_CP ')

target_name = 'tz_tui'
app_name = 'tz_tui'

#CHIPSET = env['RAW_CHIPSET']
#if env['CHIPSET'] == 'sm8250':
#  SCRYPTO_VER = 'SCryptolib_v2_5'
#  SCRYPTO_PATH = env['BUILD_ROOT'] + "/ssg/securemsm/trustzone/qsapps/tz_tui/lib/Qualcomm/" + SCRYPTO_VER
#  SCRYPTO_LIB = SCRYPTO_PATH + "/libs/scrypto_v2.5_x32_qsee_release.a"
#else:
#  SCRYPTO_VER = 'SCryptolib_v2_4'
#  SCRYPTO_PATH = env['BUILD_ROOT'] + "/ssg/securemsm/trustzone/qsapps/tz_tui/lib/Qualcomm/" + SCRYPTO_VER
#  SCRYPTO_LIB = SCRYPTO_PATH + "/" + CHIPSET + "/scrypto_v2.4_x32_qsee_release.a"

#------------------------------------------------------------------------------
# We need to specify "neon" to generate SIMD instructions in 32-bit mode
#------------------------------------------------------------------------------
if env['PROC'] == 'scorpion':
  env.Append(CCFLAGS = " -mfpu=neon ")

env.Append(CCFLAGS = " -DCONFIG_QSEE")

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/libs/biometric/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/vendor/ese/header_libs/swd/header/iso7816",
   #"${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_platform/public/tl",
   "${INC_ROOT}/core/securemsm/trustzone/qsapps/tz_spay_common/public",
   "${INC_ROOT}/core/securemsm/sse/qsee/SecureUI/inc",
   "${INC_ROOT}/core/securemsm/sse/qsee/SecureUILib/include",
   "${INC_ROOT}/core/securemsm/sse/qsee/SecureTouch/drTs/include",
   "${INC_ROOT}/core/securemsm/sse/qsee/SecureDisplay/libpng/include",
   "${INC_ROOT}/core/securemsm/sse/qsee/SecureDisplay/zlib/include",
])

env.RequirePrivateApi('SECUREMSM')

includes = [
          '#../../core/api/services',
          '#../../core/api/kernel/libstd/stringl',
       #  '#../../core/api/securemsm/crypto',
          '#../../core/api/boot/qfprom',
          '#../../core/kernel/smmu/ACv3.0/common/inc',
          '#../../core/kernel/smmu/smmu500/inc/'
          '#../../ssg/api/securemsm/trustzone/qsee',
          '#../../ssg/securemsm/accesscontrol/api',
          '#../../ssg/securemsm/uclib/usr/legacy/secrsa/shared/inc',
          '#../../ssg/securemsm/uclib/usr/legacy/secrsa/shared/src',
          '#../../ssg/securemsm/uclib/usr/legacy/secmath/shared/inc',
          '#../../ssg/api/securemsm/trustzone/gp',
       #  '#../../ssg/securemsm/trustzone/qsapps/libs/applib/common_applib/inc',	// ssg/bsp/trustzone/qsapps/commonlib/build/YAQAANAA/scorpion/
       #  '#../../ssg/securemsm/trustzone/qsapps/libs/applib/applib/qsee/src',		// ssg/bsp/trustzone/qsapps/applib/build/YAQAANAA/scorpion/
          '#../../ssg/securemsm/trustzone/qsapps/libs/biometric/inc',
          '#../../ssg/securemsm/trustzone/qsapps/common',
          '#../../ssg/securemsm/trustzone/qsee/mink/include',
          '#../../ssg/securemsm/sse/common/include',
          '#../../ssg/securemsm/sse/SecureTouch/common/include',
          '#../../ssg/securemsm/sse/SecureTouch/layout/include',
          '#../../ssg/securemsm/sse/SecureTouch/controller/inc',
          '#../../ssg/securemsm/sse/qsee/SecureUI/inc',
          '#../../ssg/securemsm/sse/qsee/SecureUILib/include',
          '#../../ssg/securemsm/sse/qsee/SecureTouch/drTs/include',
          '#../../ssg/securemsm/sse/qsee/SecureDisplay/libgd/include',
          '#../../ssg/securemsm/sse/qsee/SecureDisplay/libpng/include',
          '#../../ssg/securemsm/sse/qsee/SecureDisplay/zlib/include',
          '#../../ssg/securemsm/trustzone/qsapps/tz_tui/common/inc',
          '#../../ssg/securemsm/trustzone/qsapps/tz_tui/resource',
          '#../../ssg/securemsm/trustzone/qsapps/tz_tui/vendor/src',
          '#../../ssg/securemsm/trustzone/qsapps/tz_iccc_common/public',
          '#../../ssg/securemsm/trustzone/qsapps/tz_common/public',
          #'#../../ssg/securemsm/tz_platform/public/tl',
          #'#../../ssg/securemsm/tz_platform/vendor/QSEE/tl',
          '#../../ssg/securemsm/uclib/usr/legacy/secrsa/shared/src',
          '#../../ssg/securemsm/uclib/usr/legacy/secrsa/shared/inc',
          '#../../ssg/securemsm/uclib/usr/legacy/secmath/shared/inc',
          '#../../ssg/securemsm/tz_mpos_common/public',
          '#../../ssg/securemsm/tima_common/inc',
           ]

# when you need SCryptolib, then add it to includes
#          '#../../ssg/securemsm/trustzone/qsapps/tz_tui/lib/Qualcomm/SCryptolib_v2_5/include',

#----------------------------------------------------------------------------
# App core Objects
#----------------------------------------------------------------------------
sources = [
        '../common/src/process_cmd.c',
        '../common/src/vendor_interface.c',
        '../common/src/TuiPinpadScreen.c',
        '../common/src/TuiPinpadState.c',
        '../common/src/TuiLayout.c',
        '../common/src/TuiScreenProperty.c',
        '../vendor/src/app_main.c',
        '../vendor/src/tui_vendor.c',
        '../vendor/src/tui_vendor_impl.c',
        '../../../../tz_mpos_common/tl/tz_mpos_common_tl.c',
        '../../../../tima_common/src/QSEE_TZ_Vendor.c',
        '../../tz_iccc_common/tl/tz_iccc_common_tl.c',
        #'../../../../tz_platform/vendor/QSEE/tl/QSEE_TZ_Vendor.c'
]
sources.append('../layouts/src/layout_1440x2560.c')

#If not sm8250 need to add other files for ICCC build
if env['CHIPSET'] != 'sm8250':
  print 'sm8250'
  iccc_sources = [
               '../../tz_common/tl/init_tl.c',
               '../../tz_common/tl/process_msr.c',
               '../../tz_common/tl/buffer_utils.c'
  ]
#  sources.append(iccc_sources)

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------
#libs = env.File(SCRYPTO_LIB.split())

if env['PROC'] == 'scorpion':
  libca = env.SubstRealPath('${MUSL32PATH}/lib/libc.a')
else:
  libca = env.SubstRealPath('${MUSLPATH}/lib/libc.a')

#libs.append(env.File(libca))

tui_libs = [
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/log/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureUI/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureUILib/lib/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureDisplay/libgd/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureDisplay/libpng/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureDisplay/zlib/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureTouch/drTs/lib/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/qsee/SecureTouch/drTs/controller/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/SecureTouch/layout/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/sse/SecureTouch/controller/build/SConscript', exports='env'),
        env.SConscript('${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/biometric/build/SConscript', exports='env'),
]

#------------------------------------------------------------------------------
# Add command to Imprint HMAC
#------------------------------------------------------------------------------
TUI_TOOLS_DIR = env['BUILD_ROOT'] + "/ssg/securemsm/trustzone/qsapps/tz_tui/lib/Qualcomm/" + "/tools"
TUI_ELF_PATH = env.subst('${OUT_DIR}/' + '${SHORT_BUILDPATH}/' + "tz_tui.elf")
TUI_RUN_FIPS_TOOLS_COMMAND = TUI_TOOLS_DIR + "/run_fips_tools.sh " + TUI_ELF_PATH + " " + TUI_TOOLS_DIR
TUI_LOGD("TUI_RUN_FIPS_TOOLS_COMMAND:" + TUI_RUN_FIPS_TOOLS_COMMAND)
#env.Append(LINKCOM = " && ")
#env.Append(LINKCOM = TUI_RUN_FIPS_TOOLS_COMMAND)

#-------------------------------------------------------------------------------
# Add metadata to image
#-------------------------------------------------------------------------------
if env['CHIPSET'] == 'sm8250':
  env.Append(CPPDEFINES = ["SM8250"])
  md = {
   'appName':    app_name,
   'privileges': ['default',
                  'WhitelistBypass',
                  'I2C',
                  'KMHAL',
                  'SecureDisplay',
                  'AppMessage',
                  'OEMBuf',
                  'HwFuse',
                  'ICCCGetDeviceStatus',
                  'ICCCSaveData',
                  'ICCCReadData',
                  'MPOS',
                 ],
  'stackSize': 0x40000,
  'heapSize': 0x200000,
  }
else:
  md = {
   'appName':    app_name,
   'privileges': ['default',
                  'WhitelistBypass',
                  'OEMBuf', 'WhitelistBypass' # to use ICCC feature
                 ],
  'heapSize': 0x10000,
  }

deploy_header_files = env.Glob('../inc/*')

tz_tui_units = env.SecureAppBuilder(
  sources = sources,
  includes = includes,
  metadata = md,
  image = target_name,
  user_libs = tui_libs,
  deploy_sources = sources + ['SConscript'] + deploy_header_files
)

#for image in env['IMAGE_ALIASES']:
#  op = env.Alias(image, tz_tui_units)
op = env.Alias(aliases, tz_tui_units)
