SConstruct (10181:6270235e0585) | SConstruct (10196:be0e1724eb39) |
---|---|
1# -*- mode:python -*- 2 3# Copyright (c) 2013 ARM Limited 4# All rights reserved. 5# 6# The license below extends only to copyright in the software and shall 7# not be construed as granting a license to any other intellectual 8# property including but not limited to intellectual property relating --- 95 unchanged lines hidden (view full) --- 104'python-config' first. 105 106For more details, see: 107 http://gem5.org/wiki/index.php/Using_a_non-default_Python_installation 108""" 109 raise 110 111# Global Python includes | 1# -*- mode:python -*- 2 3# Copyright (c) 2013 ARM Limited 4# All rights reserved. 5# 6# The license below extends only to copyright in the software and shall 7# not be construed as granting a license to any other intellectual 8# property including but not limited to intellectual property relating --- 95 unchanged lines hidden (view full) --- 104'python-config' first. 105 106For more details, see: 107 http://gem5.org/wiki/index.php/Using_a_non-default_Python_installation 108""" 109 raise 110 111# Global Python includes |
112import itertools |
|
112import os 113import re 114import subprocess 115import sys 116 117from os import mkdir, environ 118from os.path import abspath, basename, dirname, expanduser, normpath 119from os.path import exists, isdir, isfile --- 1035 unchanged lines hidden (view full) --- 1155 1156################################################### 1157# 1158# This function is used to set up a directory with switching headers 1159# 1160################################################### 1161 1162main['ALL_ISA_LIST'] = all_isa_list | 113import os 114import re 115import subprocess 116import sys 117 118from os import mkdir, environ 119from os.path import abspath, basename, dirname, expanduser, normpath 120from os.path import exists, isdir, isfile --- 1035 unchanged lines hidden (view full) --- 1156 1157################################################### 1158# 1159# This function is used to set up a directory with switching headers 1160# 1161################################################### 1162 1163main['ALL_ISA_LIST'] = all_isa_list |
1164all_isa_deps = {} |
|
1163def make_switching_dir(dname, switch_headers, env): 1164 # Generate the header. target[0] is the full path of the output 1165 # header to generate. 'source' is a dummy variable, since we get the 1166 # list of ISAs from env['ALL_ISA_LIST']. 1167 def gen_switch_hdr(target, source, env): 1168 fname = str(target[0]) | 1165def make_switching_dir(dname, switch_headers, env): 1166 # Generate the header. target[0] is the full path of the output 1167 # header to generate. 'source' is a dummy variable, since we get the 1168 # list of ISAs from env['ALL_ISA_LIST']. 1169 def gen_switch_hdr(target, source, env): 1170 fname = str(target[0]) |
1169 f = open(fname, 'w') | |
1170 isa = env['TARGET_ISA'].lower() | 1171 isa = env['TARGET_ISA'].lower() |
1171 print >>f, '#include "%s/%s/%s"' % (dname, isa, basename(fname)) 1172 f.close() | 1172 try: 1173 f = open(fname, 'w') 1174 print >>f, '#include "%s/%s/%s"' % (dname, isa, basename(fname)) 1175 f.close() 1176 except IOError: 1177 print "Failed to create %s" % fname 1178 raise |
1173 1174 # Build SCons Action object. 'varlist' specifies env vars that this 1175 # action depends on; when env['ALL_ISA_LIST'] changes these actions 1176 # should get re-executed. 1177 switch_hdr_action = MakeAction(gen_switch_hdr, 1178 Transform("GENERATE"), varlist=['ALL_ISA_LIST']) 1179 1180 # Instantiate actions for each header 1181 for hdr in switch_headers: 1182 env.Command(hdr, [], switch_hdr_action) | 1179 1180 # Build SCons Action object. 'varlist' specifies env vars that this 1181 # action depends on; when env['ALL_ISA_LIST'] changes these actions 1182 # should get re-executed. 1183 switch_hdr_action = MakeAction(gen_switch_hdr, 1184 Transform("GENERATE"), varlist=['ALL_ISA_LIST']) 1185 1186 # Instantiate actions for each header 1187 for hdr in switch_headers: 1188 env.Command(hdr, [], switch_hdr_action) |
1189 1190 isa_target = Dir('.').up().name.lower().replace('_', '-') 1191 env['PHONY_BASE'] = '#'+isa_target 1192 all_isa_deps[isa_target] = None 1193 |
|
1183Export('make_switching_dir') 1184 | 1194Export('make_switching_dir') 1195 |
1196# all-isas -> all-deps -> all-environs -> all_targets 1197main.Alias('#all-isas', []) 1198main.Alias('#all-deps', '#all-isas') 1199 1200# Dummy target to ensure all environments are created before telling 1201# SCons what to actually make (the command line arguments). We attach 1202# them to the dependence graph after the environments are complete. 1203ORIG_BUILD_TARGETS = list(BUILD_TARGETS) # force a copy; gets closure to work. 1204def environsComplete(target, source, env): 1205 for t in ORIG_BUILD_TARGETS: 1206 main.Depends('#all-targets', t) 1207 1208# Each build/* switching_dir attaches its *-environs target to #all-environs. 1209main.Append(BUILDERS = {'CompleteEnvirons' : 1210 Builder(action=MakeAction(environsComplete, None))}) 1211main.CompleteEnvirons('#all-environs', []) 1212 1213def doNothing(**ignored): pass 1214main.Append(BUILDERS = {'Dummy': Builder(action=MakeAction(doNothing, None))}) 1215 1216# The final target to which all the original targets ultimately get attached. 1217main.Dummy('#all-targets', '#all-environs') 1218BUILD_TARGETS[:] = ['#all-targets'] 1219 |
|
1185################################################### 1186# 1187# Define build environments for selected configurations. 1188# 1189################################################### 1190 1191for variant_path in variant_paths: 1192 if not GetOption('silent'): --- 92 unchanged lines hidden (view full) --- 1285 sticky_vars.Save(current_vars_file, env) 1286 1287 if env['USE_SSE2']: 1288 env.Append(CCFLAGS=['-msse2']) 1289 1290 # The src/SConscript file sets up the build rules in 'env' according 1291 # to the configured variables. It returns a list of environments, 1292 # one for each variant build (debug, opt, etc.) | 1220################################################### 1221# 1222# Define build environments for selected configurations. 1223# 1224################################################### 1225 1226for variant_path in variant_paths: 1227 if not GetOption('silent'): --- 92 unchanged lines hidden (view full) --- 1320 sticky_vars.Save(current_vars_file, env) 1321 1322 if env['USE_SSE2']: 1323 env.Append(CCFLAGS=['-msse2']) 1324 1325 # The src/SConscript file sets up the build rules in 'env' according 1326 # to the configured variables. It returns a list of environments, 1327 # one for each variant build (debug, opt, etc.) |
1293 envList = SConscript('src/SConscript', variant_dir = variant_path, 1294 exports = 'env') | 1328 SConscript('src/SConscript', variant_dir = variant_path, exports = 'env') |
1295 | 1329 |
1296 # Set up the regression tests for each build. 1297 for e in envList: 1298 SConscript('tests/SConscript', 1299 variant_dir = joinpath(variant_path, 'tests', e.Label), 1300 exports = { 'env' : e }, duplicate = False) | 1330def pairwise(iterable): 1331 "s -> (s0,s1), (s1,s2), (s2, s3), ..." 1332 a, b = itertools.tee(iterable) 1333 b.next() 1334 return itertools.izip(a, b) |
1301 | 1335 |
1336# Create false dependencies so SCons will parse ISAs, establish 1337# dependencies, and setup the build Environments serially. Either 1338# SCons (likely) and/or our SConscripts (possibly) cannot cope with -j 1339# greater than 1. It appears to be standard race condition stuff; it 1340# doesn't always fail, but usually, and the behaviors are different. 1341# Every time I tried to remove this, builds would fail in some 1342# creative new way. So, don't do that. You'll want to, though, because 1343# tests/SConscript takes a long time to make its Environments. 1344for t1, t2 in pairwise(sorted(all_isa_deps.iterkeys())): 1345 main.Depends('#%s-deps' % t2, '#%s-deps' % t1) 1346 main.Depends('#%s-environs' % t2, '#%s-environs' % t1) 1347 |
|
1302# base help text 1303Help(''' 1304Usage: scons [scons options] [build variables] [target(s)] 1305 1306Extra scons options: 1307%(options)s 1308 1309Global build variables: 1310%(global_vars)s 1311 1312%(local_vars)s 1313''' % help_texts) | 1348# base help text 1349Help(''' 1350Usage: scons [scons options] [build variables] [target(s)] 1351 1352Extra scons options: 1353%(options)s 1354 1355Global build variables: 1356%(global_vars)s 1357 1358%(local_vars)s 1359''' % help_texts) |