188 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
#######################################################################
 | 
						|
# Top-level SConstruct
 | 
						|
#
 | 
						|
# For example, invoke scons as
 | 
						|
#
 | 
						|
#   scons build=debug llvm=yes machine=x86
 | 
						|
#
 | 
						|
# to set configuration variables. Or you can write those options to a file
 | 
						|
# named config.py:
 | 
						|
#
 | 
						|
#   # config.py
 | 
						|
#   build='debug'
 | 
						|
#   llvm=True
 | 
						|
#   machine='x86'
 | 
						|
#
 | 
						|
# Invoke
 | 
						|
#
 | 
						|
#   scons -h
 | 
						|
#
 | 
						|
# to get the full list of options. See scons manpage for more info.
 | 
						|
#
 | 
						|
 | 
						|
from __future__ import print_function
 | 
						|
import os
 | 
						|
import os.path
 | 
						|
import sys
 | 
						|
import SCons.Util
 | 
						|
 | 
						|
import common
 | 
						|
 | 
						|
#######################################################################
 | 
						|
# Minimal scons version
 | 
						|
 | 
						|
EnsureSConsVersion(2, 4)
 | 
						|
EnsurePythonVersion(2, 7)
 | 
						|
 | 
						|
 | 
						|
#######################################################################
 | 
						|
# Configuration options
 | 
						|
 | 
						|
opts = Variables('config.py')
 | 
						|
common.AddOptions(opts)
 | 
						|
 | 
						|
env = Environment(
 | 
						|
	options = opts,
 | 
						|
	tools = ['gallium'],
 | 
						|
	toolpath = ['#scons'],
 | 
						|
	ENV = os.environ,
 | 
						|
)
 | 
						|
 | 
						|
# XXX: This creates a many problems as it saves...
 | 
						|
#opts.Save('config.py', env)
 | 
						|
 | 
						|
# Backwards compatability with old target configuration variable
 | 
						|
try:
 | 
						|
    targets = ARGUMENTS['targets']
 | 
						|
except KeyError:
 | 
						|
    pass
 | 
						|
else:
 | 
						|
    targets = targets.split(',')
 | 
						|
    print('scons: warning: targets option is deprecated; pass the targets on their own such as')
 | 
						|
    print()
 | 
						|
    print('  scons %s' % ' '.join(targets))
 | 
						|
    print()
 | 
						|
    COMMAND_LINE_TARGETS.append(targets)
 | 
						|
 | 
						|
 | 
						|
Help(opts.GenerateHelpText(env))
 | 
						|
 | 
						|
 | 
						|
#######################################################################
 | 
						|
# Print a deprecation warning for using scons on non-windows
 | 
						|
 | 
						|
if common.host_platform != 'windows' and env['platform'] != 'windows':
 | 
						|
    if env['force_scons']:
 | 
						|
        print("WARNING: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
						|
              "please use meson instead.", file=sys.stderr)
 | 
						|
    else:
 | 
						|
        print("ERROR: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
						|
              "please use meson instead. If you really need to use scons you "
 | 
						|
              "can add `force_scons=1` to the scons command line.", file=sys.stderr)
 | 
						|
        sys.exit(1)
 | 
						|
else:
 | 
						|
    print("WARNING: Scons support is in the process of being deprecated on "
 | 
						|
          "on windows platforms (including mingw). If you haven't already "
 | 
						|
          "please try using meson for windows builds. Be sure to report any "
 | 
						|
          "issues you run into", file=sys.stderr)
 | 
						|
 | 
						|
 | 
						|
#######################################################################
 | 
						|
# Environment setup
 | 
						|
 | 
						|
with open("VERSION") as f:
 | 
						|
  mesa_version = f.read().strip()
 | 
						|
env.Append(CPPDEFINES = [
 | 
						|
    ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
 | 
						|
    ('PACKAGE_BUGREPORT', '\\"https://gitlab.freedesktop.org/mesa/mesa/-/issues\\"'),
 | 
						|
])
 | 
						|
 | 
						|
# Includes
 | 
						|
env.Prepend(CPPPATH = [
 | 
						|
	'#/include',
 | 
						|
])
 | 
						|
env.Append(CPPPATH = [
 | 
						|
	'#/src/gallium/include',
 | 
						|
	'#/src/gallium/auxiliary',
 | 
						|
	'#/src/gallium/drivers',
 | 
						|
	'#/src/gallium/winsys',
 | 
						|
])
 | 
						|
 | 
						|
# for debugging
 | 
						|
#print env.Dump()
 | 
						|
 | 
						|
 | 
						|
# Add a check target for running tests
 | 
						|
check = env.Alias('check')
 | 
						|
env.AlwaysBuild(check)
 | 
						|
 | 
						|
 | 
						|
#######################################################################
 | 
						|
# Invoke host SConscripts
 | 
						|
#
 | 
						|
# For things that are meant to be run on the native host build machine, instead
 | 
						|
# of the target machine.
 | 
						|
#
 | 
						|
 | 
						|
# Create host environent
 | 
						|
if env['crosscompile'] and not env['embedded']:
 | 
						|
    host_env = Environment(
 | 
						|
        options = opts,
 | 
						|
        # no tool used
 | 
						|
        tools = [],
 | 
						|
        toolpath = ['#scons'],
 | 
						|
        ENV = os.environ,
 | 
						|
    )
 | 
						|
 | 
						|
    # Override options
 | 
						|
    host_env['platform'] = common.host_platform
 | 
						|
    host_env['machine'] = common.host_machine
 | 
						|
    host_env['toolchain'] = 'default'
 | 
						|
    host_env['llvm'] = False
 | 
						|
 | 
						|
    host_env.Tool('gallium')
 | 
						|
 | 
						|
    host_env['hostonly'] = True
 | 
						|
    assert host_env['crosscompile'] == False
 | 
						|
 | 
						|
    target_env = env
 | 
						|
    env = host_env
 | 
						|
    Export('env')
 | 
						|
 | 
						|
    SConscript(
 | 
						|
        'src/SConscript',
 | 
						|
        variant_dir = host_env['build_dir'],
 | 
						|
        duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
 | 
						|
    )
 | 
						|
 | 
						|
    env = target_env
 | 
						|
 | 
						|
Export('env')
 | 
						|
 | 
						|
#######################################################################
 | 
						|
# Invoke SConscripts
 | 
						|
 | 
						|
# TODO: Build several variants at the same time?
 | 
						|
# http://www.scons.org/wiki/SimultaneousVariantBuilds
 | 
						|
 | 
						|
SConscript(
 | 
						|
	'src/SConscript',
 | 
						|
	variant_dir = env['build_dir'],
 | 
						|
	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
########################################################################
 | 
						|
# List all aliases
 | 
						|
 | 
						|
try:
 | 
						|
    from SCons.Node.Alias import default_ans
 | 
						|
except ImportError:
 | 
						|
    pass
 | 
						|
else:
 | 
						|
    aliases = sorted(default_ans.keys())
 | 
						|
    env.Help('\n')
 | 
						|
    env.Help('Recognized targets:\n')
 | 
						|
    for alias in aliases:
 | 
						|
        env.Help('    %s\n' % alias)
 |