scons, tests: Add support for GTest XML generation
authorAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 13 Dec 2017 11:14:28 +0000 (11:14 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 13 Dec 2017 23:57:08 +0000 (23:57 +0000)
The GTest framework supports result generation in XML (JUnit). Enable
this by creating unit test specific targets in the
build/${BUILD_OPTS}/unittests.${VARIANT} directory. Targets in the
directory use the following naming convention:

${SRC_PATH}/${TEST_NAME}.xml

For example, the opt version of the bitunion test built for ARM would
have this path:

build/ARM/unittests.opt/base/bituniontest.xml

Change-Id: I174dff16817734db05b08ce1d5bcf52e8697bbac
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/6624
Reviewed-by: Gabe Black <gabeblack@google.com>
src/SConscript

index 57a2d96483f53bcd39371a441944743871443a8f..a98fbc433d9af1d422985c0662b8867ce7e100d7 100755 (executable)
@@ -1090,7 +1090,7 @@ def makeEnv(env, label, objsfx, strip=False, disable_partial=False, **kwargs):
     gtest_env.Append(LIBS=gtest_env['GTEST_LIBS'])
     gtest_env.Append(CPPFLAGS=gtest_env['GTEST_CPPFLAGS'])
     gtestlib_sources = Source.all.with_tag('gtest lib')
-    gtests = []
+    gtest_out_dir = Dir(new_env['BUILDDIR']).Dir('unittests.%s' % label)
     for test in GTest.all:
         test_sources = test.sources
         if not test.skip_lib:
@@ -1098,11 +1098,12 @@ def makeEnv(env, label, objsfx, strip=False, disable_partial=False, **kwargs):
         for f in test.filters:
             test_sources += Source.all.apply_filter(f)
         test_objs = [ s.static(gtest_env) for s in test_sources ]
-        gtests.append(gtest_env.Program(
-            test.dir.File('%s.%s' % (test.target, label)), test_objs))
+        test_binary = gtest_env.Program(
+            test.dir.File('%s.%s' % (test.target, label)), test_objs)
 
-    gtest_target = Dir(new_env['BUILDDIR']).File('unittests.%s' % label)
-    AlwaysBuild(gtest_env.Command(gtest_target, gtests, gtests))
+        AlwaysBuild(gtest_env.Command(
+            gtest_out_dir.File("%s/%s.xml" % (test.dir, test.target)),
+            test_binary, "${SOURCES[0]} --gtest_output=xml:${TARGETS[0]}"))
 
     progname = exename
     if strip: