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