#===============================================================================
#
# ISLAND MGR Libs
#
# GENERAL DESCRIPTION
#    build script
#
# Copyright (c) 2014,2018 by Qualcomm Technologies, Inc.
# All Rights Reserved.
# QUALCOMM Proprietary/GTDR
#
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
#                      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
# --------   ---     ---------------------------------------------------------
# 04/10/2014 balac     created 
#===============================================================================
Import('env')
env = env.Clone()

#Do not compile if target does not support island mode
if 'USES_ISLAND' not in env and 'USES_ISLAND_FEATURE' not in env and 'USES_MEMSEG' not in env and 'USES_MEMSEG_BUILDER' not in env: 
  env.PrintWarning('Island manager is not available for this target.')
  Return()

#env.Replace(HEXAGON_WARN = "-Wpointer-arith -Wno-missing-braces")

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
SRCPATH = "${COREBSP_ROOT}/kernel/island_mgr/adsp"


env.VariantDir('${BUILDPATH}', SRCPATH, duplicate=0)
ISLAND_MGR_ROOT_TAGS = ['CORE_ADSP_ROOT', 'CORE_SLPI_ADSP_ROOT'] 
ISLAND_MGR_USER_TAGS = ['CORE_ADSP_USER', 'CORE_SSC_ADSP_USER']

#-------------------------------------------------------------------------------
# External depends within CoreBSP
#-------------------------------------------------------------------------------

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

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

if env['CHIPSET'] in ['saipan', 'bitra']:
   env.Append(CPPDEFINES = "ISLAND_MGR_SENSORS_IN_ADSP")
   if 'USES_ISLAND_MGR_PROXY_VOTING_DISABLED' not in env:
      env.Append(CPPDEFINES = "ISLAND_MGR_PROXY_VOTING")

#-------------------------------------------------------------------------------
# Sources, libraries
#-------------------------------------------------------------------------------
ISLAND_MGR_C_SOURCES_ROOT = [
   '${BUILDPATH}/config/${CHIPSET}/island_mgr.c',
   '${BUILDPATH}/src/island_mgr_drv.c',
   '${BUILDPATH}/src/island_mgr_qdi.c',
  
]

ISLAND_MGR_ISLAND_C_SOURCES_ROOT = [
   '${BUILDPATH}/src/island_mgr_island.c',
]

ISLAND_MGR_C_SOURCES_USER = [
   '${BUILDPATH}/src/island_mgr_client.c',
]
island_mgr_island_root = env.AddLibrary(ISLAND_MGR_ROOT_TAGS, '${BUILDPATH}/island_mgr_island', ISLAND_MGR_ISLAND_C_SOURCES_ROOT)
island_mgr_main_root = env.AddLibrary(ISLAND_MGR_ROOT_TAGS, '${BUILDPATH}/island_mgr_main', ISLAND_MGR_C_SOURCES_ROOT)
island_mgr_main_user = env.AddLibrary(ISLAND_MGR_USER_TAGS, '${BUILDPATH}/island_mgr_main', ISLAND_MGR_C_SOURCES_USER)

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------

if 'USES_MEMSEG' in env:
   env.TagLibraryForMemorySegment(ISLAND_MGR_ROOT_TAGS, 'common', island_mgr_island_root)
elif 'USES_ISLAND' in env:
   env.AddIslandLibrary(ISLAND_MGR_ROOT_TAGS, island_mgr_island_root)

if 'USES_RCINIT' in env and ('USES_ISLAND' in env or 'USES_MEMSEG' in env):
   env.AddRCInitFunc(         # Code Fragment in TMC: YES
    ISLAND_MGR_ROOT_TAGS,         # define TMC_RCINIT_INIT_TIMER_TASK_INIT
    {
      'sequence_group'             : 'RCINIT_GROUP_1',             # required
      'init_name'                  : 'island_mgr',                 # required
      'init_function'              : 'island_mgr_init',            # required
    })
if 'USES_RCINIT' in env and ('USES_ISLAND' in env or 'USES_MEMSEG' in env):
   env.AddRCInitFunc(         # Code Fragment in TMC: YES
    ISLAND_MGR_USER_TAGS,         # define TMC_RCINIT_INIT_TIMER_TASK_INIT
    {
      'sequence_group'             : 'RCINIT_GROUP_1',             # required
      'init_name'                  : 'island_mgr_client',          # required
      'init_function'              : 'island_mgr_client_init',     # required
    })
