#===============================================================================
#
# AC Libs
#
# GENERAL DESCRIPTION
#    build script
#
# Copyright (c) 2014-2017, 2021 by Qualcomm Technologies, Inc.
# All Rights Reserved.
# QUALCOMM Proprietary/GTDR
#
#-------------------------------------------------------------------------------
#
#  $Header: //components/rel/ssg.tz/1.10/securemsm/accesscontrol/build/SConscript#2 $
#  $DateTime: 2021/07/29 09:41:45 $
#  $Author: pwbldsvc $
#  $Change: 32102375 $
#                      EDIT HISTORY FOR FILE
#
#  This section contains comments describing changes made to the module.
#  Notice that changes are listed in reverse chronological order.
#
# when       who     what, where, why
# --------   ---     ---------------------------------------------------------
#  2/16/17           move xbl_sec from core to ssg
# 04/03/15   rs      Moved SMEM partition protections to Hypervisor
# 02/09/12   PS      Initial release
#===============================================================================
import os
import re
Import('env')

#-------------------------------------------------------------------------------
# Load sub scripts
#-------------------------------------------------------------------------------
env.LoadSoftwareUnits()

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
env = env.Clone()

# Additional defines
env.Append(CPPDEFINES = ["FEATURE_LIBRARY_ONLY"])

if env['MSM_ID'] not in ['405','nicobar','9205','kamorta','agatti']:
    env.Append(CCFLAGS = ' -Wall')
env.Append(CCFLAGS = ' -Wno-missing-braces -Werror')

if env['MSM_ID'] in ['405']:
    env.Append(CPPDEFINES = "FEATURE_NO_MODEM_TARGET")

if env['MSM_ID'] in ['405','24', '55', '9205']:
    env.Append(CCFLAGS = " -DCPZ_CLEAR_IN_XBL_SEC_DISABLE ")

if env['MSM_ID'] in ['lahaina','bitra','agatti']:
    env.Append(CPPDEFINES = "-DXPU_SILENT_LOG_ENABLED_BUFFER_SIZE = 64")
else:
    env.Append(CPPDEFINES = "-DXPU_SILENT_LOG_ENABLED_BUFFER_SIZE = 0")
SRCPATH = "../../accesscontrol"
CBSP_APIS = []

if env['MSM_ID'] in ['55', '24', '6150', '670', '845']:
    env.Append(CCFLAGS = " -DAC_NO_XPU_PROFILE_SUPPORT ")

if env.get('TZ_EXEC_MODE ') == 'aarch32':
    env.Append(CPPDEFINES = "FEATURE_32_BIT_ARCH")
else:
    env.Append(CPPDEFINES = "FEATURE_64_BIT_ARCH")

env.VariantDir('${BUILDPATH}', SRCPATH, duplicate=0)
IMAGES_HYP = ['HYPERVISOR_IMAGE']
IMAGES_QHEEBSP = ['QHEEBSP_IMAGE']
IMAGES_TZ = ['TZOS_IMAGE']
IMAGES_XBLSEC = ['XBL_SEC_IMAGE']
IMAGES_QCSEC = ['QC_SEC_IMAGE']

excel_parse_script_tool = '${BUILD_ROOT}/ssg/securemsm/accesscontrol/tools/deviceinfoconfig_gen.py'
env.LoadToolScript(excel_parse_script_tool)

bRunUnitTests = False

if env.has_key('XBL_SEC_IMAGE'):
    env.Replace(AC_IMG = 'tz')
    env.Append(CFLAGS = " -ffunction-sections ")
    # Uncomment the following line to disable XPU
    #env.Append(CCFLAGS = " -DXPU_DISABLE ")
elif env.has_key('QC_SEC_IMAGE'):
    env.Replace(AC_IMG = 'tz')
    env.Append(CFLAGS = " -ffunction-sections ")
elif env.has_key('TZOS_IMAGE'):
    env.Replace(AC_IMG = 'tz')
elif env.has_key('HYPERVISOR_IMAGE') or env.has_key('QHEEBSP_IMAGE') or env.has_key('DAL_DEVCFG_OEM_IMG'):
    env.Replace(AC_IMG = 'hyp')
elif env.has_key('UNITTESTING_IMAGE'):
    bRunUnitTests = True
    if env['MSM_ID'] in ['405','9205']:  
        env.Replace(XPU_VERSION = 'v2')
        env.Replace(XPU_VERSION_NAME = 'xpu2')
    else:
        env.Replace(XPU_VERSION = 'v3')
        env.Replace(XPU_VERSION_NAME = 'xpu3')
else:
    Return();

if env.has_key('XBL_SEC_IMAGE'):
    env.Append(CPPDEFINES = '-DXBL_SEC_AC_COMPILATION')
     
if env.has_key('HYPERVISOR_IMAGE') or env.has_key('QHEEBSP_IMAGE'):
    env.Append(CPPDEFINES = '-DAC_HYP_LOG')
     
if 'tzbsp_with_test_svc' in env:
  if env['tzbsp_with_test_svc'] == 1:
      print "With Test is turned on"
      env.Append(CCFLAGS = " -DTZBSP_WITH_TEST_SVC ")

if 'tzbsp_with_mmu' in env:
  if env['tzbsp_with_mmu'] == 1:
      print "With MMU is turned on"
      env.Append(CCFLAGS = " -DTZBSP_WITH_MMU ")

# This is to support TZ standalone execution only during pre-sil bringup.
# uAddr stub needs to be unused address range of size MEMORY_OWNERSHIP_TABLE_BUFFER_SIZE + PARITY_BUFFER_SIZE
supported_targets = ['8998', '630', '660', '845', '670', '855', '1000', '24','405', '6150', '7150','nicobar','9205','kamorta','agatti']
if 'tzbsp_standalone' in env:
  if env['tzbsp_standalone'] == 1:
    if env['MSM_ID'] in supported_targets:
      print "TZ standalone execution is being built"
      env.Append(CPPDEFINES = ['-DUADDR_CHIPSET_STUB=0x85600000'])
    else:
      raise RuntimeError, "TZ standalone error in AC: uAddr has no value!! Fix it in Sconscript."

if env['TARGET_FAMILY'] in ['hoya', 'bruin']:
	env.Replace(AC_FAMILY_ID = 'honeybadger')
elif env['TARGET_FAMILY'] in ['bear']:
	env.Replace(AC_FAMILY_ID = 'bear')
else:
   env.Replace(AC_FAMILY_ID = '${TARGET_FAMILY}')

if os.path.exists(env.subst("../../accesscontrol/src/tz/${AC_FAMILY_ID}")) and \
   os.path.exists(env.subst("../../accesscontrol/cfg/${MSM_ID}")):
   env.PrintWarning("AC Build debug... using TARGET_FAMILY specific files")
else:
   env.Replace(AC_FAMILY_ID = 'stubs')
   env.PrintWarning("No AC for the target yet... using stubs.")


build_cfg_file = ''
if os.path.isfile(env.subst("ac_def_${MSM_ID}.cfg")):
	build_cfg_file = env.subst("ac_def_${MSM_ID}.cfg")

#-------------------------------------------------------------------------------
# Publish Private APIs
#-------------------------------------------------------------------------------
env.PublishPrivateApi('AC', [
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/smmu',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/${XPU_VERSION}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/common/${AC_FAMILY_ID}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/common',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/hyp',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/tz/${AC_FAMILY_ID}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/tz',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/api',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/cfg/${AC_MSM_ID}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/cfg/debug',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/cfg/${AC_MSM_ID}/${AC_IMG}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/vmidmt'
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/drivers/${XPU_VERSION_NAME}/hal/inc',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/drivers/${XPU_VERSION_NAME}/hal/inc/${AC_MSM_ID}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/drivers/${XPU_VERSION_NAME}/hal/src',
])

env.PublishPrivateApi('AC_WITH_TEST', [
   '${INC_ROOT}/ssg/securemsm/accesscontrol/test/inc',
])

env.PublishProtectedApi('AC', [
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/smmu',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/${XPU_VERSION}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/api',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/cfg/${AC_MSM_ID}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/cfg/${AC_MSM_ID}/${AC_IMG}',
   '${INC_ROOT}/ssg/securemsm/accesscontrol/src/components/vmidmt/drivers/hal/inc/${MSM_ID}',
])

#-------------------------------------------------------------------------------
# Internal depends within CoreBSP
#-------------------------------------------------------------------------------
CBSP_APIS += [
   'BUSES',
   'HAL',
   'DAL',
   'MPROC',
   'SYSTEMDRIVERS',
   'PMIC',
   'SERVICES',
   'KERNEL',
   'KERNEL_API',
   'SYSTEMDEBUG',
   'PERIPHERALS',
]

env.RequirePublicApi(CBSP_APIS, area='core')

SSG_API = [
   'AC',
   'XBL_SEC',
   'SECUREMSM',
   'MINK',
   'KERNEL',
   'TZCHIPSET',
   'AOP',
   'SSGPLATFORM',
   'QSEE',
   'PIL',
   'TZSECAPP',
   'SECUTILS',
   'SECUREFUSES',
]

if 'hyp_with_test' in env and env['hyp_with_test'] == 1:
  SSG_API.append('AC_WITH_TEST')

env.RequirePublicApi(SSG_API, area='ssg')
env.RequireRestrictedApi(SSG_API)

#-------------------------------------------------------------------------------
# HYP Sources, libraries
#-------------------------------------------------------------------------------
AC_SOURCES_RAW_HYP = env.GlobFiles('../../accesscontrol/src/hyp/AccessControlHyp.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/src/hyp/AccessControlRules.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/src/components/smmu/*.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/src/hyp/${AC_MSM_ID}/*.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/*.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/hyp/*.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/src/common/${AC_FAMILY_ID}/*.c', posix=True)
AC_SOURCES_RAW_HYP += env.GlobFiles('../../accesscontrol/src/common/*.c', posix=True)
AC_SOURCES_RAW_HYP = [path.replace(SRCPATH, '${BUILDPATH}') for path in AC_SOURCES_RAW_HYP]

#AC_SOURCES_HYP_SYSCALL = env.GlobFiles('../../accesscontrol/src/hyp/AccessControlSMC.c', posix=True)
#AC_SOURCES_HYP_SYSCALL = [path.replace(SRCPATH, '${BUILDPATH}') for path in AC_SOURCES_HYP_SYSCALL]
AC_SOURCES_HYP_SYSCALL = ['${BUILDPATH}/src/hyp/AccessControlSMC.c']
AC_SOURCES_HYP_SYSCALL += ['${BUILDPATH}/src/hyp/AccessControlSHM.c']
AC_SOURCES_HYP_SYSCALL += ['${BUILDPATH}/test/hyp/ACHypLockUnlockTestHelper.c']
AC_SOURCES_HYP_SYSCALL += ['${BUILDPATH}/test/hyp/ACHypXTests.c']

#-------------------------------------------------------------------------------
# TZ Sources, libraries
#-------------------------------------------------------------------------------
AC_SOURCES_RAW_TZ = env.GlobFiles('../../accesscontrol/src/tz/AccessControlTz.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/common/ACMemProtect.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/tz/${AC_MSM_ID}/AccessControlTzTarget.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/tz/${AC_FAMILY_ID}/*.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/common/${AC_FAMILY_ID}/*.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/common/*.c', posix=True)

if env['MSM_ID'] in ['9205']:
    env.Append(CPPDEFINES = "NAND_MPU_HW_BUG")

if env["CHIPSET"] in ["sdx24", "sdx55" , "mdm9205" , "qcs405" ]:
    AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/tz/AccessControlNand.c', posix=True)
else:
    AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/tz/stubs/AccessControlNand.c', posix=True)

if os.path.exists(env.subst("../../accesscontrol/cfg/${MSM_ID}/tz/ACVmidmtStaticConfig.c")) and \
      os.path.exists(env.subst("../../accesscontrol/cfg/${MSM_ID}/tz/ACVmidmtTargetInfo.c")):
  AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/components/vmidmt/ACVmidmt.c', posix=True)
else :
  AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/components/vmidmt/ACVmidmt_stubs.c', posix=True)

#AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/components/vmidmt/ACVmidmt.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/tz/*.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/*.c', posix=True)
AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/components/xpu/${XPU_VERSION}/*.c', posix=True)

if env['MSM_ID'] in ['nicobar']:
  AC_SOURCES_XPU_TZ = env.GlobFiles('../../accesscontrol/src/components/xpu/v3/ACMpu.c', posix=True)
  AC_SOURCES_RAW_TZ = list(set(AC_SOURCES_RAW_TZ) - set(AC_SOURCES_XPU_TZ))
  AC_SOURCES_RAW_TZ += env.GlobFiles('../../accesscontrol/src/tz/${AC_MSM_ID}/ACMpu.c', posix=True)

AC_SOURCES_RAW_TZ = [path.replace(SRCPATH, '${BUILDPATH}') for path in AC_SOURCES_RAW_TZ]

#-------------------------------------------------------------------------------
# xBL Sec Sources, libraries
#-------------------------------------------------------------------------------
AC_SOURCES_RAW_XBLSEC = env.GlobFiles('../../accesscontrol/src/xbl_sec/AccessControlXblSec.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/src/xbl_sec/${AC_MSM_ID}/AccessControlXblSecTarget.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/src/components/xpu/${XPU_VERSION}/ACXpu.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/src/components/xpu/${XPU_VERSION}/ACxPUSupport.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/src/*.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/src/common/AccessControl.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/xbl_sec/*.c', posix=True)
AC_SOURCES_RAW_XBLSEC += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/ACXpuTargetInfoShared.c', posix=True)
AC_SOURCES_RAW_XBLSEC = [path.replace(SRCPATH, '${BUILDPATH}') for path in AC_SOURCES_RAW_XBLSEC]

#-------------------------------------------------------------------------------
# QC Sec Sources, libraries
#-------------------------------------------------------------------------------
AC_SOURCES_RAW_QCSEC = env.GlobFiles('../../accesscontrol/src/qc_sec/${AC_MSM_ID}/AccessControlQCSec.c', posix=True)
AC_SOURCES_RAW_QCSEC = [path.replace(SRCPATH, '${BUILDPATH}') for path in AC_SOURCES_RAW_QCSEC]


#-------------------------------------------------------------------------------
# XML files
#-------------------------------------------------------------------------------
#SPMI_CONFIG_FILE_XML = env.GlobFiles('../../spmi/config/${SPMI_MSM_ID}/*${SPMI_MSM_ID}*.xml', posix=True)
#SPMI_CONFIG_FILE_XML = ', '.join(SPMI_CONFIG_FILE_XML) #convert list to string

#if SPMI_CONFIG_FILE_XML: #try including XML only if it is present in the build
#   if 'USES_DEVCFG' in env:
#      env.AddDevCfgInfo(['DAL_DEVCFG_IMG'],
#      {
#          'devcfg_xml'    : SPMI_CONFIG_FILE_XML
#      })

#-------------------------------------------------------------------------------
# Bear targets don't have Hyp.
#-------------------------------------------------------------------------------
SMMU_CONFIG = 'smmu_config.xml'
XPU_CONFIG = 'xpu_config.xml'
if 'USES_NOAC' in env:
  SMMU_CONFIG = 'smmu_config_noac.xml'
  XPU_CONFIG = 'xpu_config_noac.xml'

if 'USES_NOXPU' in env:
  XPU_CONFIG = 'xpu_config_noac.xml'

DEVCFG_QSEE_IMG = ['DAL_DEVCFG_OEM_QSEE_IMG']
DEVCFG_HYP_IMG = ['DAL_DEVCFG_OEM_HYP_IMG']

if env['TARGET_FAMILY'] != 'bear':
  SMMU_CONFIG_FILE_XML = env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/hyp/'+SMMU_CONFIG, posix=True)
  SMMU_CONFIG_FILE_XML = ', '.join(SMMU_CONFIG_FILE_XML) #convert list to string
  SMMU_AUTO_CONFIG_FILE_XML = ', '.join(env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/hyp/smmu_config_auto.xml', posix=True))
  if 'USES_DEVCFG' in env:
    env.AddDevCfgInfo(DEVCFG_HYP_IMG,
    {
       'devcfg_xml' : [SMMU_CONFIG_FILE_XML]
    })
  if 'USES_DEVCFG_AUTO' in env: 
	env.AddDevCfgInfo(DEVCFG_HYP_IMG,
	{
		'devcfg_xml' : [SMMU_AUTO_CONFIG_FILE_XML]
	})

XPU_CONFIG_FILE_XML = env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/tz/'+XPU_CONFIG, posix=True)
XPU_CONFIG_FILE_XML = ', '.join(XPU_CONFIG_FILE_XML) #convert list to string
OEM_REGN_CONFIG_XML_FILE = ', '.join(env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/ac_oem_regions_config.xml', posix=True))
OEM_NAND_CONFIG_XML_FILE = ', '.join(env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/nand_oem_config.xml', posix=True))
XPU_AC_HEAP_CONFIG_XML  = ', '.join(env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/tz/ac_heap_config.xml', posix=True))  

if 'USES_DEVCFG' in env:
  env.AddDevCfgInfo(DEVCFG_QSEE_IMG,
  {
    'devcfg_xml' : [XPU_CONFIG_FILE_XML, OEM_REGN_CONFIG_XML_FILE, OEM_NAND_CONFIG_XML_FILE, XPU_AC_HEAP_CONFIG_XML]
  })

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------
env.AddBinaryLibrary(IMAGES_TZ, '${BUILDPATH}/AC', AC_SOURCES_RAW_TZ)

# For some reason AddBinaryLibrary causes HYP syscalls defined in code to not
# get linked into the HYP_IMAGE (KEEP attribute are applied on object files)
if env.get('TZ_EXEC_MODE') == 'aarch64':
    env.AddBinaryObject(IMAGES_HYP, AC_SOURCES_HYP_SYSCALL)
    env.AddBinaryLibrary(IMAGES_HYP, '${BUILDPATH}/AC', AC_SOURCES_RAW_HYP)
    env.AddBinaryObject(IMAGES_QHEEBSP, [AC_SOURCES_HYP_SYSCALL, AC_SOURCES_RAW_HYP])

env.AddBinaryLibrary(IMAGES_XBLSEC, '${BUILDPATH}/AC', AC_SOURCES_RAW_XBLSEC)
env.AddBinaryLibrary(IMAGES_QCSEC, '${BUILDPATH}/AC', AC_SOURCES_RAW_QCSEC)

if env.has_key('XPU_VERSION') and env['XPU_VERSION'] in ['v3']:
  env.Deploy(['SConscript',
            '../src/components/xpu/v3/ACHALxpu.h',
            '../tools/deviceinfoconfig_gen.py',
           ])
else:
  env.Deploy(['SConscript',
            '../src/components/xpu/v2/ACHALxpu.h',
            '../tools/deviceinfoconfig_gen.py',
           ])

if bRunUnitTests:
  test_env = env.Clone()
  test_env.InitBuildConfig(True)

  test_env.Append(CPPPATH=['${BUILD_ROOT}/ssg/bsp/unittests/'])
  test_env.Append(CCFLAGS = '-Wall')

  test_env.RequirePublicApi(CBSP_APIS, area='core')
  test_env.RequirePublicApi(SSG_API, area='ssg')
  test_env.RequireRestrictedApi(SSG_API)
  
  # Unit test targets
  #-------------------------------------------------------------------------------
  test_include_paths = [
                          '${BUILD_ROOT}/core/api/services/',
                          '${BUILD_ROOT}/ssg/securemsm/trustzone/qsee/mink/include',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/api',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/src/common',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/test/off_target/include',
                          '${BUILD_ROOT}/core/kernel/smmu/ACv3.1/common/inc/',
                          '${BUILD_ROOT}/ssg/securemsm/trustzone/qsee/include',
                          '${BUILD_ROOT}/core/kernel/mmu/inc/',
                          '${BUILD_ROOT}/core/api/dal/',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/src/components/vmidmt/drivers/hal/inc/',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/src/components/vmidmt/drivers/hal/inc/${MSM_ID}/',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/${XPU_VERSION}/',
                          '${BUILD_ROOT}/ssg/securemsm/accesscontrol/src/components/xpu/drivers/xpu3/hal/inc/',
                          '${BUILD_ROOT}/ssg/api/securemsm/util/',
                          '${BUILD_ROOT}/ssg/api/securemsm/platform/arch/legacy/',
                          '${BUILD_ROOT}/ssg/api/securemsm/platform/arch/',
                          '${BUILD_ROOT}/ssg/api/securemsm/platform/utils/',
                          '${BUILD_ROOT}/ssg/securemsm/platform/init/cfg/${CHIPSET}/common/',
                          '${BUILD_ROOT}/ssg/api/securemsm/platform/services/',
                          
                       ]
  test_env.DoBareTest('test_ACMemProtect_bare',
                     [
                       '${BUILDPATH}/src/common/ACMemProtect.c',
                       '${BUILDPATH}/test/off_target/src/ACMemProtectTest.c',
                     ],
                     includes = test_include_paths
                    )


if env.has_key('AC_IMG') and ( env['AC_IMG'] == 'hyp' or env['AC_IMG'] == 'tz' ) and \
      env.has_key('AC_MSM_ID') and env['AC_MSM_ID'] not in [ 'stubs', '24', '405','nicobar','9205','kamorta','agatti']:

  file_integrity_checker_path = env.subst('${BUILD_ROOT}/ssg/securemsm/accesscontrol/tools/integrity_check/file_integrity_check.py')
  env.LoadToolScript(file_integrity_checker_path)

  AC_INTEGRITY_CHECK_SOURCES = env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/tz/ACApuRpuIOMapping.c');

  AC_INTEGRITY_CHECK_SOURCES +=  env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/hyp/ACAssignRulesInfo.c');
  AC_INTEGRITY_CHECK_SOURCES += env.GlobFiles('../../accesscontrol/cfg/${AC_MSM_ID}/hyp/ACSHMRulesInfo.c');

  env.CheckFileIntegrity(AC_INTEGRITY_CHECK_SOURCES)

env.Deploy(['../tools/integrity_check/file_integrity_check.py'])
