SConstruct revision 848b8605
1848b8605Smrg#######################################################################
2848b8605Smrg# Top-level SConstruct
3848b8605Smrg#
4848b8605Smrg# 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'
15848b8605Smrg# 
16848b8605Smrg# Invoke
17848b8605Smrg#
18848b8605Smrg#   scons -h
19848b8605Smrg#
20848b8605Smrg# to get the full list of options. See scons manpage for more info.
21848b8605Smrg#  
22848b8605Smrg
23848b8605Smrgimport os
24848b8605Smrgimport os.path
25848b8605Smrgimport sys
26848b8605Smrgimport SCons.Util
27848b8605Smrg
28848b8605Smrgimport common
29848b8605Smrg
30848b8605Smrg#######################################################################
31848b8605Smrg# Configuration options
32848b8605Smrg
33848b8605Smrgopts = Variables('config.py')
34848b8605Smrgcommon.AddOptions(opts)
35848b8605Smrg
36848b8605Smrgenv = Environment(
37848b8605Smrg	options = opts,
38848b8605Smrg	tools = ['gallium'],
39848b8605Smrg	toolpath = ['#scons'],	
40848b8605Smrg	ENV = os.environ,
41848b8605Smrg)
42848b8605Smrg
43848b8605Smrg# XXX: This creates a many problems as it saves...
44848b8605Smrg#opts.Save('config.py', env)
45848b8605Smrg
46848b8605Smrg# Backwards compatability with old target configuration variable
47848b8605Smrgtry:
48848b8605Smrg    targets = ARGUMENTS['targets']
49848b8605Smrgexcept KeyError:
50848b8605Smrg    pass
51848b8605Smrgelse:
52848b8605Smrg    targets = targets.split(',')
53848b8605Smrg    print 'scons: warning: targets option is deprecated; pass the targets on their own such as'
54848b8605Smrg    print
55848b8605Smrg    print '  scons %s' % ' '.join(targets)
56848b8605Smrg    print 
57848b8605Smrg    COMMAND_LINE_TARGETS.append(targets)
58848b8605Smrg
59848b8605Smrg
60848b8605SmrgHelp(opts.GenerateHelpText(env))
61848b8605Smrg
62848b8605Smrg#######################################################################
63848b8605Smrg# Environment setup
64848b8605Smrg
65848b8605Smrgwith open("VERSION") as f:
66848b8605Smrg  mesa_version = f.read().strip()
67848b8605Smrgenv.Append(CPPDEFINES = [
68848b8605Smrg    ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
69848b8605Smrg    ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
70848b8605Smrg])
71848b8605Smrg
72848b8605Smrg# Includes
73848b8605Smrgenv.Prepend(CPPPATH = [
74848b8605Smrg	'#/include',
75848b8605Smrg])
76848b8605Smrgenv.Append(CPPPATH = [
77848b8605Smrg	'#/src/gallium/include',
78848b8605Smrg	'#/src/gallium/auxiliary',
79848b8605Smrg	'#/src/gallium/drivers',
80848b8605Smrg	'#/src/gallium/winsys',
81848b8605Smrg])
82848b8605Smrg
83848b8605Smrg# for debugging
84848b8605Smrg#print env.Dump()
85848b8605Smrg
86848b8605Smrg
87848b8605Smrg#######################################################################
88848b8605Smrg# Invoke host SConscripts 
89848b8605Smrg# 
90848b8605Smrg# For things that are meant to be run on the native host build machine, instead
91848b8605Smrg# of the target machine.
92848b8605Smrg#
93848b8605Smrg
94848b8605Smrg# Create host environent
95848b8605Smrgif env['crosscompile'] and not env['embedded']:
96848b8605Smrg    host_env = Environment(
97848b8605Smrg        options = opts,
98848b8605Smrg        # no tool used
99848b8605Smrg        tools = [],
100848b8605Smrg        toolpath = ['#scons'],
101848b8605Smrg        ENV = os.environ,
102848b8605Smrg    )
103848b8605Smrg
104848b8605Smrg    # Override options
105848b8605Smrg    host_env['platform'] = common.host_platform
106848b8605Smrg    host_env['machine'] = common.host_machine
107848b8605Smrg    host_env['toolchain'] = 'default'
108848b8605Smrg    host_env['llvm'] = False
109848b8605Smrg
110848b8605Smrg    host_env.Tool('gallium')
111848b8605Smrg
112848b8605Smrg    host_env['hostonly'] = True
113848b8605Smrg    assert host_env['crosscompile'] == False
114848b8605Smrg
115848b8605Smrg    target_env = env
116848b8605Smrg    env = host_env
117848b8605Smrg    Export('env')
118848b8605Smrg
119848b8605Smrg    SConscript(
120848b8605Smrg        'src/SConscript',
121848b8605Smrg        variant_dir = host_env['build_dir'],
122848b8605Smrg        duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
123848b8605Smrg    )
124848b8605Smrg
125848b8605Smrg    env = target_env
126848b8605Smrg
127848b8605SmrgExport('env')
128848b8605Smrg
129848b8605Smrg#######################################################################
130848b8605Smrg# Invoke SConscripts
131848b8605Smrg
132848b8605Smrg# TODO: Build several variants at the same time?
133848b8605Smrg# http://www.scons.org/wiki/SimultaneousVariantBuilds
134848b8605Smrg
135848b8605SmrgSConscript(
136848b8605Smrg	'src/SConscript',
137848b8605Smrg	variant_dir = env['build_dir'],
138848b8605Smrg	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
139848b8605Smrg)
140848b8605Smrg
141848b8605Smrg
142848b8605Smrg########################################################################
143848b8605Smrg# List all aliases
144848b8605Smrg
145848b8605Smrgtry:
146848b8605Smrg    from SCons.Node.Alias import default_ans
147848b8605Smrgexcept ImportError:
148848b8605Smrg    pass
149848b8605Smrgelse:
150848b8605Smrg    aliases = default_ans.keys()
151848b8605Smrg    aliases.sort()
152848b8605Smrg    env.Help('\n')
153848b8605Smrg    env.Help('Recognized targets:\n')
154848b8605Smrg    for alias in aliases:
155848b8605Smrg        env.Help('    %s\n' % alias)
156