#
# (C) COPYRIGHT 2010-2014, 2016-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' )

if Glob('bus_logger/sconscript'):
	if env['buslog'] == '1':
		SConscript('bus_logger/sconscript')

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

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

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

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

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

if Glob('smc_protected_mode_switcher/sconscript'):
	if env['platform_config'] == 'juno_soc':
		SConscript('smc_protected_mode_switcher/sconscript')

