1848b8605Smrg####################################################################### 2848b8605Smrg# Top-level SConstruct 3848b8605Smrg# 4b8e80941Smrg# For example, invoke scons as 5848b8605Smrg# 6848b8605Smrg# scons build=debug llvm=yes machine=x86 7848b8605Smrg# 8848b8605Smrg# to set configuration variables. Or you can write those options to a file 9848b8605Smrg# named config.py: 10848b8605Smrg# 11848b8605Smrg# # config.py 12848b8605Smrg# build='debug' 13848b8605Smrg# llvm=True 14848b8605Smrg# machine='x86' 15b8e80941Smrg# 16848b8605Smrg# Invoke 17848b8605Smrg# 18848b8605Smrg# scons -h 19848b8605Smrg# 20848b8605Smrg# to get the full list of options. See scons manpage for more info. 21b8e80941Smrg# 22848b8605Smrg 23848b8605Smrgimport os 24848b8605Smrgimport os.path 25848b8605Smrgimport sys 26848b8605Smrgimport SCons.Util 27848b8605Smrg 28848b8605Smrgimport common 29848b8605Smrg 30b8e80941Smrg####################################################################### 31b8e80941Smrg# Minimal scons version 32b8e80941Smrg 33b8e80941SmrgEnsureSConsVersion(2, 4) 34b8e80941SmrgEnsurePythonVersion(2, 7) 35b8e80941Smrg 36b8e80941Smrg 37848b8605Smrg####################################################################### 38848b8605Smrg# Configuration options 39848b8605Smrg 40848b8605Smrgopts = Variables('config.py') 41848b8605Smrgcommon.AddOptions(opts) 42848b8605Smrg 43848b8605Smrgenv = Environment( 44848b8605Smrg options = opts, 45848b8605Smrg tools = ['gallium'], 46b8e80941Smrg toolpath = ['#scons'], 47848b8605Smrg ENV = os.environ, 48848b8605Smrg) 49848b8605Smrg 50848b8605Smrg# XXX: This creates a many problems as it saves... 51848b8605Smrg#opts.Save('config.py', env) 52848b8605Smrg 53848b8605Smrg# Backwards compatability with old target configuration variable 54848b8605Smrgtry: 55848b8605Smrg targets = ARGUMENTS['targets'] 56848b8605Smrgexcept KeyError: 57848b8605Smrg pass 58848b8605Smrgelse: 59848b8605Smrg targets = targets.split(',') 60b8e80941Smrg print('scons: warning: targets option is deprecated; pass the targets on their own such as') 61b8e80941Smrg print() 62b8e80941Smrg print(' scons %s' % ' '.join(targets)) 63b8e80941Smrg print() 64848b8605Smrg COMMAND_LINE_TARGETS.append(targets) 65848b8605Smrg 66848b8605Smrg 67848b8605SmrgHelp(opts.GenerateHelpText(env)) 68848b8605Smrg 69848b8605Smrg####################################################################### 70848b8605Smrg# Environment setup 71848b8605Smrg 72848b8605Smrgwith open("VERSION") as f: 73848b8605Smrg mesa_version = f.read().strip() 74848b8605Smrgenv.Append(CPPDEFINES = [ 75848b8605Smrg ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version), 76848b8605Smrg ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'), 77848b8605Smrg]) 78848b8605Smrg 79848b8605Smrg# Includes 80848b8605Smrgenv.Prepend(CPPPATH = [ 81848b8605Smrg '#/include', 82848b8605Smrg]) 83848b8605Smrgenv.Append(CPPPATH = [ 84848b8605Smrg '#/src/gallium/include', 85848b8605Smrg '#/src/gallium/auxiliary', 86848b8605Smrg '#/src/gallium/drivers', 87848b8605Smrg '#/src/gallium/winsys', 88848b8605Smrg]) 89848b8605Smrg 90848b8605Smrg# for debugging 91848b8605Smrg#print env.Dump() 92848b8605Smrg 93848b8605Smrg 94b8e80941Smrg# Add a check target for running tests 95b8e80941Smrgcheck = env.Alias('check') 96b8e80941Smrgenv.AlwaysBuild(check) 97b8e80941Smrg 98b8e80941Smrg 99848b8605Smrg####################################################################### 100b8e80941Smrg# Invoke host SConscripts 101b8e80941Smrg# 102848b8605Smrg# For things that are meant to be run on the native host build machine, instead 103848b8605Smrg# of the target machine. 104848b8605Smrg# 105848b8605Smrg 106848b8605Smrg# Create host environent 107848b8605Smrgif env['crosscompile'] and not env['embedded']: 108848b8605Smrg host_env = Environment( 109848b8605Smrg options = opts, 110848b8605Smrg # no tool used 111848b8605Smrg tools = [], 112848b8605Smrg toolpath = ['#scons'], 113848b8605Smrg ENV = os.environ, 114848b8605Smrg ) 115848b8605Smrg 116848b8605Smrg # Override options 117848b8605Smrg host_env['platform'] = common.host_platform 118848b8605Smrg host_env['machine'] = common.host_machine 119848b8605Smrg host_env['toolchain'] = 'default' 120848b8605Smrg host_env['llvm'] = False 121848b8605Smrg 122848b8605Smrg host_env.Tool('gallium') 123848b8605Smrg 124848b8605Smrg host_env['hostonly'] = True 125848b8605Smrg assert host_env['crosscompile'] == False 126848b8605Smrg 127848b8605Smrg target_env = env 128848b8605Smrg env = host_env 129848b8605Smrg Export('env') 130848b8605Smrg 131848b8605Smrg SConscript( 132848b8605Smrg 'src/SConscript', 133848b8605Smrg variant_dir = host_env['build_dir'], 134848b8605Smrg duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html 135848b8605Smrg ) 136848b8605Smrg 137848b8605Smrg env = target_env 138848b8605Smrg 139848b8605SmrgExport('env') 140848b8605Smrg 141848b8605Smrg####################################################################### 142848b8605Smrg# Invoke SConscripts 143848b8605Smrg 144848b8605Smrg# TODO: Build several variants at the same time? 145848b8605Smrg# http://www.scons.org/wiki/SimultaneousVariantBuilds 146848b8605Smrg 147848b8605SmrgSConscript( 148848b8605Smrg 'src/SConscript', 149848b8605Smrg variant_dir = env['build_dir'], 150848b8605Smrg duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html 151848b8605Smrg) 152848b8605Smrg 153848b8605Smrg 154848b8605Smrg######################################################################## 155848b8605Smrg# List all aliases 156848b8605Smrg 157848b8605Smrgtry: 158848b8605Smrg from SCons.Node.Alias import default_ans 159848b8605Smrgexcept ImportError: 160848b8605Smrg pass 161848b8605Smrgelse: 162b8e80941Smrg aliases = sorted(default_ans.keys()) 163848b8605Smrg env.Help('\n') 164848b8605Smrg env.Help('Recognized targets:\n') 165848b8605Smrg for alias in aliases: 166848b8605Smrg env.Help(' %s\n' % alias) 167