#===========================================================================
#  Copyright (c) 2011-2019 QUALCOMM Technologies Incorporated.
#  All Rights Reserved.
#  Qualcomm Confidential and Proprietary
#===============================================================================

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
import os

try:
  #normal builds and integrated apps + sdk builds
  Import('env')
except:
  #standalone TA build against an sdk
  #this sconscript is included in $SDK_ROOT/samples/sampleapp/src
  env = SConscript('../../../external/SConstruct')
  env.InitArch(ARGUMENTS.get('ARCH','aarch64'))
  pass

env = env.Clone()

if env['MSM_ID'] in ['670']:
  env.Append(CPPDEFINES = "IS_sdm710_TARGET")

for target in ['smplap32','smplap64']:
  aliases = []
  if target == 'smplap32':
    if env['APP_EXEC_MODE'] == 'aarch64':
      continue
    aliases = ['sampleapp', 'smplap32', 'uefitzt', 'deploy','allapps']
    env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/sampleapp/build/$PROC')
    env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/sampleapp/build/${SHORT_BUILDPATH}/$PROC')
    uuid_name = '53616D70-6C65-4170-7000-000000000032'
  elif target == 'smplap64':
    if env['APP_EXEC_MODE'] == 'aarch32':
      continue
    aliases = ['sampleapp', 'smplap64', 'uefitzt', 'deploy','allapps']
    env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/smplap64/build/$PROC')
    env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/smplap64/build/${SHORT_BUILDPATH}/$PROC')
    uuid_name = '53616D70-6C65-4170-7000-000000000064'

  if not env.CheckAlias(aliases):
    continue

  #------------------------------------------------------------------------------
  # 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 = ' -DSAMPLE_APP=1 ')

  test_fuse_inc = ['${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/sampleapp/inc/$CHIPSET']
  includes = [
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/sp_iris/inc',
    '${BUILD_ROOT}/core/api/boot/qfprom',
    '${BUILD_ROOT}/core/api/kernel/libstd/stringl',
    '${BUILD_ROOT}/core/api/services/',
    '${BUILD_ROOT}/core/kernel/smmu/ACv3.0/common/inc/',
    '${BUILD_ROOT}/ssg/api/securemsm/trustzone/gp',
    '${BUILD_ROOT}/ssg/api/securemsm/trustzone/qsee',
    '${BUILD_ROOT}/ssg/securemsm/uclib/usr/legacy/secmath/shared/inc',
    '${BUILD_ROOT}/ssg/securemsm/uclib/usr/legacy/secrsa/shared/inc',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/common/crypto_test_vectors/',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/common/idl',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/applib/qsee/src',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/biometric/inc',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/sampleapp/inc',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/sampleapp/idl',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/smplserv/src',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/smplserv/idl',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsee/mink/include',
    '${BUILD_ROOT}/ssg/securemsm/uclib/usr/legacy/unifiedcrypto/shared/ecies/inc',
  ]
  includes.extend(test_fuse_inc)

  #----------------------------------------------------------------------------
  # App core Objects
  #----------------------------------------------------------------------------

  sources = [
          'app_main.c',
          'app_smci_test.c',
          'app_smplserv_test.c',
          'app_sandbox_test.c',
          'app_smplcert_test.c',
          'app_crypto.c',
          'app_sfs.c',
          'app_rsa.c',
          'qsee_api_tests.c',
          'app_cmnlib.c',
          'app_message_passing.c',
          'app_fuses.c',
          'app_stor.c',
          'app_iris.c',
          'app_spcom_test.c',
          'app_bio_lib.c',
          'app_bulletin_board.c',
          'app_hdcp.c',
          'idl/CAppLegacyTest.c',
          'app_gp_fts.c',
          'app_fips_test.c',
          'app_timer.c',
          'app_heap_debugging_test.c'
  ]
  if env.StandaloneSdk():
    libs = [
      '${SDK_ROOT}/libs/${APP_EXEC_MODE}/biometric.lib',
      '${SDK_ROOT}/libs/${APP_EXEC_MODE}/sp_iris.lib',
    ]
  else:
    libs = [
    env.SConscript('${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/biometric/build/SConscript', exports='env'),
    env.SConscript('${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/sp_iris/build/SConscript', exports='env'),
    ]
  TESTS_TO_STUB = []
  if env['CHIPSET'] in ['mdm9205']:
    TESTS_TO_STUB += [
                       'app_stor.c',
                     ]

#Use Stub file if TESTS not Applicable for target
  for x in TESTS_TO_STUB:
    try:
       sources.remove(x)
       sources.append(x.replace('.c','_stub.c'))
    except ValueError:
       pass

  deploy_sources = []
  deploy_sources.extend(sources)

  #-------------------------------------------------------------------------------
  # Add metadata to image
  # For debugging purposes UUID is "SampleApp" in hex.
  #-------------------------------------------------------------------------------
  md = {
     'appName':    target,
     'UUID':       uuid_name,
     'privileges': ['default',
                    'I2C',
                    'OEMUnwrapKeys',
                    'TestSandbox',
                    'CertValidate',
                    'SPI',
                    'SPCOM',
                    'TLMM',
                    'SecureDisplay',
                    'DebugPolicySource',
                    'IntMask',
                    'OEMBuf',
                    'TransNSAddr',
                    'NSSystemReg',
                    'HdcpEncryption',
                    'RTICReport',
                    'System'
                   ],
    'heapSize': 0x1B8000,
    'storageFilesNoPersist': True,
    'totalStorageFiles': 2000,
    'cryptoSelfTest' : True,
  }
  if env['PROC'] == 'scorpion':
    md['memoryType'] = 'Unprotected'

  deploy_header_files = env.Glob('../inc/*')

  sampleapp_units = env.SecureAppBuilder(
    sources = sources,
    includes = includes,
    metadata = md,
    image = target,
    user_libs = libs,
    deploy_sources = deploy_sources + ['SConscript'] + deploy_header_files,
    deploy_variants = env.GetDefaultPublicVariants()
  )

  env.Alias(aliases, sampleapp_units)
