build scripts: Made minor modifications to reduce build overhead time.
authorMarc Orr <marc.orr@gmail.com>
Wed, 7 Mar 2012 03:07:41 +0000 (19:07 -0800)
committerMarc Orr <marc.orr@gmail.com>
Wed, 7 Mar 2012 03:07:41 +0000 (19:07 -0800)
1. --implicit-cache behavior is default.
2. makeEnv in src/SConscript is conditionally called.
3. decider set to MD5-timestamp
4. NO_HTML build option changed to SLICC_HTML (defaults to False)

SConstruct
src/SConscript
src/mem/protocol/SConscript
src/mem/protocol/SConsopts

index f5a46286ccc0930b31b0c82bdce74a1388097ec8..19bc6e41b05510b3130cd7a9ee30147ff8818c34 100755 (executable)
@@ -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
 
index 679403020a2a6ee55756ff86835361f7d46ddd09..c017b601b1a263c843b4d2c96ab0bd16a242e144 100755 (executable)
@@ -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')
index e7efe8b1c5ff96a3f099fa432a8ec79640e263e5..9ef38d289a5933d68150069225ff1d26c1e1101f 100644 (file)
@@ -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")),
index 6a6bd798e0cbd16f2524b8cf60aa595128add981..78b93c40e1de5a9f20b90ec0db4bf18b37186f29 100644 (file)
@@ -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)