#
# (C) COPYRIGHT 2010-2016 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 os
import re
Import('env')

# Clone the environment so changes don't affect other build files
env_ump = env.Clone()

# Source files required for UMP.
ump_src = [Glob('#kernel/drivers/base/ump/src/linux/*.c'), Glob('#kernel/drivers/base/ump/src/common/*.c'), Glob('#kernel/drivers/base/ump/src/imports/*/*.c')]

env_ump.Append( CPPPATH='#kernel/drivers/base/ump/src/' )

if env_ump.GetOption('clean') :
	env_ump.Execute(Action("make clean", '[clean] ump'))
	cmd = env_ump.Command('$STATIC_LIB_PATH/ump.ko', ump_src, [])
else:
	if env['unit'] == '1':
		makeAction=Action("cd ${SOURCE.dir}/.. && make MALI_UNIT_TEST=${unit} PLATFORM=${platform} %s && cp ump.ko $STATIC_LIB_PATH/ump.ko" % env.kernel_get_config_defines(), '$MAKECOMSTR')
	else:
		# The target is ump.ko, built from the source in ump_src, via the action makeAction
		# ump.ko will be copied to $STATIC_LIB_PATH after being built by the standard Linux
		# kernel build system, after which it can be installed to the directory specified if
		# "libs_install" is set; this is done by LibTarget.
		makeAction=Action("cd ${SOURCE.dir}/.. && make PLATFORM=${platform} %s && cp ump.ko $STATIC_LIB_PATH/ump.ko" % env.kernel_get_config_defines(), '$MAKECOMSTR')
	cmd = env_ump.Command('$STATIC_LIB_PATH/ump.ko', ump_src, [makeAction])

# Add a dependency on kds.ko only when the build is not Android
# Android uses sync_pt instead of Midgard KDS to achieve KDS functionality
# Only necessary when KDS is not built into the kernel.
#
if env['os'] != 'android':
	linux_config_file = os.path.normpath(os.environ['KDIR']) + '/.config'
	search_term = '^[\ ]*CONFIG_KDS[\ ]*=[\ ]*y'
	kds_in_kernel = 0
	for line in open(linux_config_file, 'r'):
		if re.search(search_term, line):
			# KDS in kernel.
			kds_in_kernel = 1
	if not kds_in_kernel:
		env.Depends('$STATIC_LIB_PATH/ump.ko', '$STATIC_LIB_PATH/kds.ko')

env_ump.KernelObjTarget('ump', cmd)

SConscript( 'imports/sconscript' )

