#===============================================================================
#
# Kernel Protect HYP
#
# GENERAL DESCRIPTION
#    build script
#
# Copyright (c) 2014 Qualcomm Technologies, Inc.
# All Rights Reserved.
# Confidential and Proprietary - Qualcomm Technologies, Inc.
#
#-------------------------------------------------------------------------------
#
#  $Header:
#  $DateTime: 2020/02/21 05:51:13 $
#  $Author: pwbldsvc $
#  $Change: 22668945 $
#                      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
# --------   ---     ---------------------------------------------------------
#===============================================================================

import os

Import('env')
env = env.Clone()

#-------------------------------------------------------------------------------
# Publish Private APIs
#-------------------------------------------------------------------------------

env.PublishPrivateApi('KP', [
   '${BUILD_ROOT}/ssg/securemsm/kernelprotect/inc',
   '${BUILD_ROOT}/ssg/securemsm/kernelprotect/linux_test/inc',
   '${BUILD_ROOT}/ssg/securemsm/kernelprotect/tzt_test/inc'
])

#-------------------------------------------------------------------------------
# Internal dependencies within CoreBSP
#-------------------------------------------------------------------------------

env.RequirePublicApi([
   'SERVICES',           #< comdef.h
   'KERNEL',
   'KERNEL_API',
   'DAL',
   'SYSTEMDRIVERS',      #< busywait.h
], area='core')

env.RequirePublicApi([
   'AC',
   'SECUREMSM',
   'KP',
   'SSGPLATFORM',             #< tzbsp_sys.h
], area='ssg')

env.RequireRestrictedApi([
   'AC',
   'SECUREMSM',
   'KP',
])

env.RequirePrivateApi([
   'AC',
   'SECUREMSM',
   'KP',
   'CEML',
])

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
SRCPATH = "${BUILD_ROOT}/ssg/securemsm/kernelprotect/"

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

#-------------------------------------------------------------------------------
# Sources, libraries
#-------------------------------------------------------------------------------

if env['CHIPSET'] in ['sdm855', 'sdm845', 'sdm670' , 'qcs405', 'sm6150' ,'sm7150','nicobar','mdm9205','sm8250','saipan','kamorta','bitra']:
  KP_SOURCES = [
    '${BUILDPATH}/src/kp.c',
    '${BUILDPATH}/src/kp_pt_protect.c',
    '${BUILDPATH}/src/kp_smc.c',
    '${BUILDPATH}/src/kp_report.c',
    '${BUILDPATH}/src/kp_util.s',
    '${BUILDPATH}/src/kp_process_mp.c',
    '${BUILDPATH}/src/kp_protect_mp.c',
    '${BUILDPATH}/src/kp_validate_mp.c',
    '${BUILDPATH}/tzt_test/src/kp_tzt.c',
  ]
  KP_SYSCALL_SOURCES = [
    '${BUILDPATH}/src/kp_smc.c',
  ]
else:
  KP_SOURCES = [
    '${BUILDPATH}/src/kp_stub.c'
  ]

#-------------------------------------------------------------------------------
# Device config
#-------------------------------------------------------------------------------

if os.path.isfile(env.subst('../cfg/${CHIPSET}/kp_config.xml')):
  env.Replace(KP_CHIPSET = '${CHIPSET}')
else:
  env.Replace(KP_CHIPSET = 'stubs')

#KP_CONFIG_FILE_XML = env.GlobFiles('${BUILD_ROOT}/ssg/securemsm/kernelprotect/cfg/kp_config.xml', posix=True)
#KP_CONFIG_FILE_XML = ', '.join(KP_CONFIG_FILE_XML) #convert list to string
if 'USES_DEVCFG' in env:
  DEVCFG_IMG = ['DAL_DEVCFG_HYP_IMG']
  env.AddDevCfgInfo(DEVCFG_IMG,
  {
    'devcfg_xml' : ['${BUILD_ROOT}/ssg/securemsm/kernelprotect/cfg/${KP_CHIPSET}/kp_config.xml']
  })

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

env.AddBinaryLibrary(['HYPERVISOR_IMAGE'],
  '${BUILDPATH}/KP_HYP',
  KP_SOURCES)

if env['CHIPSET'] in ['sdm845', 'sdm670', 'sm6150','sm7150','nicobar','saipan','kamorta','bitra']:
  env.AddBinaryObject(['HYPERVISOR_IMAGE'], KP_SYSCALL_SOURCES)
