1 1.1 mrg ####################################################################### 2 1.1 mrg # Top-level SConstruct 3 1.1 mrg # 4 1.1.1.2 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.1.2 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.1.2 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.1.2 mrg # Minimal scons version 32 1.1.1.2 mrg 33 1.1.1.2 mrg EnsureSConsVersion(2, 4) 34 1.1.1.2 mrg EnsurePythonVersion(2, 7) 35 1.1.1.2 mrg 36 1.1.1.2 mrg 37 1.1.1.2 mrg ####################################################################### 38 1.1 mrg # Configuration options 39 1.1 mrg 40 1.1 mrg opts = Variables('config.py') 41 1.1 mrg common.AddOptions(opts) 42 1.1 mrg 43 1.1 mrg env = Environment( 44 1.1 mrg options = opts, 45 1.1 mrg tools = ['gallium'], 46 1.1.1.2 mrg toolpath = ['#scons'], 47 1.1 mrg ENV = os.environ, 48 1.1 mrg ) 49 1.1 mrg 50 1.1 mrg # XXX: This creates a many problems as it saves... 51 1.1 mrg #opts.Save('config.py', env) 52 1.1 mrg 53 1.1 mrg # Backwards compatability with old target configuration variable 54 1.1 mrg try: 55 1.1 mrg targets = ARGUMENTS['targets'] 56 1.1 mrg except KeyError: 57 1.1 mrg pass 58 1.1 mrg else: 59 1.1 mrg targets = targets.split(',') 60 1.1.1.2 mrg print('scons: warning: targets option is deprecated; pass the targets on their own such as') 61 1.1.1.2 mrg print() 62 1.1.1.2 mrg print(' scons %s' % ' '.join(targets)) 63 1.1.1.2 mrg print() 64 1.1 mrg COMMAND_LINE_TARGETS.append(targets) 65 1.1 mrg 66 1.1 mrg 67 1.1 mrg Help(opts.GenerateHelpText(env)) 68 1.1 mrg 69 1.1 mrg ####################################################################### 70 1.1 mrg # Environment setup 71 1.1 mrg 72 1.1 mrg with open("VERSION") as f: 73 1.1 mrg mesa_version = f.read().strip() 74 1.1 mrg env.Append(CPPDEFINES = [ 75 1.1 mrg ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version), 76 1.1 mrg ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'), 77 1.1 mrg ]) 78 1.1 mrg 79 1.1 mrg # Includes 80 1.1 mrg env.Prepend(CPPPATH = [ 81 1.1 mrg '#/include', 82 1.1 mrg ]) 83 1.1 mrg env.Append(CPPPATH = [ 84 1.1 mrg '#/src/gallium/include', 85 1.1 mrg '#/src/gallium/auxiliary', 86 1.1 mrg '#/src/gallium/drivers', 87 1.1 mrg '#/src/gallium/winsys', 88 1.1 mrg ]) 89 1.1 mrg 90 1.1 mrg # for debugging 91 1.1 mrg #print env.Dump() 92 1.1 mrg 93 1.1 mrg 94 1.1.1.2 mrg # Add a check target for running tests 95 1.1.1.2 mrg check = env.Alias('check') 96 1.1.1.2 mrg env.AlwaysBuild(check) 97 1.1.1.2 mrg 98 1.1.1.2 mrg 99 1.1 mrg ####################################################################### 100 1.1.1.2 mrg # Invoke host SConscripts 101 1.1.1.2 mrg # 102 1.1 mrg # For things that are meant to be run on the native host build machine, instead 103 1.1 mrg # of the target machine. 104 1.1 mrg # 105 1.1 mrg 106 1.1 mrg # Create host environent 107 1.1 mrg if env['crosscompile'] and not env['embedded']: 108 1.1 mrg host_env = Environment( 109 1.1 mrg options = opts, 110 1.1 mrg # no tool used 111 1.1 mrg tools = [], 112 1.1 mrg toolpath = ['#scons'], 113 1.1 mrg ENV = os.environ, 114 1.1 mrg ) 115 1.1 mrg 116 1.1 mrg # Override options 117 1.1 mrg host_env['platform'] = common.host_platform 118 1.1 mrg host_env['machine'] = common.host_machine 119 1.1 mrg host_env['toolchain'] = 'default' 120 1.1 mrg host_env['llvm'] = False 121 1.1 mrg 122 1.1 mrg host_env.Tool('gallium') 123 1.1 mrg 124 1.1 mrg host_env['hostonly'] = True 125 1.1 mrg assert host_env['crosscompile'] == False 126 1.1 mrg 127 1.1 mrg target_env = env 128 1.1 mrg env = host_env 129 1.1 mrg Export('env') 130 1.1 mrg 131 1.1 mrg SConscript( 132 1.1 mrg 'src/SConscript', 133 1.1 mrg variant_dir = host_env['build_dir'], 134 1.1 mrg duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html 135 1.1 mrg ) 136 1.1 mrg 137 1.1 mrg env = target_env 138 1.1 mrg 139 1.1 mrg Export('env') 140 1.1 mrg 141 1.1 mrg ####################################################################### 142 1.1 mrg # Invoke SConscripts 143 1.1 mrg 144 1.1 mrg # TODO: Build several variants at the same time? 145 1.1 mrg # http://www.scons.org/wiki/SimultaneousVariantBuilds 146 1.1 mrg 147 1.1 mrg SConscript( 148 1.1 mrg 'src/SConscript', 149 1.1 mrg variant_dir = env['build_dir'], 150 1.1 mrg duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html 151 1.1 mrg ) 152 1.1 mrg 153 1.1 mrg 154 1.1 mrg ######################################################################## 155 1.1 mrg # List all aliases 156 1.1 mrg 157 1.1 mrg try: 158 1.1 mrg from SCons.Node.Alias import default_ans 159 1.1 mrg except ImportError: 160 1.1 mrg pass 161 1.1 mrg else: 162 1.1.1.2 mrg aliases = sorted(default_ans.keys()) 163 1.1 mrg env.Help('\n') 164 1.1 mrg env.Help('Recognized targets:\n') 165 1.1 mrg for alias in aliases: 166 1.1 mrg env.Help(' %s\n' % alias) 167