diff --git a/package/ci/circleci.yml b/package/ci/circleci.yml index f58b0d723..0bf259694 100644 --- a/package/ci/circleci.yml +++ b/package/ci/circleci.yml @@ -333,6 +333,8 @@ jobs: CMAKE_CXX_FLAGS: --coverage LCOV_EXTRA_OPTS: --gcov-tool /usr/bin/gcov-4.8 CONFIGURATION: Debug + # STUPID yml interprets unquoted ON as a boolean + TARGET_EGL: "ON" EXTRA_OPTS: > -DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON @@ -362,6 +364,14 @@ jobs: environment: CMAKE_CXX_FLAGS: --coverage 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: > -DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON @@ -489,6 +499,8 @@ jobs: CMAKE_CXX_FLAGS: --coverage LCOV_EXTRA_OPTS: --gcov-tool /usr/bin/gcov-4.8 CONFIGURATION: Debug + # STUPID yml interprets unquoted ON as a boolean + TARGET_EGL: "ON" steps: # libidn11 needed by CMake - install-base-linux: @@ -514,6 +526,8 @@ jobs: BUILD_DEPRECATED: "OFF" CMAKE_CXX_FLAGS: -DCORRADE_NO_ASSERT CONFIGURATION: Release + # STUPID yml interprets unquoted ON as a boolean + TARGET_EGL: "ON" EXTRA_OPTS: > -DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON @@ -547,6 +561,17 @@ jobs: BUILD_APPLICATIONS: "OFF" CMAKE_CXX_FLAGS: -fsanitize=address CONFIGURATION: Debug + # llvmpipe on Mesa 20 on 18.04 seems to be leaking somewhere, reporting + # two 56 byte leaks from calloc in , 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: > -DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON @@ -588,6 +613,11 @@ jobs: BUILD_APPLICATIONS: "OFF" CMAKE_CXX_FLAGS: -fsanitize=thread 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: > -DMAGNUM_WITH_GLXAPPLICATION=ON -DMAGNUM_WITH_XEGLAPPLICATION=ON diff --git a/package/ci/unix-desktop.sh b/package/ci/unix-desktop.sh index 014a5749d..043c18f5f 100755 --- a/package/ci/unix-desktop.sh +++ b/package/ci/unix-desktop.sh @@ -32,6 +32,7 @@ cmake .. \ -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \ -DCMAKE_INSTALL_PREFIX=$HOME/deps \ -DCMAKE_BUILD_TYPE=$CONFIGURATION \ + -DMAGNUM_TARGET_EGL=$TARGET_EGL \ -DMAGNUM_WITH_AUDIO=ON \ -DMAGNUM_WITH_VK=ON \ -DMAGNUM_WITH_GLFWAPPLICATION=$BUILD_APPLICATIONS \ @@ -66,7 +67,31 @@ cmake .. \ $EXTRA_OPTS \ -G Ninja 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 ninja install