#
# (C) COPYRIGHT 2010-2011, 2013, 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you can access it online at
# http://www.gnu.org/licenses/gpl-2.0.html.
#
# SPDX-License-Identifier: GPL-2.0
#
#

Import ('env')

kutf_env = env.Clone()
kutf_env.Append(CPPPATH = '#kernel/drivers/gpu/arm/midgard/tests/include')
Export('kutf_env')

if Glob('internal/sconscript'):
	SConscript('internal/sconscript')

if kutf_env['debug'] == '1':
	SConscript('kutf/sconscript')
	SConscript('mali_kutf_irq_test/sconscript')

	if Glob('kutf_test/sconscript'):
		SConscript('kutf_test/sconscript')

	if Glob('kutf_test_runner/sconscript'):
		SConscript('kutf_test_runner/sconscript')

if env['unit'] == '1':
	SConscript('mali_kutf_ipa_test/sconscript')
	SConscript('mali_kutf_ipa_unit_test/sconscript')
	SConscript('mali_kutf_vinstr_test/sconscript')
