Home | History | Annotate | Line # | Download | only in dist
SConstruct revision 1.1.1.1
      1  1.1  mrg #######################################################################
      2  1.1  mrg # Top-level SConstruct
      3  1.1  mrg #
      4  1.1  mrg # For example, invoke scons as 
      5  1.1  mrg #
      6  1.1  mrg #   scons build=debug llvm=yes machine=x86
      7  1.1  mrg #
      8  1.1  mrg # to set configuration variables. Or you can write those options to a file
      9  1.1  mrg # named config.py:
     10  1.1  mrg #
     11  1.1  mrg #   # config.py
     12  1.1  mrg #   build='debug'
     13  1.1  mrg #   llvm=True
     14  1.1  mrg #   machine='x86'
     15  1.1  mrg # 
     16  1.1  mrg # Invoke
     17  1.1  mrg #
     18  1.1  mrg #   scons -h
     19  1.1  mrg #
     20  1.1  mrg # to get the full list of options. See scons manpage for more info.
     21  1.1  mrg #  
     22  1.1  mrg 
     23  1.1  mrg import os
     24  1.1  mrg import os.path
     25  1.1  mrg import sys
     26  1.1  mrg import SCons.Util
     27  1.1  mrg 
     28  1.1  mrg import common
     29  1.1  mrg 
     30  1.1  mrg #######################################################################
     31  1.1  mrg # Configuration options
     32  1.1  mrg 
     33  1.1  mrg opts = Variables('config.py')
     34  1.1  mrg common.AddOptions(opts)
     35  1.1  mrg 
     36  1.1  mrg env = Environment(
     37  1.1  mrg 	options = opts,
     38  1.1  mrg 	tools = ['gallium'],
     39  1.1  mrg 	toolpath = ['#scons'],	
     40  1.1  mrg 	ENV = os.environ,
     41  1.1  mrg )
     42  1.1  mrg 
     43  1.1  mrg # XXX: This creates a many problems as it saves...
     44  1.1  mrg #opts.Save('config.py', env)
     45  1.1  mrg 
     46  1.1  mrg # Backwards compatability with old target configuration variable
     47  1.1  mrg try:
     48  1.1  mrg     targets = ARGUMENTS['targets']
     49  1.1  mrg except KeyError:
     50  1.1  mrg     pass
     51  1.1  mrg else:
     52  1.1  mrg     targets = targets.split(',')
     53  1.1  mrg     print 'scons: warning: targets option is deprecated; pass the targets on their own such as'
     54  1.1  mrg     print
     55  1.1  mrg     print '  scons %s' % ' '.join(targets)
     56  1.1  mrg     print 
     57  1.1  mrg     COMMAND_LINE_TARGETS.append(targets)
     58  1.1  mrg 
     59  1.1  mrg 
     60  1.1  mrg Help(opts.GenerateHelpText(env))
     61  1.1  mrg 
     62  1.1  mrg #######################################################################
     63  1.1  mrg # Environment setup
     64  1.1  mrg 
     65  1.1  mrg with open("VERSION") as f:
     66  1.1  mrg   mesa_version = f.read().strip()
     67  1.1  mrg env.Append(CPPDEFINES = [
     68  1.1  mrg     ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
     69  1.1  mrg     ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
     70  1.1  mrg ])
     71  1.1  mrg 
     72  1.1  mrg # Includes
     73  1.1  mrg env.Prepend(CPPPATH = [
     74  1.1  mrg 	'#/include',
     75  1.1  mrg ])
     76  1.1  mrg env.Append(CPPPATH = [
     77  1.1  mrg 	'#/src/gallium/include',
     78  1.1  mrg 	'#/src/gallium/auxiliary',
     79  1.1  mrg 	'#/src/gallium/drivers',
     80  1.1  mrg 	'#/src/gallium/winsys',
     81  1.1  mrg ])
     82  1.1  mrg 
     83  1.1  mrg # for debugging
     84  1.1  mrg #print env.Dump()
     85  1.1  mrg 
     86  1.1  mrg 
     87  1.1  mrg #######################################################################
     88  1.1  mrg # Invoke host SConscripts 
     89  1.1  mrg # 
     90  1.1  mrg # For things that are meant to be run on the native host build machine, instead
     91  1.1  mrg # of the target machine.
     92  1.1  mrg #
     93  1.1  mrg 
     94  1.1  mrg # Create host environent
     95  1.1  mrg if env['crosscompile'] and not env['embedded']:
     96  1.1  mrg     host_env = Environment(
     97  1.1  mrg         options = opts,
     98  1.1  mrg         # no tool used
     99  1.1  mrg         tools = [],
    100  1.1  mrg         toolpath = ['#scons'],
    101  1.1  mrg         ENV = os.environ,
    102  1.1  mrg     )
    103  1.1  mrg 
    104  1.1  mrg     # Override options
    105  1.1  mrg     host_env['platform'] = common.host_platform
    106  1.1  mrg     host_env['machine'] = common.host_machine
    107  1.1  mrg     host_env['toolchain'] = 'default'
    108  1.1  mrg     host_env['llvm'] = False
    109  1.1  mrg 
    110  1.1  mrg     host_env.Tool('gallium')
    111  1.1  mrg 
    112  1.1  mrg     host_env['hostonly'] = True
    113  1.1  mrg     assert host_env['crosscompile'] == False
    114  1.1  mrg 
    115  1.1  mrg     target_env = env
    116  1.1  mrg     env = host_env
    117  1.1  mrg     Export('env')
    118  1.1  mrg 
    119  1.1  mrg     SConscript(
    120  1.1  mrg         'src/SConscript',
    121  1.1  mrg         variant_dir = host_env['build_dir'],
    122  1.1  mrg         duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
    123  1.1  mrg     )
    124  1.1  mrg 
    125  1.1  mrg     env = target_env
    126  1.1  mrg 
    127  1.1  mrg Export('env')
    128  1.1  mrg 
    129  1.1  mrg #######################################################################
    130  1.1  mrg # Invoke SConscripts
    131  1.1  mrg 
    132  1.1  mrg # TODO: Build several variants at the same time?
    133  1.1  mrg # http://www.scons.org/wiki/SimultaneousVariantBuilds
    134  1.1  mrg 
    135  1.1  mrg SConscript(
    136  1.1  mrg 	'src/SConscript',
    137  1.1  mrg 	variant_dir = env['build_dir'],
    138  1.1  mrg 	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
    139  1.1  mrg )
    140  1.1  mrg 
    141  1.1  mrg 
    142  1.1  mrg ########################################################################
    143  1.1  mrg # List all aliases
    144  1.1  mrg 
    145  1.1  mrg try:
    146  1.1  mrg     from SCons.Node.Alias import default_ans
    147  1.1  mrg except ImportError:
    148  1.1  mrg     pass
    149  1.1  mrg else:
    150  1.1  mrg     aliases = default_ans.keys()
    151  1.1  mrg     aliases.sort()
    152  1.1  mrg     env.Help('\n')
    153  1.1  mrg     env.Help('Recognized targets:\n')
    154  1.1  mrg     for alias in aliases:
    155  1.1  mrg         env.Help('    %s\n' % alias)
    156