#===============================================================================
#  Copyright (c) 2011-2020 QUALCOMM Technologies Incorporated.
#  All Rights Reserved.
#  Qualcomm Confidential and Proprietary
#===============================================================================

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
import os
import re
Import('env')
env = env.Clone()

if not hasattr(env, 'IMAGE_ALIASES'):
  aliases = []
  aliases = ['tz_knoxai',]
  env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/tz_knoxai/build')
  env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/tz_knoxai/build/${SHORT_BUILDPATH}')

if env.has_key('USES_NO_CP'):
  env.Append(CCFLAGS = ' -DUSES_NO_CP ')

env.Append(CCFLAGS = " -DCONFIG_QSEE")
env.Append(CCFLAGS = ' -Wno-pointer-sign ')
env.Append(CCFLAGS = ' -Wno-implicit-function-declaration ')
env.Append(CCFLAGS = ' -Wno-strlcpy-strlcat-size ')
env.Append(CCFLAGS = ' -Wno-string-plus-int ')
env.Append(CCFLAGS = ' -Wno-unused-parameter ')
env.Append(CCFLAGS = ' -Wno-missing-field-initializers')

new_ta_build = os.getenv('SUPPORT_NEW_TA_BUILD', 'false')
if new_ta_build in ['true']:
  env.Append(LINKFLAGS= ' -no-threads ')

#------------------------------------------------------------------------------
# We need to specify "neon" to generate SIMD instructions in 32-bit mode
#------------------------------------------------------------------------------
if env['PROC'] == 'scorpion':
  env.Append(CCFLAGS = " -mfpu=neon ")

env.Append(CPPDEFINES = 'TZ_KNOXAI_APP=1')

includes = [
   '#../../core/api/boot/qfprom',
   '#../../core/api/kernel/libstd/stringl',
   '#../../core/api/services',
   '#../../ssg/api/securemsm/trustzone/gp',   
   '#../../ssg/api/securemsm/trustzone/qsee',
   '#../../ssg/securemsm/trustzone/qsapps/tz_knoxai/inc',
   '#../../ssg/securemsm/tz_iccc_common/public', # ICCC
]

if env['CHIPSET'] in ['sdm670','sdm710']:
  includes += [
  '#../../ssg/securemsm/tz_common/public',
  '#../../ssg/securemsm/tz_platform/public/tl',
  '#../../ssg/securemsm/tz_platform/vendor/QSEE/tl',
  '#../../ssg/securemsm/secmath/shared/inc',
  ] #ICCC
  env.Append(CCFLAGS = " -DCONFIG_NHLOS_LEGACY_ICCC")

includes += [os.environ['TZ_SCRYPTO_HEADER_PATH']]

#----------------------------------------------------------------------------
# App core Objects
#----------------------------------------------------------------------------
sources = [
      '../../tz_knoxai/src/app_main.c',
      '../../tz_knoxai/src/knoxai_ec.c',
      '../../tz_knoxai/src/knoxai_rsa.c',
      '../../tz_knoxai/src/knoxai_prov.c',
      '../../tz_knoxai/src/knoxai_factory_model_key.c',
      '../../tz_knoxai/src/knoxai_drk.c',
      '../../tz_knoxai/src/base64.c',
      '../../tz_knoxai/src/knoxai_vendor_utils.c',
      '../../../../tz_iccc_common/tl/tz_iccc_common_tl.c', # ICCC (Legacy, TA-to-TA)
]

if env['CHIPSET'] in ['sdm670','sdm710']:
  sources += [
    '../../../../tz_common/tl/init_tl.c',
    '../../../../tz_common/tl/process_msr.c',
    '../../../../tz_platform/vendor/QSEE/tl/QSEE_TZ_Vendor.c',
  ] # Legacy ICCC

target_name = 'tz_knoxai'
app_name = 'tz_knoxai'
uuid_name = 'b41b1a07-f326-4af8-9ec3-32dd36c1c16f'

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------
SCRYPTO_LIB = os.environ['TZ_SCRYPTO_LIB32']
libs = env.File(SCRYPTO_LIB.split())

#-------------------------------------------------------------------------------
# Add command to Imprint HMAC (SCrypto)
#-------------------------------------------------------------------------------
scrypto_sdk_dir = os.environ['TZ_SCRYPTO_BASE_PATH']
tools_dir = scrypto_sdk_dir + "/tools"

if env['CHIPSET'] in ['sm8350', 'lahaina']:
  elf_path = env.subst('${OUT_DIR}/' + 'tz_knoxai.elf')
else :
  elf_path = env.subst('${OUT_DIR}/' + '${SHORT_BUILDPATH}/' + 'tz_knoxai.elf')

run_fips_tools_command = tools_dir + "/run_fips_tools.sh " + elf_path
env.Append(LINKCOM = " && ")
env.Append(LINKCOM = run_fips_tools_command)

if env['CHIPSET'] in ['lahaina', 'kodiak']:
  env.Append(CCFLAGS = " -DSM8350")

#-------------------------------------------------------------------------------
# Add metadata to image
#-------------------------------------------------------------------------------
if env['CHIPSET'] in ['sm8250','saipan','bitra','lahaina']: # if env['CHIPSET'] in ['sm8250','sm7250','sm7225','sm8350']:
  md = {
    'appName':    app_name,
    'privileges': ['default',
                   'System',
                   'WhitelistBypass',
                   'HwFuse',
                   'OEMBuf',
                   'ICCCReadData',# ICCC v4 TA-to-TA
                   'ICCCGetDeviceStatus'
                  ],
    'heapSize':  0x10000,
  }
else:
  md = {
    'appName':    app_name,
    'privileges': ['default',
                   'System',    
                   'WhitelistBypass',
                   'HwFuse',
                   'GPServices',
                   'OEMBuf',
                  ],
   'heapSize':  0x10000,
  }

deploy_header_files = env.Glob('../inc/*')

tz_knoxai_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, tz_knoxai_units)
else:
  env.Alias(aliases, tz_knoxai_units)
