#===========================================================================
#  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()

env.Append( CPPFLAGS = ' -Wno-format' )
aliases = ['tigerfp', 'uefitzt', 'deploy','allapps']

# env.Replace(OUT_DIR = '${  if env['PROC'] == 'scorpion':
#     md['memoryType'] = 'Unprotected'

env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/tigerfp/build/$PROC')
env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/tigerfp/build/${SHORT_BUILDPATH}/$PROC')

print '+++++++++++++++[check env start]+++++++++++++++++++++++++++++++'
print 'BUILD_ROOT = %s' % env['BUILD_ROOT']
print 'PROC = %s' % env['PROC']
print 'SHORT_BUILDPATH = %s' % env['SHORT_BUILDPATH']
print '+++++++++++++++[check env end]+++++++++++++++++++++++++++++++'

app_name = 'tigerfp'
target_name = "tigerfp"

#------------------------------------------------------------------------------
#  We need to specify "neon" to generate SIMD instructions in 32-bit mode
#------------------------------------------------------------------------------
if env['PROC'] == 'scorpion':
   env.Append(CCFLAGS = " -mfpu=neon ")

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/tigerfp/include',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/tigerfp/src',
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/tigerfp/src/tzWrappers',
    # '${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',
    ]

#----------------------------------------------------------------------------
# App core Objects
#----------------------------------------------------------------------------
from tigerfp import tigerfpSource

print '+++++++++++++++[compiling files]+++++++++++++++++++++++++++++++'
for fn in tigerfpSource:
  print "++++       " + fn
print '++++++++++++++++++++[total:%d]+++++++++++++++++++++++++++++++++' % len(tigerfpSource)

sources = tigerfpSource

#########################USER DEFINED MACROS[START]################
import os                                                           

os.environ['CHIPSET_NAME'] = "sm7225"
os.environ['COMMIT_SHA1'] = "f160a2bd3e79b720267ea592336e57ea7ac6d9d2"

if os.environ['TARGET_BUILD_VARIANT'] == "eng":
    os.environ['BUILD_MODE'] = "__DEBUG__"
else:
    os.environ['BUILD_MODE'] = "__RELEASE__"
                                                                    
if 'TIGERFP_TEST' in os.environ:                                    
    env.Append(CPPDEFINES = ['__TIGERFP_TEST_MODE'])                
    env.Append(CPPDEFINES = ['__DEBUG'])                            
                                                                    
if 'BUILD_MODE' in os.environ :                                     
    if os.environ['BUILD_MODE'] == "__RELEASE__":                   
        env.Append(CPPDEFINES = ['TIGERFP_RELEASE'])                
        env.Append(CPPDEFINES = ['TIGER_RELEASE'])                  
        env.Append(CPPDEFINES = ['TA_RELEASE'])                     
    else:                                                           
        print "++++++++ debug mode ++++++++++"                      
# develop TA debug for storage                                      
#env.Append(CPPDEFINES = ['DEV_TA_STORAGE_DEBUG'])                  
# develop TA debug for ATTK/DRK                                     
#env.Append(CPPDEFINES = ['DEV_TA_DRK_DEBUG'])                      
# develop TA debug for dump Request #============SCONS_PATCH: DONOT EDIT======== Respone                       
#env.Append(CPPDEFINES = ['DEV_TA_DUMP_INOUT'])                     
## add env variables                                                
env.Replace(USERNAME = os.environ['USER'])                          
                                                                    
if 'CHIPSET_NAME' in os.environ:                                    
    env.Replace(CHIPSET_NAME = os.environ[ 'CHIPSET_NAME' ].lower())
                                                                    
if 'COMMIT_SHA1' in os.environ:                                     
    env.Replace(COMMIT_SHA1 = os.environ[ 'COMMIT_SHA1' ])          
                                                                    
## add CPPDEFINES                                                   
env.Append(CPPDEFINES = [                                           
    "__USER__=\\\"${USERNAME}\\\"",                           
    "__CHIPSET__=\\\"${CHIPSET_NAME}\\\"",                    
    "__COMMIT_SHA1__=\\\"${COMMIT_SHA1}\\\"",                 
])                                                                  
env.Append(CPPDEFINES = ['__QUALCOMM__'])                           
env.Append(CPPDEFINES = os.environ[ 'CHIPSET_NAME' ].upper())       
# env.Append(CPPDEFINES = ['DEV_TA_DRK_DEBUG'])                     
env.Append(CPPDEFINES = ['SVTS_CMD_ID_SUPPORT'])                    
#                                                                   
env.Append(CPPDEFINES = ['__TA_LOG_TAG__=\\\"TIGERFP-TA\\\"'])
env.Append(CPPDEFINES = ['TZ_MODEL_QCOM'])
#########################USER DEFINED MACROS[END]##################

if env.StandaloneSdk():
  libs = [
    '${SDK_ROOT}/libs/${APP_EXEC_MODE}/biometric.lib',
  ]
  print '+++++++++++++++standloneSdk+++++++++++++++++++++++++++++++'
  print 'SDK_ROOT = %s' % env['SDK_ROOT']
  print 'APP_EXEC_MODE = %s' % env['APP_EXEC_MODE']
  print '+++++++++++++++standloneSdk+++++++++++++++++++++++++++++++'
else:
  print '+++++++++++++++nonStandloneSdk+++++++++++++++++++++++++++++++'
  libs = [
    env.SConscript('${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/biometric/build/SConscript', exports='env'),
  ]

# print 'MUSLPATH = %s' % env['MUSLPATH']
# if env['PROC'] == 'scorpion':
  # libca = env.SubstRealPath('${MUSL32PATH}/lib/libc.a')
# else:
  # libca = env.SubstRealPath('${MUSLPATH}/lib/libc.a')
#
# libs.append(env.File(libca))

deploy_sources = []
deploy_sources.extend(sources)

#-------------------------------------------------------------------------------
# Add metadata to image
# For debugging purposes UUID is "SampleApp" in hex.
#-------------------------------------------------------------------------------
md = {
   'appName':    app_name,
   'privileges': ['default',
                  # 'I2C',
                  'OEMUnwrapKeys',
                  'TestSandbox',
                  'CertValidate',
                  # 'SPI',
                  'SPCOM',
                  'TLMM',
                  # 'SecureDisplay',
                  # 'DebugPolicySource',
                  'IntMask',
                  'OEMBuf',
                  'TransNSAddr',
                  'NSSystemReg',
                  'HdcpEncryption',
                  'RTICReport',
                  'System'],
  # 'heapSize': 0x30000,
  # 'storageFilesNoPersist': False,
  # 'totalStorageFiles': 300,
  # 'cryptoSelfTest' : True,
}

if env['PROC'] == 'scorpion':
    md['memoryType'] = 'Unprotected'

deploy_header_files = env.Glob('../inc/*')


tigerfp_units = env.SecureAppBuilder(
  sources = sources,
  includes = includes,
  metadata = md,
  image = target_name,
  user_libs = libs,
  deploy_sources = deploy_sources + ['SConscript'] + deploy_header_files,
  deploy_variants = env.GetDefaultPublicVariants()
)

env.Alias(aliases, tigerfp_units)
