summaryrefslogtreecommitdiff
path: root/SConstruct
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2017-05-01 21:58:41 -0700
committerGabe Black <gabeblack@google.com>2017-05-10 16:52:24 +0000
commit8ee95f3d1164b3320fee3595f7ec9d8c9687dcad (patch)
treef917a83b092ca8ed557838dd7ad2e56ec54c39f2 /SConstruct
parent942e2957994fc6779a5540c3b94a8756258e3149 (diff)
downloadgem5-8ee95f3d1164b3320fee3595f7ec9d8c9687dcad.tar.xz
scons: arch: Generalize the switching header code.
Factor out the ISA ness of the switching header generating function. Also turn it into a SCons builder which builds a single header, and a wrapping method which uses the builder on a group of header files which all target the same subdirectory. Change-Id: I87705f97b6ebd9baebd4ebcfea19cc1218a64ad0 Reviewed-on: https://gem5-review.googlesource.com/2983 Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'SConstruct')
-rwxr-xr-xSConstruct50
1 files changed, 25 insertions, 25 deletions
diff --git a/SConstruct b/SConstruct
index bf6a0c624..1efd1068d 100755
--- a/SConstruct
+++ b/SConstruct
@@ -1324,38 +1324,38 @@ main.Prepend(CPPPATH=Dir('ext/pybind11/include/'))
###################################################
#
-# This function is used to set up a directory with switching headers
+# This builder and wrapper method are used to set up a directory with
+# switching headers. Those are headers which are in a generic location and
+# that include more specific headers from a directory chosen at build time
+# based on the current build settings.
#
###################################################
-main['ALL_ISA_LIST'] = all_isa_list
main['ALL_GPU_ISA_LIST'] = all_gpu_isa_list
-def make_switching_dir(dname, switch_headers, env):
- # Generate the header. target[0] is the full path of the output
- # header to generate. 'source' is a dummy variable, since we get the
- # list of ISAs from env['ALL_ISA_LIST'].
- def gen_switch_hdr(target, source, env):
- fname = str(target[0])
- isa = env['TARGET_ISA'].lower()
- try:
- f = open(fname, 'w')
- print >>f, '#include "%s/%s/%s"' % (dname, isa, basename(fname))
- f.close()
- except IOError:
- print "Failed to create %s" % fname
- raise
- # Build SCons Action object. 'varlist' specifies env vars that this
- # action depends on; when env['ALL_ISA_LIST'] changes these actions
- # should get re-executed.
- switch_hdr_action = MakeAction(gen_switch_hdr,
- Transform("GENERATE"), varlist=['ALL_ISA_LIST'])
+def build_switching_header(target, source, env):
+ path = str(target[0])
+ subdir = str(source[0])
+ dp, fp = os.path.split(path)
+ dp = os.path.relpath(os.path.realpath(dp),
+ os.path.realpath(env['BUILDDIR']))
+ with open(path, 'w') as hdr:
+ print >>hdr, '#include "%s/%s/%s"' % (dp, subdir, fp)
- # Instantiate actions for each header
- for hdr in switch_headers:
- env.Command(hdr, [], switch_hdr_action)
+switching_header_action = MakeAction(build_switching_header,
+ Transform('GENERATE'))
+
+switching_header_builder = Builder(action=switching_header_action,
+ source_factory=Value,
+ single_source=True)
+
+main.Append(BUILDERS = { 'SwitchingHeader': switching_header_builder })
+
+def switching_headers(self, headers, source):
+ for header in headers:
+ self.SwitchingHeader(header, source)
-Export('make_switching_dir')
+main.AddMethod(switching_headers, 'SwitchingHeaders')
def make_gpu_switching_dir(dname, switch_headers, env):
# Generate the header. target[0] is the full path of the output