SConstruct 4.96 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 26 27 28 29 30
import os
import os.path
import sys

import common

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

32
if common.default_platform in ('linux', 'freebsd', 'darwin'):
José Fonseca's avatar
José Fonseca committed
33 34 35
	default_statetrackers = 'mesa'
	default_drivers = 'softpipe,failover,i915simple,i965simple'
	default_winsys = 'xlib'
36
	default_dri = 'yes'
37
elif common.default_platform in ('winddk',):
José Fonseca's avatar
José Fonseca committed
38 39 40
	default_statetrackers = 'none'
	default_drivers = 'softpipe,i915simple'
	default_winsys = 'none'
41
	default_dri = 'no'
42
else:
José Fonseca's avatar
José Fonseca committed
43 44
	default_drivers = 'all'
	default_winsys = 'all'
45 46
	default_dri = 'no'

47
opts = common.Options()
José Fonseca's avatar
José Fonseca committed
48
opts.Add(ListOption('statetrackers', 'state_trackers to build', default_statetrackers,
49
                     ['mesa']))
José Fonseca's avatar
José Fonseca committed
50
opts.Add(ListOption('drivers', 'pipe drivers to build', default_drivers,
51
                     ['softpipe', 'failover', 'i915simple', 'i965simple', 'cell']))
José Fonseca's avatar
José Fonseca committed
52
opts.Add(ListOption('winsys', 'winsys drivers to build', default_winsys,
53
                     ['xlib', 'intel'])) 
54

55 56 57
env = Environment(
	options = opts, 
	ENV = os.environ)
58 59 60 61 62 63 64 65
Help(opts.GenerateHelpText(env))

# for debugging
#print env.Dump()

# replicate options values in local variables
debug = env['debug']
dri = env['dri']
66
llvm = env['llvm']
67
machine = env['machine']
68
platform = env['platform']
69 70 71

# derived options
x86 = machine == 'x86'
72 73
gcc = platform in ('linux', 'freebsd', 'darwin')
msvc = platform in ('win32', 'winddk')
74 75 76 77 78

Export([
	'debug', 
	'x86', 
	'dri', 
79
	'llvm',
80 81 82 83 84 85 86 87 88
	'platform',
	'gcc',
	'msvc',
])


#######################################################################
# Environment setup
#
89
# TODO: put the compiler specific settings in separate files
90 91
# TODO: auto-detect as much as possible

92 93

if platform == 'winddk':
José Fonseca's avatar
José Fonseca committed
94 95 96 97 98 99 100 101
	env.Tool('winddk', ['.'])
	
	env.Append(CPPPATH = [
		env['SDK_INC_PATH'],
		env['DDK_INC_PATH'],
		env['WDM_INC_PATH'],
		env['CRT_INC_PATH'],
	])
102

103 104 105 106 107 108 109 110 111
# Optimization flags
if gcc:
	if debug:
		env.Append(CFLAGS = '-O0 -g3')
		env.Append(CXXFLAGS = '-O0 -g3')
	else:
		env.Append(CFLAGS = '-O3 -g3')
		env.Append(CXXFLAGS = '-O3 -g3')

112
	env.Append(CFLAGS = '-Wall -Wmissing-prototypes -Wno-long-long -ffast-math -pedantic')
113 114 115 116 117 118
	env.Append(CXXFLAGS = '-Wall -pedantic')
	
	# Be nice to Eclipse
	env.Append(CFLAGS = '-fmessage-length=0')
	env.Append(CXXFLAGS = '-fmessage-length=0')

119 120 121 122 123 124 125 126 127 128 129 130 131 132
if msvc:
	env.Append(CFLAGS = '/W3')
	if debug:
		cflags = [
			'/Od', # disable optimizations
			'/Oy-', # disable frame pointer omission
		]
	else:
		cflags = [
			'/Ox', # maximum optimizations
			'/Os', # favor code space
		]
	env.Append(CFLAGS = cflags)
	env.Append(CXXFLAGS = cflags)
133 134 135
	# Put debugging information in a separate .pdb file for each object file as
	# descrived in the scons manpage
	env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'
136

137
# Defines
138
if debug:
139 140 141 142 143 144 145 146
	if gcc:
		env.Append(CPPDEFINES = ['DEBUG'])
	if msvc:
		env.Append(CPPDEFINES = [
			('DBG', '1'),
			('DEBUG', '1'),
			('_DEBUG', '1'),
		])
147 148 149 150 151 152 153
else:
	env.Append(CPPDEFINES = ['NDEBUG'])


# Includes
env.Append(CPPPATH = [
	'#/include',
154 155 156
	'#/src/gallium/include',
	'#/src/gallium/auxiliary',
	'#/src/gallium/drivers',
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
])


# x86 assembly
if x86:
	env.Append(CPPDEFINES = [
		'USE_X86_ASM', 
		'USE_MMX_ASM',
		'USE_3DNOW_ASM',
		'USE_SSE_ASM',
	])
	if gcc:	
		env.Append(CFLAGS = '-m32')
		env.Append(CXXFLAGS = '-m32')


173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
# 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',
	])
	env.Append(CPPPATH = ['/usr/X11R6/include'])
	env.Append(LIBPATH = ['/usr/X11R6/lib'])
	env.Append(LIBS = [
		'm',
		'pthread',
		'expat',
		'dl',
	])

194 195 196 197 198 199 200 201 202 203 204

# 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',
	])

205 206 207 208 209 210 211 212
# LLVM
if llvm:
	# See also http://www.scons.org/wiki/UsingPkgConfig
	env.ParseConfig('llvm-config --cflags --ldflags --libs')
	env.Append(CPPDEFINES = ['MESA_LLVM'])
	env.Append(CXXFLAGS = ['-Wno-long-long'])
	

213
# libGL
214
if platform not in ('winddk',):
215 216 217 218 219 220 221 222
	env.Append(LIBS = [
		'X11',
		'Xext',
		'Xxf86vm',
		'Xdamage',
		'Xfixes',
	])

223 224
# Convenience library support
common.createConvenienceLibBuilder(env)
225

226
Export('env')
227 228 229 230 231


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

232 233
# TODO: Build several variants at the same time?
# http://www.scons.org/wiki/SimultaneousVariantBuilds
234 235

SConscript(
236
	'src/SConscript',
237
	build_dir = common.make_build_dir(env),
238 239
	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
)