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