summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xSConstruct2
-rwxr-xr-xsrc/SConscript54
-rw-r--r--src/mem/protocol/SConscript4
-rw-r--r--src/mem/protocol/SConsopts2
4 files changed, 46 insertions, 16 deletions
diff --git a/SConstruct b/SConstruct
index f5a46286c..19bc6e41b 100755
--- a/SConstruct
+++ b/SConstruct
@@ -192,6 +192,8 @@ for key,val in os.environ.iteritems():
use_env[key] = val
main = Environment(ENV=use_env)
+main.Decider('MD5-timestamp')
+main.SetOption('implicit_cache', 1)
main.root = Dir(".") # The current directory (where this file lives).
main.srcdir = Dir("src") # The source directory
diff --git a/src/SConscript b/src/SConscript
index 679403020..c017b601b 100755
--- a/src/SConscript
+++ b/src/SConscript
@@ -953,24 +953,52 @@ else:
print 'Unknown compiler, please fix compiler options'
Exit(1)
-makeEnv('debug', '.do',
- CCFLAGS = Split(ccflags['debug']),
- CPPDEFINES = ['DEBUG', 'TRACING_ON=1'])
+
+# To speed things up, we only instantiate the build environments we
+# need. We try to identify the needed environment for each target; if
+# we can't, we fall back on instantiating all the environments just to
+# be safe.
+target_types = ['debug', 'opt', 'fast', 'prof']
+obj2target = {'do': 'debug', 'o': 'opt', 'fo': 'fast', 'po': 'prof'}
+
+def identifyTarget(t):
+ ext = t.split('.')[-1]
+ if ext in target_types:
+ return ext
+ if obj2target.has_key(ext):
+ return obj2target[ext]
+ match = re.search(r'/tests/([^/]+)/', t)
+ if match and match.group(1) in target_types:
+ return match.group(1)
+ return 'all'
+
+needed_envs = [identifyTarget(target) for target in BUILD_TARGETS]
+if 'all' in needed_envs:
+ needed_envs += target_types
+
+# Debug binary
+if 'debug' in needed_envs:
+ makeEnv('debug', '.do',
+ CCFLAGS = Split(ccflags['debug']),
+ CPPDEFINES = ['DEBUG', 'TRACING_ON=1'])
# Optimized binary
-makeEnv('opt', '.o',
- CCFLAGS = Split(ccflags['opt']),
- CPPDEFINES = ['TRACING_ON=1'])
+if 'opt' in needed_envs:
+ makeEnv('opt', '.o',
+ CCFLAGS = Split(ccflags['opt']),
+ CPPDEFINES = ['TRACING_ON=1'])
# "Fast" binary
-makeEnv('fast', '.fo', strip = True,
- CCFLAGS = Split(ccflags['fast']),
- CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'])
+if 'fast' in needed_envs:
+ makeEnv('fast', '.fo', strip = True,
+ CCFLAGS = Split(ccflags['fast']),
+ CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'])
# Profiled binary
-makeEnv('prof', '.po',
- CCFLAGS = Split(ccflags['prof']),
- CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'],
- LINKFLAGS = '-pg')
+if 'prof' in needed_envs:
+ makeEnv('prof', '.po',
+ CCFLAGS = Split(ccflags['prof']),
+ CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'],
+ LINKFLAGS = '-pg')
Return('envList')
diff --git a/src/mem/protocol/SConscript b/src/mem/protocol/SConscript
index e7efe8b1c..9ef38d289 100644
--- a/src/mem/protocol/SConscript
+++ b/src/mem/protocol/SConscript
@@ -69,7 +69,7 @@ def slicc_emitter(target, source, env):
slicc = SLICC(filepath, verbose=False)
slicc.process()
slicc.writeCodeFiles(protocol_dir.abspath)
- if not env['NO_HTML']:
+ if env['SLICC_HTML']:
slicc.writeHTMLFiles(html_dir.abspath)
target.extend([protocol_dir.File(f) for f in sorted(slicc.files())])
@@ -82,7 +82,7 @@ def slicc_action(target, source, env):
slicc = SLICC(filepath, verbose=True)
slicc.process()
slicc.writeCodeFiles(protocol_dir.abspath)
- if not env['NO_HTML']:
+ if env['SLICC_HTML']:
slicc.writeHTMLFiles(html_dir.abspath)
slicc_builder = Builder(action=MakeAction(slicc_action, Transform("SLICC")),
diff --git a/src/mem/protocol/SConsopts b/src/mem/protocol/SConsopts
index 6a6bd798e..78b93c40e 100644
--- a/src/mem/protocol/SConsopts
+++ b/src/mem/protocol/SConsopts
@@ -48,5 +48,5 @@ opt = EnumVariable('PROTOCOL', 'Coherence protocol for Ruby', 'None',
sticky_vars.AddVariables(opt)
export_vars += ['PROTOCOL']
-opt = BoolVariable('NO_HTML', 'Do not create HTML files', False)
+opt = BoolVariable('SLICC_HTML', 'Create HTML files', False)
sticky_vars.AddVariables(opt)