#
# (C) COPYRIGHT 2010-2017 ARM Limited. All rights reserved.
#
# This program is free software and is provided to you under the terms of the
# GNU General Public License version 2 as published by the Free Software
# Foundation, and any use by you of this program is subject to the terms
# of such GNU licence.
#
# A copy of the licence is included with the program, and can also be obtained
# from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA  02110-1301, USA.
#
#


import sys
Import('env')

SConscript( 'tests/sconscript' )

mock_test = 0

# Source files required for kbase.
kbase_src = [
	Glob('*.c'),
	Glob('backend/*/*.c'),
	Glob('internal/*/*.c'),
	Glob('ipa/*.c'),
	Glob('platform/%s/*.c' % env['platform_config']),
]

if env['platform_config']=='juno_soc':
	kbase_src += [Glob('platform/devicetree/*.c')]
else:
	kbase_src += [Glob('platform/%s/*.c' % env['platform_config'])]

if Glob('#kernel/drivers/gpu/arm/midgard/tests/internal/src/mock') and env['unit'] == '1':
	kbase_src += [Glob('#kernel/drivers/gpu/arm/midgard/tests/internal/src/mock/*.c')]
	mock_test = 1

make_args = env.kernel_get_config_defines(ret_list = True) + [
	'PLATFORM=%s' % env['platform'],
	'MALI_ERROR_INJECT_ON=%s' % env['error_inject'],
	'MALI_KERNEL_TEST_API=%s' % env['debug'],
	'MALI_UNIT_TEST=%s' % env['unit'],
	'MALI_RELEASE_NAME=%s' % env['mali_release_name'],
	'MALI_MOCK_TEST=%s' % mock_test,
	'MALI_CUSTOMER_RELEASE=%s' % env['release'],
	'MALI_COVERAGE=%s' % env['coverage'],
]

kbase = env.BuildKernelModule('$STATIC_LIB_PATH/mali_kbase.ko', kbase_src,
                              make_args = make_args)

# need Module.symvers from ump.ko build
if int(env['ump']) == 1:
	env.Depends(kbase, '$STATIC_LIB_PATH/ump.ko')

if 'smc_protected_mode_switcher' in env:
	env.Depends('$STATIC_LIB_PATH/mali_kbase.ko', '$STATIC_LIB_PATH/smc_protected_mode_switcher.ko')

env.KernelObjTarget('kbase', kbase)

env.AppendUnique(BASE=['cutils_linked_list'])
