blob: 1e5f7dad39bb77c4d2261b37b422e8848df18193 [file] [log] [blame]
José Fonseca94090432008-02-27 17:36:28 +09001#######################################################################
2# Common SCons code
3
4import os
5import os.path
6import sys
7import platform as _platform
8
9
10#######################################################################
11# Defaults
12
13_platform_map = {
14 'linux2': 'linux',
15 'win32': 'winddk',
16}
17
18default_platform = sys.platform
19default_platform = _platform_map.get(default_platform, default_platform)
20
21_machine_map = {
22 'x86': 'x86',
23 'i386': 'x86',
24 'i486': 'x86',
25 'i586': 'x86',
26 'i686': 'x86',
27 'x86_64': 'x86_64',
28}
29if 'PROCESSOR_ARCHITECTURE' in os.environ:
30 default_machine = os.environ['PROCESSOR_ARCHITECTURE']
31else:
32 default_machine = _platform.machine()
33default_machine = _machine_map.get(default_machine, 'generic')
34
35if default_platform in ('linux', 'freebsd', 'darwin'):
36 default_dri = 'yes'
37elif default_platform in ('winddk',):
38 default_dri = 'no'
39else:
40 default_dri = 'no'
41
42
43#######################################################################
44# Common options
45
José Fonseca13174c12008-03-03 18:52:37 +010046def AddOptions(opts):
José Fonseca94090432008-02-27 17:36:28 +090047 from SCons.Options.BoolOption import BoolOption
48 from SCons.Options.EnumOption import EnumOption
José Fonseca94090432008-02-27 17:36:28 +090049 opts.Add(BoolOption('debug', 'build debug version', 'no'))
50 opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
51 allowed_values=('generic', 'x86', 'x86_64')))
52 opts.Add(EnumOption('platform', 'target platform', default_platform,
53 allowed_values=('linux', 'cell', 'winddk')))
54 opts.Add(BoolOption('llvm', 'use LLVM', 'no'))
55 opts.Add(BoolOption('dri', 'build DRI drivers', default_dri))
José Fonseca94090432008-02-27 17:36:28 +090056
57
58#######################################################################
59# Convenience Library Builder
60# based on the stock StaticLibrary and SharedLibrary builders
61
62import SCons.Action
63import SCons.Builder
64
65def createConvenienceLibBuilder(env):
66 """This is a utility function that creates the ConvenienceLibrary
67 Builder in an Environment if it is not there already.
68
69 If it is already there, we return the existing one.
70 """
71
72 try:
73 convenience_lib = env['BUILDERS']['ConvenienceLibrary']
74 except KeyError:
75 action_list = [ SCons.Action.Action("$ARCOM", "$ARCOMSTR") ]
76 if env.Detect('ranlib'):
77 ranlib_action = SCons.Action.Action("$RANLIBCOM", "$RANLIBCOMSTR")
78 action_list.append(ranlib_action)
79
80 convenience_lib = SCons.Builder.Builder(action = action_list,
81 emitter = '$LIBEMITTER',
82 prefix = '$LIBPREFIX',
83 suffix = '$LIBSUFFIX',
84 src_suffix = '$SHOBJSUFFIX',
85 src_builder = 'SharedObject')
86 env['BUILDERS']['ConvenienceLibrary'] = convenience_lib
87 env['BUILDERS']['Library'] = convenience_lib
88
89 return convenience_lib
90
91
92#######################################################################
93# Build
94
95def make_build_dir(env):
96 # Put build output in a separate dir, which depends on the current configuration
97 # See also http://www.scons.org/wiki/AdvancedBuildExample
98 build_topdir = 'build'
99 build_subdir = env['platform']
100 if env['dri']:
101 build_subdir += "-dri"
102 if env['llvm']:
103 build_subdir += "-llvm"
104 if env['machine'] != 'generic':
105 build_subdir += '-' + env['machine']
106 if env['debug']:
107 build_subdir += "-debug"
108 build_dir = os.path.join(build_topdir, build_subdir)
José Fonseca7a678552008-02-27 20:13:16 +0900109 # Place the .sconsign file on the builddir too, to avoid issues with different scons
110 # versions building the same source file
111 env.SConsignFile(os.path.join(build_dir, '.sconsign'))
José Fonseca94090432008-02-27 17:36:28 +0900112 return build_dir
113