###############################################################################
# HWKM driver
# Copyright (c) 2019 by Qualcomm technologies Inc. All Rights Reserved.
###############################################################################

import os

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

SRCPATH = "${BUILD_ROOT}/ssg/securemsm/trustzone/qsee/services/key_manager/hwkm_hal"
env.VariantDir('${BUILDPATH}', SRCPATH, duplicate=0)

SUPPORTED_TARGETS = [
    "lahaina"
]

KM_HEADER = [
    '${BUILD_ROOT}/ssg/securemsm/trustzone/qsee/services/key_manager/hwkm_hal/inc',
    '${BUILD_ROOT}/ssg/api/securemsm/hwkm',
]
KM_SOURCES = []

if env.OfftargetTesting():
    KM_SOURCES.append('${BUILDPATH}/src/hwkm.c')
    KM_SOURCES.append('${BUILDPATH}/src/hwkm_hal_offtarget.c')
    KM_SOURCES.append('${BUILDPATH}/test/offtarget/hwkm_test.c')
else:
    if env.get('CHIPSET') in SUPPORTED_TARGETS:
        KM_SOURCES.append('${BUILDPATH}/src/hwkm.c')
        KM_SOURCES.append('${BUILDPATH}/src/hwkm_hal.c')
        KM_SOURCES.append('${BUILDPATH}/src/hwkm_initialize.c')
        KM_HEADER.append('${BUILDPATH}/inc/${CHIPSET}')
    else:
        KM_SOURCES.append('${BUILDPATH}/src/hwkm_stubs.c')

CBSP_API = [
    'HAL',
    'SERVICES',
    'KERNEL',
    'SYSTEMDRIVERS',
    'DAL'
]

# This is needed because the clock voting code in hwkm_hal.c depends on tzbsp_clk.h,
# which depends on uclib_env.h, which requires the UCLIB API be added.
UCLIB_API = [
    'UCLIB'
]

env.RequirePublicApi(CBSP_API, area = 'core')
env.RequirePublicApi(UCLIB_API, area = 'uclib')

if 'USES_RCINIT' in env:
    RCINIT_IMGS = ['CTZL64_IMAGE', 'TZOS_IMAGE', 'CTZL_IMAGE']
    env.AddRCInitFunc(
        RCINIT_IMGS,
        {
            'sequence_group'             : 'RCINIT_GROUP_5',
            'init_name'                  : 'hwkm',
            'init_function'              : 'hwkm_initialize_out_of_reset',
            'dependencies'               : [''],
            'policy_optin'               : ['default']
        })

#-------------------------------------------------------------------------------
# Add Libraries to image
#-------------------------------------------------------------------------------
env.Append(CPPPATH = KM_HEADER)
env.AddBinaryObject(['TZOS_IMAGE', 'TZTESTEXEC_IMAGE'], KM_SOURCES)

if env.has_key('UNITTESTING_IMAGE'):
    test_env = env.Clone()
    test_env.InitBuildConfig(True)

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

    test_env.DoBareTest('test_hwkm', sources=KM_SOURCES, includes=KM_HEADER)
