summaryrefslogtreecommitdiff
path: root/src/SConscript
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-06-01 23:06:26 -0700
committerGabe Black <gabeblack@google.com>2018-06-13 23:02:03 +0000
commit31791727d3ec6aed00557dbb4770637df67c473d (patch)
treeef0073bb0a5985bbcf88faf616e7c9ac64c2503c /src/SConscript
parent28bd53e4e9fb426b2531f9ffb20327d6524db339 (diff)
downloadgem5-31791727d3ec6aed00557dbb4770637df67c473d.tar.xz
tests: Make "UnitTest"s more like GTest so they can be in other dirs.
The original implementation of UnitTest forced all the output binaries to live in the unittest directory, effectively forcing a flat namespace, and seperating the tests from the things they were supposed to be testing. This changes makes them work more like the newer GTest tests in that they can be based out of whatever directory makes sense, although they're currently all still in unittest for the time being. This change also gets rid of automatically tagging the sources associated with a test with the tests name. The first reason for that was that this also forced a flat namespace, since the tests names didn't have any reference to the test's path. Second, this way of pulling in additional files wasn't necessary any more, now that the UnitTest sources could be source filters like they can be for GTests. Change-Id: I3d96ed766ac5170842dbd6daee39f2873bcd6c75 Reviewed-on: https://gem5-review.googlesource.com/10701 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/SConscript')
-rwxr-xr-xsrc/SConscript26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/SConscript b/src/SConscript
index 339059dfb..b76e075ee 100755
--- a/src/SConscript
+++ b/src/SConscript
@@ -315,31 +315,31 @@ class UnitTest(object):
'''Create a UnitTest'''
all = []
- def __init__(self, target, *sources, **kwargs):
- '''Specify the target name and any sources. Sources that are
- not SourceFiles are evalued with Source(). All files are
- tagged with the name of the UnitTest target.'''
+ def __init__(self, target, *srcs_and_filts, **kwargs):
+ '''Specify the target name and any sources. Sources that are
+ not SourceFiles are evalued with Source().'''
+
+ isFilter = lambda arg: isinstance(arg, SourceFilter)
+ self.filters = filter(isFilter, srcs_and_filts)
+ sources = filter(lambda a: not isFilter(a), srcs_and_filts)
srcs = SourceList()
for src in sources:
if not isinstance(src, SourceFile):
- src = Source(src, tags=str(target))
+ src = Source(src, tags=[])
srcs.append(src)
self.sources = srcs
self.target = target
self.main = kwargs.get('main', False)
self.all.append(self)
+ self.dir = Dir('.')
class GTest(UnitTest):
'''Create a unit test based on the google test framework.'''
all = []
def __init__(self, *args, **kwargs):
- isFilter = lambda arg: isinstance(arg, SourceFilter)
- self.filters = filter(isFilter, args)
- args = filter(lambda a: not isFilter(a), args)
super(GTest, self).__init__(*args, **kwargs)
- self.dir = Dir('.')
self.skip_lib = kwargs.pop('skip_lib', False)
# Children should have access
@@ -1081,12 +1081,14 @@ def makeEnv(env, label, objsfx, strip=False, disable_partial=False, **kwargs):
main_objs = [ s.static(new_env) for s in Source.all.with_tag('main') ]
for test in UnitTest.all:
- test_sources = Source.all.with_tag(str(test.target))
+ test_sources = list(test.sources)
+ for f in test.filters:
+ test_sources += Source.all.apply_filter(f)
test_objs = [ s.static(new_env) for s in test_sources ]
if test.main:
test_objs += main_objs
- path = 'unittest/%s.%s' % (test.target, label)
- new_env.Program(path, test_objs + static_objs)
+ new_env.Program(test.dir.File('%s.%s' % (test.target, label)),
+ test_objs + static_objs)
gtest_env = new_env.Clone()
gtest_env.Append(LIBS=gtest_env['GTEST_LIBS'])