Add a new SCons option called EXTRAS that allows you to include stuff in
authorNathan Binkert <nate@binkert.org>
Thu, 26 Jul 2007 01:21:11 +0000 (18:21 -0700)
committerNathan Binkert <nate@binkert.org>
Thu, 26 Jul 2007 01:21:11 +0000 (18:21 -0700)
the build process that is outside of the main M5 tree.

--HG--
extra : convert_revision : 6edc4fbc58240f83b59c7b5707c0390cdb85d9ec

SConstruct
src/SConscript

index ec60964e48ce4f53993b69360dac9d3b3ddb7549..1f3dfb5bba2f3abbc3e26a8b4d7014c940a5f2e5 100644 (file)
@@ -435,6 +435,13 @@ all_isa_list.sort()
 all_cpu_list.sort()
 default_cpus.sort()
 
+def ExtraPathValidator(key, val, env):
+    paths = val.split(':')
+    for path in paths:
+        path = os.path.expanduser(path)
+        if not isdir(path):
+            raise AttributeError, "Invalid path: '%s'" % path
+
 sticky_opts.AddOptions(
     EnumOption('TARGET_ISA', 'Target ISA', 'alpha', all_isa_list),
     BoolOption('FULL_SYSTEM', 'Full-system support', False),
@@ -461,7 +468,9 @@ sticky_opts.AddOptions(
     ('BATCH_CMD', 'Batch pool submission command name', 'qdo'),
     ('PYTHONHOME',
      'Override the default PYTHONHOME for this system (use with caution)',
-     '%s:%s' % (sys.prefix, sys.exec_prefix))
+     '%s:%s' % (sys.prefix, sys.exec_prefix)),
+    ('EXTRAS', 'Add Extra directories to the compilation', '',
+     ExtraPathValidator)
     )
 
 nonsticky_opts.AddOptions(
@@ -613,6 +622,8 @@ base_env = env
 
 for build_path in build_paths:
     print "Building in", build_path
+    env['BUILDDIR'] = build_path
+
     # build_dir is the tail component of build path, and is used to
     # determine the build parameters (e.g., 'ALPHA_SE')
     (build_root, build_dir) = os.path.split(build_path)
index 34c14dc51302dc5f9284a9d1446a598049bc9959..1cd1a1627a28652748ff84771f8ab6023a3c827f 100644 (file)
@@ -151,7 +151,6 @@ env.Append(CPPDEFINES=[('THE_ISA','%s_ISA' % env['TARGET_ISA'].upper())])
 #
 # Walk the tree and execute all SConscripts
 #
-scripts = []
 srcdir = env['SRCDIR']
 for root, dirs, files in os.walk(srcdir, topdown=True):
     if root == srcdir:
@@ -164,6 +163,15 @@ for root, dirs, files in os.walk(srcdir, topdown=True):
         base = root[len(srcdir) + 1:]
         SConscript(joinpath(base, 'SConscript'))
 
+for extra in env['EXTRAS'].split(':'):
+    extra = os.path.expanduser(extra)
+    env.Append(CPPPATH=[Dir(extra)])
+    for root, dirs, files in os.walk(extra, topdown=True):
+        if 'SConscript' in files:
+            subdir = root[len(os.path.dirname(extra))+1:]
+            build_dir = joinpath(env['BUILDDIR'], subdir)
+            SConscript(joinpath(root, 'SConscript'), build_dir=build_dir)
+
 for opt in env.ExportOptions:
     env.ConfigFile(opt)