SConstruct 5.16 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
default_statetrackers = 'mesa'
José Fonseca's avatar
José Fonseca committed
34
default_targets = 'none'
35

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

49
opts = Variables('config.py')
50
common.AddOptions(opts)
51
opts.Add(ListVariable('statetrackers', 'state trackers to build', default_statetrackers,
52
                     ['mesa', 'python', 'xorg', 'egl']))
53
opts.Add(ListVariable('drivers', 'pipe drivers to build', default_drivers,
54
                     ['softpipe', 'failover', 'svga', 'i915', 'i965', 'trace', 'r300', 'r600', 'identity', 'llvmpipe', 'nouveau', 'nv50', 'nvfx']))
55
opts.Add(ListVariable('winsys', 'winsys drivers to build', default_winsys,
56
                     ['xlib', 'vmware', 'i915', 'i965', 'gdi', 'radeon', 'r600', 'graw-xlib']))
57

58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
opts.Add(ListVariable('targets', 'driver targets to build', default_targets,
		      ['dri-i915',
		       'dri-i965',
		       'dri-nouveau',
		       'dri-radeong',
		       'dri-swrast',
		       'dri-vmwgfx',
		       'egl-i915',
		       'egl-i965',
		       'egl-nouveau',
		       'egl-radeon',
		       'egl-swrast',
		       'egl-vmwgfx',
		       'graw-xlib',
		       'libgl-gdi',
		       'libgl-xlib',
		       'xorg-i915',
		       'xorg-i965',
		       'xorg-nouveau',
		       'xorg-radeon',
		       'xorg-vmwgfx']))

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

82
env = Environment(
83 84
	options = opts,
	tools = ['gallium'],
85
	toolpath = ['#scons'],	
86 87 88
	ENV = os.environ,
)

89 90 91 92 93 94 95 96 97 98 99
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'])

100 101 102 103 104 105
Help(opts.GenerateHelpText(env))

# replicate options values in local variables
debug = env['debug']
dri = env['dri']
machine = env['machine']
106
platform = env['platform']
107 108 109

# derived options
x86 = machine == 'x86'
Michel Dänzer's avatar
Michel Dänzer committed
110
ppc = machine == 'ppc'
111
gcc = platform in ('linux', 'freebsd', 'darwin', 'embedded')
112
msvc = platform in ('windows', 'winddk')
113 114 115 116

Export([
	'debug', 
	'x86', 
Michel Dänzer's avatar
Michel Dänzer committed
117
	'ppc', 
118 119 120 121 122 123 124 125 126 127
	'dri', 
	'platform',
	'gcc',
	'msvc',
])


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

Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
128
# Always build trace, rbug, identity, softpipe, and llvmpipe (where possible)
129 130
if 'trace' not in env['drivers']:
    env['drivers'].append('trace')
Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
131 132
if 'rbug' not in env['drivers']:
    env['drivers'].append('rbug')
Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
133 134
if 'galahad' not in env['drivers']:
    env['drivers'].append('galahad')
135 136
if 'identity' not in env['drivers']:
    env['drivers'].append('identity')
137 138 139 140
if 'softpipe' not in env['drivers']:
    env['drivers'].append('softpipe')
if env['llvm'] and 'llvmpipe' not in env['drivers']:
    env['drivers'].append('llvmpipe')
141 142
if 'sw' not in env['drivers']:
    env['drivers'].append('sw')
143

144
# Includes
145
env.Prepend(CPPPATH = [
146
	'#/include',
147 148
])
env.Append(CPPPATH = [
149 150 151
	'#/src/gallium/include',
	'#/src/gallium/auxiliary',
	'#/src/gallium/drivers',
152
	'#/src/gallium/winsys',
153 154
])

155 156 157
if env['msvc']:
    env.Append(CPPPATH = ['#include/c99'])

158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
# Embedded
if platform == 'embedded':
	env.Append(CPPDEFINES = [
		'_POSIX_SOURCE',
		('_POSIX_C_SOURCE', '199309L'), 
		'_SVID_SOURCE',
		'_BSD_SOURCE', 
		'_GNU_SOURCE',
		
		'PTHREADS',
	])
	env.Append(LIBS = [
		'm',
		'pthread',
		'dl',
	])
174

175
# Posix
176
if platform in ('posix', 'linux', 'freebsd', 'darwin'):
177 178 179 180 181 182 183
	env.Append(CPPDEFINES = [
		'_POSIX_SOURCE',
		('_POSIX_C_SOURCE', '199309L'), 
		'_SVID_SOURCE',
		'_BSD_SOURCE', 
		'_GNU_SOURCE',
		'PTHREADS',
184
		'HAVE_POSIX_MEMALIGN',
185
	])
186 187
	if gcc:
		env.Append(CFLAGS = ['-fvisibility=hidden'])
188 189
	if platform == 'darwin':
		env.Append(CPPDEFINES = ['_DARWIN_C_SOURCE'])
190 191 192 193 194
	env.Append(LIBS = [
		'm',
		'pthread',
		'dl',
	])
195

196 197 198
# for debugging
#print env.Dump()

199
Export('env')
200 201 202 203 204


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

205 206
# TODO: Build several variants at the same time?
# http://www.scons.org/wiki/SimultaneousVariantBuilds
207 208

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

214 215
env.Default('src')