scons: Make command line arguments effective again.
[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 AddOptions(opts):
47         from SCons.Options.BoolOption import BoolOption
48         from SCons.Options.EnumOption import EnumOption
49         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))
56
57
58 #######################################################################
59 # Convenience Library Builder
60 # based on the stock StaticLibrary and SharedLibrary builders
61
62 import SCons.Action
63 import SCons.Builder
64
65 def 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
95 def 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)
109         # 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'))
112         return build_dir
113