scons: Add in a new type of unit test called GTest.
authorGabe Black <gabeblack@google.com>
Thu, 23 Nov 2017 02:10:06 +0000 (18:10 -0800)
committerGabe Black <gabeblack@google.com>
Tue, 28 Nov 2017 10:59:51 +0000 (10:59 +0000)
This type of unit test is almost the same as UnitTest, except that
it builds in the googletest library with the appropriate flags, and
it also omits all the gem5 object files by default.

Change-Id: I230db7ede563a73a9da0ebeed44aca389f724465
Reviewed-on: https://gem5-review.googlesource.com/6084
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/SConscript

index 2930bab55feee411750ea550e16500c94235b64b..2a495bffad1d78481dbf01afb70e99a31be3d396 100755 (executable)
@@ -269,7 +269,12 @@ class UnitTest(object):
         self.sources = srcs
         self.target = target
         self.main = kwargs.get('main', False)
-        UnitTest.all.append(self)
+        self.all.append(self)
+
+class GTest(UnitTest):
+    '''Create a unit test based on the google test framework.'''
+
+    all = []
 
 # Children should have access
 Export('Source')
@@ -277,6 +282,7 @@ Export('PySource')
 Export('SimObject')
 Export('ProtoBuf')
 Export('UnitTest')
+Export('GTest')
 
 ########################################################################
 #
@@ -1019,6 +1025,14 @@ def makeEnv(env, label, objsfx, strip=False, disable_partial=False, **kwargs):
         path = 'unittest/%s.%s' % (test.target, label)
         new_env.Program(path, test_objs + static_objs)
 
+    gtest_env = new_env.Clone()
+    gtest_env.Append(LIBS=gtest_env['GTEST_LIBS'])
+    gtest_env.Append(CPPFLAGS=gtest_env['GTEST_CPPFLAGS'])
+    for test in GTest.all:
+        test_sources = Source.all.with_tag(str(test.target))
+        test_objs = [ gtest_env.StaticObject(s.tnode) for s in test_sources ]
+        gtest_env.Program('unittest/%s.%s' % (test.target, label), test_objs)
+
     progname = exename
     if strip:
         progname += '.unstripped'