#===============================================================================
#
# vMPM Libs
#
# GENERAL DESCRIPTION
#    build script
#
# Copyright (c) 2009-2014 by QUALCOMM Technologies Inc. (QTI)
# All Rights Reserved.
# QUALCOMM Proprietary/GTDR
#
#-------------------------------------------------------------------------------
#
#  $Header: //components/dev/core.mpss/2.2/mhoover.CORE.MPSS.2.2.8994_Dec11_MPM_FileNameUpdates/power/mpm/build/SConscript#2 $
#  $DateTime: 2013/12/11 16:04:02 $
#  $Author: mhoover $
#  $Change: 4943774 $
#
#===============================================================================
Import('env')
env = env.Clone()

# Create a processor specific macro which can be (ab)used for feature-ization.  
env.Append(CPPDEFINES = [( 'MPM_BASE_NAME', 'SSC' )])

# Max number of MPM interrupts supported on a given target.
env.Append(CPPDEFINES = [('MPM_MAX_NUM_INTS = 96')])

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
SRCPATH = "${BUILD_ROOT}/core/power/mpm/src"

env.VariantDir('${BUILDPATH}', SRCPATH, duplicate=0)

#-------------------------------------------------------------------------------
# Internal depends within CoreBSP
#-------------------------------------------------------------------------------
CBSP_API = [
   'DAL',
   'HAL',
   'DEBUGTOOLS',
   'MPROC',
   'POWER',
   'SERVICES',
   'SYSTEMDRIVERS',
   'KERNEL'
]

env.RequirePublicApi(CBSP_API)
env.RequireRestrictedApi(CBSP_API)

env.PublishPrivateApi('POWER_MPM', [
   "${INC_ROOT}/core/power/mpm/inc",
   "${INC_ROOT}/core/power/mpm/inc/dal",
   "${INC_ROOT}/core/power/mpm/src",
   "${INC_ROOT}/core/power/mpm/src/hal",
   "${INC_ROOT}/core/power/mpm/src/umpm",
])

#-------------------------------------------------------------------------------
# Enable island build support
#-------------------------------------------------------------------------------
## Island MPM support is not needed in SSC, define the flag if it's ever needed
#if 'USES_ISLAND' in env:
#  env.AddUsesFlags('SUPPORT_ISLAND')

#-------------------------------------------------------------------------------
# Island sections
#-------------------------------------------------------------------------------
UMPM_CODE_SECTION_STR = '.text.uMPM'
UMPM_DATA_SECTION_STR = '.data.uMPM'

island_section = [UMPM_CODE_SECTION_STR, UMPM_DATA_SECTION_STR]
island_tag = ['CORE_QDSP6_SW']

if 'SUPPORT_ISLAND' in env:
  env.Append(CPPDEFINES=['UMPM_ISLAND_MODE_ENABLE'])
  env.Append(CPPDEFINES=[
  ('UMPM_ISLAND_CODE_STR = \\\"' + UMPM_CODE_SECTION_STR + '\\\"'),
  ('UMPM_ISLAND_DATA_STR = \\\"' + UMPM_DATA_SECTION_STR + '\\\"')])
  
#-------------------------------------------------------------------------------
# Sources, libraries
#-------------------------------------------------------------------------------
DALMPM_SOURCES = [
   '${BUILDPATH}/dal/Dalmpm.c',
   '${BUILDPATH}/dal/DalmpmFwk.c',
   '${BUILDPATH}/dal/DalmpmInfo.c',
 ]

dalmpm_obj = env.Object(DALMPM_SOURCES)
dalmpm_lib = env.Library('${BUILDPATH}/Dalmpm', dalmpm_obj)


VMPM_SOURCES =  [
   '${BUILDPATH}/vmpm.c',
   '${BUILDPATH}/vmpm_internal.c',
   '${BUILDPATH}/mpmint.c',
   '${BUILDPATH}/vmpm_utils.c',
   '${BUILDPATH}/vmpm_log.c',
   '${BUILDPATH}/os/default/vmpm_os.c',
   '${BUILDPATH}/os/default/vmpm_target.c',
   '${BUILDPATH}/hal/vmpm_HAL.c',
   '${BUILDPATH}/hal/vmpm_HAL_IPC.c',
]

vmpm_obj = env.Object(VMPM_SOURCES)
vmpm_lib = env.Library('${BUILDPATH}/vmpm', vmpm_obj)


UMPM_SOURCES = [
    '${BUILDPATH}/umpm/umpm.c',
    '${BUILDPATH}/umpm/umpm_log.c',
]

if 'SUPPORT_ISLAND' in env:
  umpm_obj = env.Object(UMPM_SOURCES)
  umpm_lib = env.Library('${BUILDPATH}/umpm', umpm_obj)

#-------------------------------------------------------------------------------
# Add device config information
#-------------------------------------------------------------------------------
if 'USES_DEVCFG' in env:
   DEVCFG_IMG = ['DAL_DEVCFG_IMG']
   default_dalmpm_xml = '${BUILD_ROOT}/core/power/mpm/config/dalmpm.xml'
   hb_devcfg_xml = '${BUILD_ROOT}/core/power/mpm/config/MPMDevCfg_HoneyBadger.xml'

   # Providing DevCfg information about our xml file and source code files.
   # Change files or add targets as required.
   env.AddDevCfgInfo(
      DEVCFG_IMG,
      {
       '8996_xml' : [hb_devcfg_xml,
                     default_dalmpm_xml,
                     '${BUILD_ROOT}/core/power/mpm/config/asic/8996/MPMIntDevCfgData.c']
      }
   )

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------
IMG_LIST = ['CORE_QDSP6_SW', 'CBSP_QDSP6_SW_IMAGE']

env.AddLibsToImage(IMG_LIST, [vmpm_lib, dalmpm_lib])

if 'SUPPORT_ISLAND' in env:
  env.AddLibsToImage(IMG_LIST, [umpm_lib])
  env.AddIslandLibrary(island_tag, vmpm_lib, island_section)
  env.AddIslandLibrary(island_tag, dalmpm_lib, island_section)
  env.AddIslandLibrary(island_tag, umpm_lib)

#-------------------------------------------------------------------------------
# Add vmpm_init function to RCINIT
#-------------------------------------------------------------------------------

# rpm driver properties
RCINIT_PROPS = {
  'sequence_group'             : 'RCINIT_GROUP_0',
  'init_name'                  : 'vmpm',
  'init_function'              : 'vmpm_init',
  'dependencies'               : ['GPIOInt', 'dalsys'],
}

if 'USES_RCINIT' in env: 
  env.AddRCInitFunc(IMG_LIST, RCINIT_PROPS)
