Commit 9409043c authored by José Fonseca's avatar José Fonseca

scons: Move common code to a separate file.

parent 67099cd7
#######################################################################
# Top-level SConstruct
import os
import os.path
import sys
import platform as _platform
#######################################################################
# Configuration options
#
# For example, invoke scons as
#
......@@ -29,33 +20,21 @@ import platform as _platform
# to get the full list of options. See scons manpage for more info.
#
platform_map = {
'linux2': 'linux',
'win32': 'winddk',
}
default_platform = sys.platform
default_platform = platform_map.get(default_platform, default_platform)
machine_map = {
'x86': 'x86',
'i386': 'x86',
'i486': 'x86',
'i586': 'x86',
'i686': 'x86',
'x86_64': 'x86_64',
}
if 'PROCESSOR_ARCHITECTURE' in os.environ:
default_machine = os.environ['PROCESSOR_ARCHITECTURE']
else:
default_machine = _platform.machine()
default_machine = machine_map.get(default_machine, 'generic')
import os
import os.path
import sys
import common
#######################################################################
# Configuration options
if default_platform in ('linux', 'freebsd', 'darwin'):
if common.default_platform in ('linux', 'freebsd', 'darwin'):
default_statetrackers = 'mesa'
default_drivers = 'softpipe,failover,i915simple,i965simple'
default_winsys = 'xlib'
default_dri = 'yes'
elif default_platform in ('winddk',):
elif common.default_platform in ('winddk',):
default_statetrackers = 'none'
default_drivers = 'softpipe,i915simple'
default_winsys = 'none'
......@@ -65,36 +44,13 @@ else:
default_winsys = 'all'
default_dri = 'no'
# TODO: auto-detect defaults
opts = Options('config.py')
opts.Add(BoolOption('debug', 'build debug version', 'no'))
opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
allowed_values=('generic', 'x86', 'x86_64')))
opts.Add(EnumOption('platform', 'target platform', default_platform,
allowed_values=('linux', 'cell', 'winddk')))
opts = common.Options()
opts.Add(ListOption('statetrackers', 'state_trackers to build', default_statetrackers,
[
'mesa',
],
))
['mesa']))
opts.Add(ListOption('drivers', 'pipe drivers to build', default_drivers,
[
'softpipe',
'failover',
'i915simple',
'i965simple',
'cell',
],
))
['softpipe', 'failover', 'i915simple', 'i965simple', 'cell']))
opts.Add(ListOption('winsys', 'winsys drivers to build', default_winsys,
[
'xlib',
'intel',
],
))
opts.Add(BoolOption('llvm', 'use LLVM', 'no'))
opts.Add(BoolOption('dri', 'build DRI drivers', default_dri))
['xlib', 'intel']))
env = Environment(
options = opts,
......@@ -264,64 +220,20 @@ if platform not in ('winddk',):
'Xfixes',
])
Export('env')
#######################################################################
# Convenience Library Builder
# based on the stock StaticLibrary and SharedLibrary builders
def createConvenienceLibBuilder(env):
"""This is a utility function that creates the ConvenienceLibrary
Builder in an Environment if it is not there already.
If it is already there, we return the existing one.
"""
try:
convenience_lib = env['BUILDERS']['ConvenienceLibrary']
except KeyError:
action_list = [ Action("$ARCOM", "$ARCOMSTR") ]
if env.Detect('ranlib'):
ranlib_action = Action("$RANLIBCOM", "$RANLIBCOMSTR")
action_list.append(ranlib_action)
# Convenience library support
common.createConvenienceLibBuilder(env)
convenience_lib = Builder(action = action_list,
emitter = '$LIBEMITTER',
prefix = '$LIBPREFIX',
suffix = '$LIBSUFFIX',
src_suffix = '$SHOBJSUFFIX',
src_builder = 'SharedObject')
env['BUILDERS']['ConvenienceLibrary'] = convenience_lib
env['BUILDERS']['Library'] = convenience_lib
return convenience_lib
createConvenienceLibBuilder(env)
Export('env')
#######################################################################
# Invoke SConscripts
# Put build output in a separate dir, which depends on the current configuration
# See also http://www.scons.org/wiki/AdvancedBuildExample
build_topdir = 'build'
build_subdir = platform
if dri:
build_subdir += "-dri"
if llvm:
build_subdir += "-llvm"
if env['machine'] != 'generic':
build_subdir += '-' + env['machine']
if debug:
build_subdir += "-debug"
build_dir = os.path.join(build_topdir, build_subdir)
# TODO: Build several variants at the same time?
# http://www.scons.org/wiki/SimultaneousVariantBuilds
SConscript(
'src/SConscript',
build_dir = build_dir,
build_dir = common.make_build_dir(env),
duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
)
#######################################################################
# Common SCons code
import os
import os.path
import sys
import platform as _platform
#######################################################################
# Defaults
_platform_map = {
'linux2': 'linux',
'win32': 'winddk',
}
default_platform = sys.platform
default_platform = _platform_map.get(default_platform, default_platform)
_machine_map = {
'x86': 'x86',
'i386': 'x86',
'i486': 'x86',
'i586': 'x86',
'i686': 'x86',
'x86_64': 'x86_64',
}
if 'PROCESSOR_ARCHITECTURE' in os.environ:
default_machine = os.environ['PROCESSOR_ARCHITECTURE']
else:
default_machine = _platform.machine()
default_machine = _machine_map.get(default_machine, 'generic')
if default_platform in ('linux', 'freebsd', 'darwin'):
default_dri = 'yes'
elif default_platform in ('winddk',):
default_dri = 'no'
else:
default_dri = 'no'
#######################################################################
# Common options
def Options():
from SCons.Options import Options
from SCons.Options.BoolOption import BoolOption
from SCons.Options.EnumOption import EnumOption
opts = Options('config.py')
opts.Add(BoolOption('debug', 'build debug version', 'no'))
opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
allowed_values=('generic', 'x86', 'x86_64')))
opts.Add(EnumOption('platform', 'target platform', default_platform,
allowed_values=('linux', 'cell', 'winddk')))
opts.Add(BoolOption('llvm', 'use LLVM', 'no'))
opts.Add(BoolOption('dri', 'build DRI drivers', default_dri))
return opts
#######################################################################
# Convenience Library Builder
# based on the stock StaticLibrary and SharedLibrary builders
import SCons.Action
import SCons.Builder
def createConvenienceLibBuilder(env):
"""This is a utility function that creates the ConvenienceLibrary
Builder in an Environment if it is not there already.
If it is already there, we return the existing one.
"""
try:
convenience_lib = env['BUILDERS']['ConvenienceLibrary']
except KeyError:
action_list = [ SCons.Action.Action("$ARCOM", "$ARCOMSTR") ]
if env.Detect('ranlib'):
ranlib_action = SCons.Action.Action("$RANLIBCOM", "$RANLIBCOMSTR")
action_list.append(ranlib_action)
convenience_lib = SCons.Builder.Builder(action = action_list,
emitter = '$LIBEMITTER',
prefix = '$LIBPREFIX',
suffix = '$LIBSUFFIX',
src_suffix = '$SHOBJSUFFIX',
src_builder = 'SharedObject')
env['BUILDERS']['ConvenienceLibrary'] = convenience_lib
env['BUILDERS']['Library'] = convenience_lib
return convenience_lib
#######################################################################
# Build
def make_build_dir(env):
# Put build output in a separate dir, which depends on the current configuration
# See also http://www.scons.org/wiki/AdvancedBuildExample
build_topdir = 'build'
build_subdir = env['platform']
if env['dri']:
build_subdir += "-dri"
if env['llvm']:
build_subdir += "-llvm"
if env['machine'] != 'generic':
build_subdir += '-' + env['machine']
if env['debug']:
build_subdir += "-debug"
build_dir = os.path.join(build_topdir, build_subdir)
return build_dir
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment