#
# (C) COPYRIGHT 2010-2013, 2015-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 shutil
Import('env')

# Generate a build environment for the integration tests, taking a copy of the top-level build environment 
# (env) as a start.
drm_env = env.Clone()

# Xorg uses C++ style comments and 'inline' keyword
if '-std=c89' in drm_env['CFLAGS']:
	drm_env['CFLAGS'].remove('-std=c89')

# X11 generates a lot of warnings
if '-Werror' in drm_env['CCFLAGS']:
	drm_env['CCFLAGS'].remove('-Werror')

#remove the 'lib'prefix
drm_env['LIBPREFIX'] = ''

src = Glob('*.c')

if drm_env.GetOption('clean') :
	drm_env.Execute(Action("make clean", 'clean [pl111]'))
	cmd = drm_env.Command('$STATIC_LIB_PATH/mali_drm.ko', src, [])
else:
	# The target is mali_drm.ko, built from the source in pl111_drm/pl111, via the action makeAction
	# mali_drm.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 MALI_DEBUG=${debug} && cp pl111_drm.ko $STATIC_LIB_PATH/mali_drm.ko", '$MAKECOMSTR')
	cmd = drm_env.Command('$STATIC_LIB_PATH/mali_drm.ko', src, [makeAction])

# need Module.symvers from drm.ko
#drm_env.Depends('$STATIC_LIB_PATH/pl111_drm.ko', '$STATIC_LIB_PATH/drm.ko')

drm_env.KernelObjTarget('x11', cmd)

