SConstruct 5.07 KB
Newer Older
1
2
3
4
5
#######################################################################
# Top-level SConstruct
#
# For example, invoke scons as 
#
6
#   scons debug=1 dri=0 machine=x86
7
8
9
10
11
12
13
#
# to set configuration variables. Or you can write those options to a file
# named config.py:
#
#   # config.py
#   debug=1
#   dri=0
14
#   machine='x86'
15
16
17
18
19
20
21
22
# 
# Invoke
#
#   scons -h
#
# to get the full list of options. See scons manpage for more info.
#  

23
24
25
import os
import os.path
import sys
Alan Hourihane's avatar
Alan Hourihane committed
26
import SCons.Util
27
28
29
30
31

import common

#######################################################################
# Configuration options
José Fonseca's avatar
José Fonseca committed
32

33
34
default_statetrackers = 'mesa'

35
if common.default_platform in ('linux', 'freebsd', 'darwin'):
36
	default_drivers = 'softpipe,failover,svga,i915,i965,trace,identity,llvmpipe'
José Fonseca's avatar
José Fonseca committed
37
	default_winsys = 'xlib'
38
elif common.default_platform in ('winddk',):
39
	default_drivers = 'softpipe,svga,i915,i965,trace,identity'
José Fonseca's avatar
José Fonseca committed
40
	default_winsys = 'all'
41
else:
José Fonseca's avatar
José Fonseca committed
42
43
	default_drivers = 'all'
	default_winsys = 'all'
44

45
opts = Variables('config.py')
46
common.AddOptions(opts)
47
opts.Add(ListVariable('statetrackers', 'state trackers to build', default_statetrackers,
48
                     ['mesa', 'python', 'xorg']))
49
opts.Add(ListVariable('drivers', 'pipe drivers to build', default_drivers,
50
                     ['softpipe', 'failover', 'svga', 'i915', 'i965', 'trace', 'r300', 'identity', 'llvmpipe']))
51
opts.Add(ListVariable('winsys', 'winsys drivers to build', default_winsys,
52
                     ['xlib', 'vmware', 'intel', 'i965', 'gdi', 'radeon']))
53

54
opts.Add(EnumVariable('MSVS_VERSION', 'MS Visual C++ version', None, allowed_values=('7.1', '8.0', '9.0')))
55

56
env = Environment(
57
58
	options = opts,
	tools = ['gallium'],
59
	toolpath = ['#scons'],	
60
61
62
	ENV = os.environ,
)

63
64
65
66
67
68
69
70
71
72
73
if os.environ.has_key('CC'):
	env['CC'] = os.environ['CC']
if os.environ.has_key('CFLAGS'):
	env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
if os.environ.has_key('CXX'):
	env['CXX'] = os.environ['CXX']
if os.environ.has_key('CXXFLAGS'):
	env['CXXFLAGS'] += SCons.Util.CLVar(os.environ['CXXFLAGS'])
if os.environ.has_key('LDFLAGS'):
	env['LINKFLAGS'] += SCons.Util.CLVar(os.environ['LDFLAGS'])

74
75
76
77
78
Help(opts.GenerateHelpText(env))

# replicate options values in local variables
debug = env['debug']
dri = env['dri']
79
llvm = env['llvm']
80
machine = env['machine']
81
platform = env['platform']
82
83
84

# derived options
x86 = machine == 'x86'
Michel Dänzer's avatar
Michel Dänzer committed
85
ppc = machine == 'ppc'
86
gcc = platform in ('linux', 'freebsd', 'darwin')
87
msvc = platform in ('windows', 'winddk')
88
89
90
91

Export([
	'debug', 
	'x86', 
Michel Dänzer's avatar
Michel Dänzer committed
92
	'ppc', 
93
	'dri', 
94
	'llvm',
95
96
97
98
99
100
101
102
103
104
105
106
	'platform',
	'gcc',
	'msvc',
])


#######################################################################
# Environment setup

# Includes
env.Append(CPPPATH = [
	'#/include',
107
108
109
	'#/src/gallium/include',
	'#/src/gallium/auxiliary',
	'#/src/gallium/drivers',
110
111
])

112
113
114
if env['msvc']:
    env.Append(CPPPATH = ['#include/c99'])

115

116
117
118
119
120
121
122
123
124
125
126
127
# Posix
if platform in ('posix', 'linux', 'freebsd', 'darwin'):
	env.Append(CPPDEFINES = [
		'_POSIX_SOURCE',
		('_POSIX_C_SOURCE', '199309L'), 
		'_SVID_SOURCE',
		'_BSD_SOURCE', 
		'_GNU_SOURCE',
		
		'PTHREADS',
		'HAVE_POSIX_MEMALIGN',
	])
128
129
	if platform == 'darwin':
		env.Append(CPPDEFINES = ['_DARWIN_C_SOURCE'])
130
131
132
133
134
135
136
137
138
	env.Append(CPPPATH = ['/usr/X11R6/include'])
	env.Append(LIBPATH = ['/usr/X11R6/lib'])
	env.Append(LIBS = [
		'm',
		'pthread',
		'expat',
		'dl',
	])

139
140
141
142
143
144
145
146
147
148
149

# DRI
if dri:
	env.ParseConfig('pkg-config --cflags --libs libdrm')
	env.Append(CPPDEFINES = [
		('USE_EXTERNAL_DXTN_LIB', '1'), 
		'IN_DRI_DRIVER',
		'GLX_DIRECT_RENDERING',
		'GLX_INDIRECT_RENDERING',
	])

150
151
152
# LLVM
if llvm:
	# See also http://www.scons.org/wiki/UsingPkgConfig
153
	env.ParseConfig('llvm-config --cflags --ldflags --libs backend bitreader engine instrumentation interpreter ipo')
154
	env.Append(CPPDEFINES = ['MESA_LLVM'])
155
        # Force C++ linkage
José Fonseca's avatar
José Fonseca committed
156
	env['LINK'] = env['CXX']
157

158
# libGL
159
if platform in ('linux', 'freebsd', 'darwin'):
160
161
162
163
164
165
166
167
	env.Append(LIBS = [
		'X11',
		'Xext',
		'Xxf86vm',
		'Xdamage',
		'Xfixes',
	])

168
169
170
# for debugging
#print env.Dump()

171
Export('env')
172
173
174
175
176


#######################################################################
# Invoke SConscripts

177
178
# TODO: Build several variants at the same time?
# http://www.scons.org/wiki/SimultaneousVariantBuilds
179

180
181
182
183
184
185
if env['platform'] != common.default_platform:
    # GLSL code has to be built twice -- one for the host OS, another for the target OS...

    host_env = Environment(
        # options are ignored
        # default tool is used
186
        tools = ['default', 'custom'],
187
188
189
190
191
        toolpath = ['#scons'],	
        ENV = os.environ,
    )

    host_env['platform'] = common.default_platform
192
193
    host_env['machine'] = common.default_machine
    host_env['debug'] = env['debug']
194
195
196

    SConscript(
        'src/glsl/SConscript',
197
        variant_dir = os.path.join(env['build'], 'host'),
198
199
200
201
        duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
        exports={'env':host_env},
    )

202
SConscript(
203
	'src/SConscript',
204
	variant_dir = env['build'],
205
206
	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
)
207
208
209
210
211
212

SConscript(
	'progs/SConscript',
	variant_dir = os.path.join('progs', env['build']),
	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
)