#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
import os
Import('env')
env = env.Clone()

#------------------------------------------------------------------------------
# ARCounter FUNC
#------------------------------------------------------------------------------

if not hasattr(env, 'IMAGE_ALIASES'):
  aliases = []
  aliases = ['arcounter',]
  env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/arcounter/build')
  env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/arcounter/build/${SHORT_BUILDPATH}')

if env.has_key('USES_NO_CP'):
  env.Append(CCFLAGS = ' -DUSES_NO_CP ')

target_name = 'arcounter'
app_name = 'arcounter'

#------------------------------------------------------------------------------
# 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.RequirePrivateApi('SECUREMSM')

includes = [
          '#../../core/api/services',
          '#../../core/api/boot/qfprom',
          '#../../core/api/securemsm/crypto',
          '#../../ssg/api/securemsm/trustzone/qsee',
          '#../../ssg/securemsm/trustzone/qsapps/arcounter/inc',
          '#../../ssg/securemsm/trustzone/qsapps/arcounter/inc/shared',
          '#../../ssg/securemsm/trustzone/qsapps/arcounter/inc/msgs',
          '#../../ssg/securemsm/tima_common/shared/inc',
          '#../../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_common/public',
          '#../../ssg/securemsm/tz_platform/public/tl',
          '#../../ssg/securemsm/tz_platform/vendor/QSEE/tl',
          '#../../ssg/securemsm/tz_iccc_common/public',
           ]

#----------------------------------------------------------------------------
# App core Objects
#----------------------------------------------------------------------------
sources = [
        '../src/app_main.c',
        '../src/process_cmd.c',
        '../src/tl_arcounter_ctx.c',
        '../src/attn.c',
        '../src/cache.c',
        '../src/rpmb_storage.c',
        '../src/string.c',
        '../src/string.c',
        '../src/timer.c',
        '../src/shared/Initialize_tl.c',
        '../src/shared/Finalize_tl.c',
        '../src/shared/StoreRTCTime_tl.c',
        '../src/shared/UpdateTick_tl.c',
        '../src/shared/SetTimer_tl.c',
        '../src/shared/ChangeTime_tl.c',
        '../src/shared/CancelTimer_tl.c',
        '../src/shared/GetReferenceTime_tl.c',
        '../src/shared/GetRemainingTime_tl.c',
        '../src/shared/GetTimer_tl.c',
        '../../../../tz_common/tl/init_tl.c',
        '../../../../tz_common/tl/process_msr.c',
        '../../../../tz_common/tl/buffer_utils.c',
        '../../../../tz_platform/vendor/QSEE/tl/QSEE_TZ_Vendor.c',
        '../../../../tz_iccc_common/tl/tz_iccc_common_tl.c',
]

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------

libs = []

#if env['PROC'] == 'scorpion':
#  libca = env.SubstRealPath('${MUSL32PATH}/lib/libc.a')
#else:
#  libca = env.SubstRealPath('${MUSLPATH}/lib/libc.a')

#libs.append(env.File(libca))


#-------------------------------------------------------------------------------
# Add metadata to image
#-------------------------------------------------------------------------------
md = {
   'appName':    app_name,
   'privileges': ['default',
                  'WhitelistBypass',
                  'OEMUnwrapKeys',
                  'OEMBuf',
                  'ICCCGetDeviceStatus',
                  'ICCCSaveData',
                  'ICCCReadData'
                 ],
  'heapSize': 0x10000,
}

deploy_header_files = env.Glob('../inc/*')

arcounter_units = env.SecureAppBuilder(
  sources = sources,
  includes = includes,
  metadata = md,
  image = target_name,
  user_libs = libs,
  deploy_sources = sources + ['SConscript'] + deploy_header_files

)

if hasattr(env, 'IMAGE_ALIASES'):
  for image in env['IMAGE_ALIASES']:
    env.Alias(image, arcounter_units)
else:
  env.Alias(aliases, arcounter_units)


#-------------------------------------------------------------------------------
# Load sub scripts
#-------------------------------------------------------------------------------
#env.LoadSoftwareUnits()
