#===============================================================================
#  Copyright (c) 2011-2020 QUALCOMM Technologies Incorporated.
#  All Rights Reserved.
#  Qualcomm Confidential and Proprietary
#===============================================================================

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
import os
Import('env')
env = env.Clone()

#------------------------------------------------------------------------------
# Check build flag
#------------------------------------------------------------------------------
if not hasattr(env, 'IMAGE_ALIASES'):
  aliases = []
  aliases = ['blgrd',]
  env.Replace(OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/blgrd/build/$PROC')
  env.Replace(LIB_OUT_DIR = '${BUILD_ROOT}/ssg/bsp/trustzone/qsapps/blgrd/build/${SHORT_BUILDPATH}/$PROC')

if env.has_key('USES_NO_CP'):
  env.Append(CCFLAGS = ' -DUSES_NO_CP ')

#-------------------------------------------------------------------------------
# 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}/core/api/services',
            '${BUILD_ROOT}/core/api/boot/qfprom',
            '${BUILD_ROOT}/core/api/kernel/libstd/stringl',
            '${BUILD_ROOT}/ssg/securemsm/secmath/shared/inc',
            '${BUILD_ROOT}/ssg/securemsm/secrsa/shared/inc',
            '${BUILD_ROOT}/ssg/securemsm/secrsa/shared/src',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/common',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/common/idl',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/libs/applib/qsee/src',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsee/mink/include',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/blgrd/inc',
]

grdm_inc = ['${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/blgrd/inc/grdm',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/blgrd/inc/grdm/common',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/blgrd/inc/grdm/vendor/guardianM',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/blgrd/inc/grdm/vendor/star',
            '${BUILD_ROOT}/ssg/securemsm/trustzone/qsapps/blgrd/inc/openssl',
]
includes.extend(grdm_inc)
    
#-------------------------------------------------------------------------------
# App core Objects
#-------------------------------------------------------------------------------
sources = [
        '../src/app_main.c',
        '../src/app_grdm.c',
        '../src/app_grdm_fw.c',
        '../src/app_grdm_rpmb.c',
        '../src/app_grdm_fdc.c',
]

grdm_src = [
        '../src/grdm/common/ese_api.c',
        '../src/grdm/common/ese_data.c',
        '../src/grdm/common/ese_hal.c',
        '../src/grdm/common/ese_protocol.c',
        '../src/grdm/common/ese_util.c',
        '../src/grdm/vendor/guardianM/grdm_bl.c',
        '../src/grdm/vendor/guardianM/grdm_boringssl.c',
        '../src/grdm/vendor/guardianM/grdm_common.c',
        '../src/grdm/vendor/guardianM/grdm_crypto.c',
        '../src/grdm/vendor/guardianM/grdm_fw.c',
        '../src/grdm/vendor/guardianM/grdm_internal.c',
        '../src/grdm/vendor/guardianM/grdm_log.c',
        '../src/grdm/vendor/guardianM/grdm_transport.c',
        '../src/grdm/vendor/star/star_apdu.c',
        '../src/grdm/vendor/star/star_authentication.c',
        '../src/grdm/vendor/star/star_credential.c',
        '../src/grdm/vendor/star/star_firmware.c',
]

sources.extend(grdm_src)

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------
# Library (scrypto, libc)
#-------------------------------------------------------------------------------

if env['PROC'] == 'scorpion':
  libs.append(os.environ['TZ_SCRYPTO_LIB32'])
else:
  libs.append(os.environ['TZ_SCRYPTO_LIB64'])

#-------------------------------------------------------------------------------
# Add command to Imprint HMAC (SCrypto)
#-------------------------------------------------------------------------------

if env['PROC'] == 'scorpion':
  scrypto_sdk_dir = os.environ['TZ_SCRYPTO_BASE_PATH']
  tools_dir = scrypto_sdk_dir + "/tools"
  elf_path = env.subst('${OUT_DIR}/' + 'blgrd.elf')
  run_fips_tools_command = tools_dir + "/run_fips_tools.sh " + elf_path
  env.Append(LINKCOM = " && ")
  env.Append(LINKCOM = run_fips_tools_command)

  target = 'blgrd'
  app_name = 'blgrd
  uuid_name = 'd7e08960-2f75-4045-9a96-6517237b80ff'

#-------------------------------------------------------------------------------
# Add metadata to image
#-------------------------------------------------------------------------------
md = {
  'appName': app_name, # 'UUID': uuid_name, (Only for new chipset)
  'privileges': ['default',
                  'RTICReport',
                  'WhitelistBypass',
                  'OEMBuf',
                  'SPI',
                  'System',
                  'TLMM',
                 ],
  'heapSize': 0x2000
}

deploy_header_files = env.Glob('../inc/*')


blgrd_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()
)

if hasattr(env, 'IMAGE_ALIASES'):
  for image in env['IMAGE_ALIASES']:
    env.Alias(image, blgrd_units)
else:
  env.Alias(aliases, blgrd_units)
