ci: Run tests on i386 cross builds
authorAdam Jackson <ajax@redhat.com>
Tue, 17 Sep 2019 00:44:12 +0000 (20:44 -0400)
committerAdam Jackson <ajax@redhat.com>
Tue, 17 Sep 2019 18:53:57 +0000 (14:53 -0400)
Yes, some tests fail, but we can turn those into XFAILs at meson time.
Better to keep the things that work working than not cover them at all.
Unfortunately XPASS results will not cause the build to fail until we
update CI to meson 0.51 or newer.

Reviewed-by: Daniel Stone <daniels@collabora.com>
.gitlab-ci.yml
.gitlab-ci/cross-xfail-i386 [new file with mode: 0644]
.gitlab-ci/meson-build.sh
src/gallium/tests/unit/meson.build

index 579afee96f6981bae4e809eed70eb02a90a801b7..db99a1f76da888f39db709dedf36984bab77a142 100644 (file)
@@ -312,10 +312,7 @@ meson-i386:
     VULKAN_DRIVERS: intel
     DRI_DRIVERS: "swrast"
     GALLIUM_DRIVERS: "iris"
-    # Disable i386 tests, because u_format_tests gets precision
-    # failures in dxtn unpacking
     EXTRA_OPTION: >
-      -D build-tests=false
       -D vulkan-overlay-layer=true
       -D llvm=false
       -D osmesa=classic
diff --git a/.gitlab-ci/cross-xfail-i386 b/.gitlab-ci/cross-xfail-i386
new file mode 100644 (file)
index 0000000..b4a3ea4
--- /dev/null
@@ -0,0 +1 @@
+u_format_test
index 7e74095c4bb19e75e0bdc7c8adbc502e82832d5c..cd0b62e4767bde26db369c5c44fdf818799be1f9 100755 (executable)
@@ -14,9 +14,32 @@ else
     touch native.file
 fi
 
+CROSS_FILE=/cross_file-"$CROSS".txt
+
+# cross-xfail-$CROSS, if it exists, contains a list of tests that are expected
+# to fail for the $CROSS configuration, one per line. you can then mark those
+# tests in their meson.build with:
+#
+# test(...,
+#      should_fail: meson.get_cross_property('xfail', '').contains(t),
+#     )
+#
+# where t is the name of the test, and the '' is the string to search when
+# not cross-compiling (which is empty, because for amd64 everything is
+# expected to pass).
+if [ -n "$CROSS" ]; then
+    CROSS_XFAIL=.gitlab-ci/cross-xfail-"$CROSS"
+    if [ -s "$CROSS_XFAIL" ]; then
+        sed -i \
+            -e '/\[properties\]/a\' \
+            -e "xfail = '$(tr '\n' , < $CROSS_XFAIL)'" \
+            "$CROSS_FILE"
+    fi
+fi
+
 rm -rf _build
 meson _build --native-file=native.file \
-      ${CROSS+--cross /cross_file-$CROSS.txt} \
+      ${CROSS+--cross "$CROSS_FILE"} \
       -D prefix=`pwd`/install \
       -D libdir=lib \
       -D buildtype=${BUILDTYPE:-debug} \
@@ -45,7 +68,7 @@ rm -rf install/include
 
 # Strip the drivers in the artifacts to cut 80% of the artifacts size.
 if [ -n "$CROSS" ]; then
-    STRIP=`sed -n -E "s/strip\s*=\s*'(.*)'/\1/p" /cross_file-$CROSS.txt`
+    STRIP=`sed -n -E "s/strip\s*=\s*'(.*)'/\1/p" "$CROSS_FILE"`
     if [ -z "$STRIP" ]; then
         echo "Failed to find strip command in cross file"
         exit 1
index afde9840c370d6ec4dba2cdf5797c229869e1053..976218f22b7f3787c46cf356a07d8acdc0e1b9c1 100644 (file)
@@ -31,6 +31,8 @@ foreach t : ['pipe_barrier_test', 'u_cache_test', 'u_half_test',
   )
   # u_cache_test is slow, and translate_test fails.
   if not ['u_cache_test', 'translate_test'].contains(t)
-    test(t, exe, suite: 'gallium')
+    test(t, exe, suite: 'gallium',
+         should_fail : meson.get_cross_property('xfail', '').contains(t),
+    )
   endif
 endforeach