Browse Source

package/ci: test desktop GL build with llvmpipe via EGL.

This apparently works well for quite some time (this is Ubuntu 18.04,
after all!), I just didn't know because the build defaults to GLX which
doesn't work headless. So, yeah, code coverage, here I come!
pull/680/head
Vladimír Vondruš 10 months ago
parent
commit
e6e36ab0e9
  1. 30
      package/ci/circleci.yml
  2. 27
      package/ci/unix-desktop.sh

30
package/ci/circleci.yml

@ -333,6 +333,8 @@ jobs:
CMAKE_CXX_FLAGS: --coverage CMAKE_CXX_FLAGS: --coverage
LCOV_EXTRA_OPTS: --gcov-tool /usr/bin/gcov-4.8 LCOV_EXTRA_OPTS: --gcov-tool /usr/bin/gcov-4.8
CONFIGURATION: Debug CONFIGURATION: Debug
# STUPID yml interprets unquoted ON as a boolean
TARGET_EGL: "ON"
EXTRA_OPTS: > EXTRA_OPTS: >
-DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_GLXAPPLICATION=ON
-DMAGNUM_WITH_XEGLAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON
@ -362,6 +364,14 @@ jobs:
environment: environment:
CMAKE_CXX_FLAGS: --coverage CMAKE_CXX_FLAGS: --coverage
CONFIGURATION: Debug CONFIGURATION: Debug
# The ARM64 job is a machine job, not a VM, which means running GL tests
# will get more expensive. But it's a newer Ubuntu version, meaning it
# could provide better coverage than the base job, so enabling EGL to run
# the tests. OTOH, the ASan and TSan jobs have them disabled, so the GLX
# code paths are tested there. (Also STUPID yml interprets unquoted ON as
# a boolean.)
# TODO switch to OFF when the main job is upgraded to a newer OS version
TARGET_EGL: "ON"
EXTRA_OPTS: > EXTRA_OPTS: >
-DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_GLXAPPLICATION=ON
-DMAGNUM_WITH_XEGLAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON
@ -489,6 +499,8 @@ jobs:
CMAKE_CXX_FLAGS: --coverage CMAKE_CXX_FLAGS: --coverage
LCOV_EXTRA_OPTS: --gcov-tool /usr/bin/gcov-4.8 LCOV_EXTRA_OPTS: --gcov-tool /usr/bin/gcov-4.8
CONFIGURATION: Debug CONFIGURATION: Debug
# STUPID yml interprets unquoted ON as a boolean
TARGET_EGL: "ON"
steps: steps:
# libidn11 needed by CMake # libidn11 needed by CMake
- install-base-linux: - install-base-linux:
@ -514,6 +526,8 @@ jobs:
BUILD_DEPRECATED: "OFF" BUILD_DEPRECATED: "OFF"
CMAKE_CXX_FLAGS: -DCORRADE_NO_ASSERT CMAKE_CXX_FLAGS: -DCORRADE_NO_ASSERT
CONFIGURATION: Release CONFIGURATION: Release
# STUPID yml interprets unquoted ON as a boolean
TARGET_EGL: "ON"
EXTRA_OPTS: > EXTRA_OPTS: >
-DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_GLXAPPLICATION=ON
-DMAGNUM_WITH_XEGLAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON
@ -547,6 +561,17 @@ jobs:
BUILD_APPLICATIONS: "OFF" BUILD_APPLICATIONS: "OFF"
CMAKE_CXX_FLAGS: -fsanitize=address CMAKE_CXX_FLAGS: -fsanitize=address
CONFIGURATION: Debug CONFIGURATION: Debug
# llvmpipe on Mesa 20 on 18.04 seems to be leaking somewhere, reporting
# two 56 byte leaks from calloc in <unknown module>, so not suppressible
# in any way. Not reproducible with Mesa 25 Intel, Mesa 25 llvmpipe has
# random GLX leaks, so I guess the driver is just in a perpetual state of
# disrepair. Additionally it reports an ODR violation for
# GL::defaultFramebuffer due to complex yet-unresolved reasons explained
# in https://github.com/mosra/magnum/pull/565. (Also STUPID yml
# interprets unquoted ON as a boolean.)
# TODO retry when upgrading to a newer OS version or when that PR is
# merged
TARGET_EGL: "OFF"
EXTRA_OPTS: > EXTRA_OPTS: >
-DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_GLXAPPLICATION=ON
-DMAGNUM_WITH_XEGLAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON
@ -588,6 +613,11 @@ jobs:
BUILD_APPLICATIONS: "OFF" BUILD_APPLICATIONS: "OFF"
CMAKE_CXX_FLAGS: -fsanitize=thread CMAKE_CXX_FLAGS: -fsanitize=thread
CONFIGURATION: Debug CONFIGURATION: Debug
# The TSan job is a (more expensive) machine job, not a VM, so don't run
# the GL tests there (and thus do at least a compile test for the GLX
# codepath).
# TODO in case it can ever be made a VM again, switch those on
TARGET_EGL: "OFF"
EXTRA_OPTS: > EXTRA_OPTS: >
-DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_GLXAPPLICATION=ON
-DMAGNUM_WITH_XEGLAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON

27
package/ci/unix-desktop.sh

@ -32,6 +32,7 @@ cmake .. \
-DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \ -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \
-DCMAKE_INSTALL_PREFIX=$HOME/deps \ -DCMAKE_INSTALL_PREFIX=$HOME/deps \
-DCMAKE_BUILD_TYPE=$CONFIGURATION \ -DCMAKE_BUILD_TYPE=$CONFIGURATION \
-DMAGNUM_TARGET_EGL=$TARGET_EGL \
-DMAGNUM_WITH_AUDIO=ON \ -DMAGNUM_WITH_AUDIO=ON \
-DMAGNUM_WITH_VK=ON \ -DMAGNUM_WITH_VK=ON \
-DMAGNUM_WITH_GLFWAPPLICATION=$BUILD_APPLICATIONS \ -DMAGNUM_WITH_GLFWAPPLICATION=$BUILD_APPLICATIONS \
@ -66,7 +67,31 @@ cmake .. \
$EXTRA_OPTS \ $EXTRA_OPTS \
-G Ninja -G Ninja
ninja $NINJA_JOBS ninja $NINJA_JOBS
ASAN_OPTIONS="color=always" LSAN_OPTIONS="color=always suppressions=$(pwd)/../package/ci/leaksanitizer.conf" TSAN_OPTIONS="color=always" CORRADE_TEST_COLOR=ON ctest -V -E "GLTest|GLBenchmark|VkTest"
export CORRADE_TEST_COLOR=ON
# Sanitizer options are used only in sanitizer builds, they do nothing
# elsewhere
export ASAN_OPTIONS="color=always"
export LSAN_OPTIONS="color=always suppressions=$(pwd)/../package/ci/leaksanitizer.conf"
export TSAN_OPTIONS="color=always"
# Run GL tests if we can use llvmpipe through EGL. (Not benchmarks because I'm
# not interested in knowing speed of a random software GPU emulation, further
# offset by inherent randomness of a CI VM.) Enabled only on some builds to
# make sure the MAGNUM_TARGET_EGL=OFF option is at least compile-tested too.
if [ "$TARGET_EGL" == "ON" ]; then
# Keep in sync with package/archlinux/PKGBUILD and PKGBUILD-coverage
ctest -V -E "GLBenchmark|VkTest"
MAGNUM_DISABLE_EXTENSIONS="GL_ARB_invalidate_subdata GL_ARB_multi_bind GL_ARB_robustness GL_ARB_separate_shader_objects GL_ARB_texture_storage GL_ARB_texture_storage_multisample GL_ARB_shading_language_420pack GL_ARB_explicit_uniform_location GL_ARB_explicit_attrib_location GL_ARB_texture_filter_anisotropic" ctest -V -R GLTest
MAGNUM_DISABLE_EXTENSIONS="GL_ARB_direct_state_access" ctest -V -R GLTest
MAGNUM_DISABLE_EXTENSIONS="GL_ARB_get_texture_sub_image" ctest -V -R GLTest
MAGNUM_DISABLE_EXTENSIONS="GL_ARB_vertex_array_object" ctest -V -R GLTest
MAGNUM_DISABLE_EXTENSIONS="GL_ARB_uniform_buffer_object GL_ARB_shader_storage_buffer_object" ctest -V -R GLTest
MAGNUM_DISABLE_EXTENSIONS="GL_KHR_debug" ctest -V -R GLTest
$CONFIGURATION/bin/magnum-gl-info --limits
else
ctest -V -E "GLTest|GLBenchmark|VkTest"
fi
# Test install, after running the tests as for them it shouldn't be needed # Test install, after running the tests as for them it shouldn't be needed
ninja install ninja install

Loading…
Cancel
Save