| name: CMake |
| on: [workflow_call, workflow_dispatch] |
| env: |
| TERM: xterm-256color |
| GTEST_COLOR: 1 |
| |
| jobs: |
| cmake: |
| name: ${{ matrix.name }} |
| runs-on: ${{ matrix.os }} |
| defaults: |
| run: |
| shell: ${{ matrix.shell || 'bash' }} |
| timeout-minutes: 80 |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - name: Ubuntu GCC ASAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cxxflags: -Wno-maybe-uninitialized |
| cmake-args: -DWITH_SANITIZER=Address -DWITH_BENCHMARKS=ON |
| coverage: ubuntu_gcc |
| |
| - name: Ubuntu GCC Native Instructions |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_NATIVE_INSTRUCTIONS=ON |
| coverage: ubuntu_gcc_native_inst |
| |
| - name: Ubuntu GCC Native Instructions (AVX) |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE="-mavx -mpclmul" |
| coverage: ubuntu_gcc_native_inst_avx |
| |
| - name: Ubuntu GCC Symbol Prefix -O3 |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DZLIB_SYMBOL_PREFIX=zTest_ -DWITH_BENCHMARKS=ON |
| cflags: -O3 |
| # Skipping coverage to allow -O3 |
| |
| - name: Ubuntu GCC Compat Symbol Prefix |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DZLIB_COMPAT=ON -DZLIB_SYMBOL_PREFIX=zTest_ -DWITH_BENCHMARKS=ON |
| coverage: ubuntu_gcc_compat_sprefix |
| |
| - name: Ubuntu GCC -O1 UBSAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_SANITIZER=Undefined |
| cflags: -O1 |
| # Skipping coverage to allow -O1 |
| |
| - name: Ubuntu GCC 32-bit |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_SHARED_LINKER_FLAGS=-m32 -DCMAKE_EXE_LINKER_FLAGS=-m32 -DWITH_BENCHMARKS=ON |
| packages: gcc-multilib g++-multilib |
| coverage: ubuntu_gcc_m32 |
| |
| - name: Ubuntu GCC C17 MMAP |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DCMAKE_C_STANDARD=17 |
| cflags: -DUSE_MMAP |
| coverage: ubuntu_gcc_c17_mmap |
| |
| - name: Ubuntu GCC C23 REDUCED_MEM |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DCMAKE_C_STANDARD=23 -DWITH_REDUCED_MEM=ON |
| coverage: ubuntu_gcc_c23_reduced_mem |
| |
| - name: Ubuntu GCC No Chorba |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_CHORBA=OFF |
| coverage: ubuntu_gcc_no_chorba |
| |
| - name: Ubuntu GCC SSE2 UBSAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_SSSE3=OFF -DWITH_SSE42=OFF -DWITH_AVX2=OFF -DWITH_AVX512=OFF -DWITH_SANITIZER=Undefined |
| coverage: ubuntu_gcc_sse2 |
| |
| - name: Ubuntu GCC SSSE3 UBSAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_SSE42=OFF -DWITH_AVX2=OFF -DWITH_AVX512=OFF -DWITH_SANITIZER=Undefined |
| coverage: ubuntu_gcc_ssse3 |
| |
| - name: Ubuntu GCC SSE4.2 UBSAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_AVX2=OFF -DWITH_AVX512=OFF -DWITH_SANITIZER=Undefined |
| coverage: ubuntu_gcc_sse42 |
| |
| - name: Ubuntu GCC No PCLMULQDQ UBSAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_PCLMULQDQ=OFF -DWITH_SANITIZER=Undefined |
| coverage: ubuntu_gcc_no_pclmulqdq |
| |
| - name: Ubuntu GCC No AVX512VNNI UBSAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DWITH_AVX512VNNI=OFF -DWITH_SANITIZER=Undefined |
| coverage: ubuntu_gcc_no_avx512vnni |
| |
| - name: Ubuntu GCC Compat No Opt ASAN |
| os: ubuntu-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Address |
| cflags: -DNOT_TWEAK_COMPILER |
| coverage: ubuntu_gcc_compat_no_opt |
| |
| - name: Ubuntu GCC ARM SF |
| os: ubuntu-24.04-arm |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake |
| packages: qemu-user crossbuild-essential-armel |
| gcov-exec: arm-linux-gnueabi-gcov |
| coverage: ubuntu_gcc_armsf |
| |
| - name: Ubuntu GCC ARM SF Compat No Opt |
| os: ubuntu-24.04-arm |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF |
| packages: qemu-user crossbuild-essential-armel |
| gcov-exec: arm-linux-gnueabi-gcov |
| coverage: ubuntu_gcc_armsf_compat_no_opt |
| |
| - name: Ubuntu GCC ARM HF ASAN |
| os: ubuntu-24.04-arm |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_BENCHMARKS=ON -DWITH_SANITIZER=Address |
| cxxflags: -Wno-psabi -Wno-maybe-uninitialized |
| asan-options: detect_leaks=0 |
| packages: qemu-user crossbuild-essential-armhf |
| gcov-exec: arm-linux-gnueabihf-gcov |
| coverage: ubuntu_gcc_armhf_asan |
| |
| - name: Ubuntu GCC ARM HF No Neon No ARMv8 ASAN |
| os: ubuntu-24.04-arm |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_NEON=OFF -DWITH_ARMV8=OFF -DWITH_SANITIZER=Address |
| asan-options: detect_leaks=0 |
| packages: qemu-user crossbuild-essential-armhf |
| gcov-exec: arm-linux-gnueabihf-gcov |
| coverage: ubuntu_gcc_armhf_no_neon_no_armv8 |
| |
| - name: Ubuntu GCC ARM HF Compat UBSAN |
| os: ubuntu-24.04-arm |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DZLIB_COMPAT=ON -DWITH_SANITIZER=Undefined |
| packages: qemu-user crossbuild-essential-armhf |
| gcov-exec: arm-linux-gnueabihf-gcov |
| coverage: ubuntu_gcc_armhf_compat_ubsan |
| |
| - name: Ubuntu GCC AARCH64 ASAN |
| os: ubuntu-24.04-arm |
| cmake-args: -DWITH_BENCHMARKS=ON -DWITH_SANITIZER=Address |
| asan-options: detect_leaks=0 |
| coverage: ubuntu_gcc_aarch64_asan |
| |
| - name: Ubuntu GCC AARCH64 Compat UBSAN |
| os: ubuntu-24.04-arm |
| cmake-args: -DZLIB_COMPAT=ON -DWITH_SANITIZER=Undefined |
| coverage: ubuntu_gcc_aarch64_compat_ubsan |
| |
| - name: Ubuntu Clang AARCH64 MSAN |
| os: ubuntu-24.04-arm |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_SANITIZER=Memory |
| # Coverage disabled, causes MSAN errors |
| |
| - name: Ubuntu GCC MIPS |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mips.cmake |
| packages: qemu-user crossbuild-essential-mips |
| gcov-exec: mips-linux-gnu-gcov |
| coverage: ubuntu_gcc_mips |
| |
| - name: Ubuntu GCC MIPS64 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mips64.cmake -DWITH_BENCHMARKS=ON |
| packages: qemu-user crossbuild-essential-mips64 |
| gcov-exec: mips64-linux-gnuabi64-gcov |
| coverage: ubuntu_gcc_mips64 |
| |
| - name: Ubuntu GCC PPC |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake |
| packages: qemu-user crossbuild-essential-powerpc |
| gcov-exec: powerpc-linux-gnu-gcov |
| coverage: ubuntu_gcc_ppc |
| |
| - name: Ubuntu GCC PPC No Power8 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake -DWITH_POWER8=OFF |
| packages: qemu-user crossbuild-essential-powerpc |
| gcov-exec: powerpc-linux-gnu-gcov |
| coverage: ubuntu_gcc_ppc_no_power8 |
| |
| - name: Ubuntu GCC PPC64 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64.cmake -DWITH_BENCHMARKS=ON |
| packages: qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-ppc64-cross |
| ldflags: -static |
| gcov-exec: powerpc64-linux-gnu-gcov |
| coverage: ubuntu_gcc_ppc64 |
| |
| - name: Ubuntu GCC PPC64 Power9 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64-power9.cmake |
| packages: qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-ppc64-cross |
| ldflags: -static |
| gcov-exec: powerpc64-linux-gnu-gcov |
| coverage: ubuntu_gcc_ppc64_power9 |
| |
| - name: Ubuntu Clang PPC64 Power9 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64-clang.cmake |
| packages: qemu-user clang binutils-powerpc64-linux-gnu libgcc-11-dev-ppc64-cross libc-dev-ppc64-cross libstdc++-11-dev-ppc64-cross |
| # Coverage disabled for clang on power9, errors |
| |
| - name: Ubuntu GCC PPC64LE |
| os: ubuntu-latest |
| # gtest illegal instruction (related? https://bugs.launchpad.net/qemu/+bug/1781281) |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake -DWITH_GTEST=OFF |
| packages: qemu-user crossbuild-essential-ppc64el |
| gcov-exec: powerpc64le-linux-gnu-gcov |
| # mcpu required to test power8 with qemu-ppc64le -cpu power8 (see issue 1378) |
| cflags: -mcpu=power8 |
| cxxflags: -mcpu=power8 |
| coverage: ubuntu_gcc_ppc64le |
| |
| - name: Ubuntu GCC PPC64LE No VSX |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-power9.cmake -DWITH_POWER8=OFF -DWITH_POWER9=OFF |
| packages: qemu-user crossbuild-essential-ppc64el |
| gcov-exec: powerpc64le-linux-gnu-gcov |
| coverage: ubuntu_gcc_ppc64le_novsx |
| |
| - name: Ubuntu GCC PPC64LE Power9 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-power9.cmake |
| packages: qemu-user crossbuild-essential-ppc64el |
| gcov-exec: powerpc64le-linux-gnu-gcov |
| coverage: ubuntu_gcc_ppc64le_power9 |
| |
| - name: Ubuntu Clang PPC64LE Power9 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-clang.cmake |
| packages: qemu-user crossbuild-essential-ppc64el |
| # Coverage disabled for clang on power9, errors |
| |
| - name: Ubuntu GCC RISC-V |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv.cmake -DWITH_BENCHMARKS=ON |
| packages: qemu-user crossbuild-essential-riscv64 |
| gcov-exec: riscv64-linux-gnu-gcov |
| coverage: ubuntu_gcc_riscv64 |
| |
| - name: Ubuntu Clang RISC-V |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv-clang.cmake |
| packages: qemu-user crossbuild-essential-riscv64 |
| # Coverage disabled for clang on riscv, errors |
| |
| - name: Ubuntu GCC 14 LoongArch64 |
| os: ubuntu-latest |
| cmake-args: -DCOMPILER_SUFFIX=-14 -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-loongarch64-gcc.cmake -DWITH_BENCHMARKS=ON |
| packages: qemu-user gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu libc-dev-loong64-cross |
| ldflags: -static |
| gcov-exec: loongarch64-linux-gnu-gcov-14 |
| coverage: ubuntu_gcc14_loongarch64 |
| |
| - name: Ubuntu GCC 14 LoongArch64 No LASX |
| os: ubuntu-latest |
| cmake-args: -DCOMPILER_SUFFIX=-14 -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-loongarch64-gcc.cmake -DWITH_BENCHMARKS=ON -DWITH_LASX=OFF |
| packages: qemu-user gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu libc-dev-loong64-cross |
| ldflags: -static |
| gcov-exec: loongarch64-linux-gnu-gcov-14 |
| coverage: ubuntu_gcc14_loongarch64_no_lasx |
| |
| - name: Ubuntu GCC SPARC64 |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake |
| packages: qemu-user gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc-dev-sparc64-cross |
| ldflags: -static |
| gcov-exec: sparc64-linux-gnu-gcov |
| coverage: ubuntu_gcc_sparc64 |
| |
| - name: Ubuntu GCC S390x |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_BENCHMARKS=ON |
| packages: qemu-user crossbuild-essential-s390x |
| ldflags: -static |
| gcov-exec: s390x-linux-gnu-gcov |
| coverage: ubuntu_gcc_s390x |
| |
| - name: Ubuntu GCC S390X No VX optimizations |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_S390_VX=OFF |
| packages: qemu-user crossbuild-essential-s390x |
| ldflags: -static |
| gcov-exec: s390x-linux-gnu-gcov |
| coverage: ubuntu_gcc_s390x_no_crc32 |
| |
| - name: ${{ github.repository == 'zlib-ng/zlib-ng' && 'EL10' || 'Ubuntu' }} GCC S390X DFLTCC Compat |
| os: ${{ github.repository == 'zlib-ng/zlib-ng' && 'z15' || 'ubuntu-latest' }} |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: >- |
| ${{ github.repository != 'zlib-ng/zlib-ng' && '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake' || '' }} |
| -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_BENCHMARKS=ON -DZLIB_COMPAT=ON |
| packages: qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross |
| ldflags: -static |
| gcov-exec: ${{ github.repository == 'zlib-ng/zlib-ng' && 'gcov' || 's390x-linux-gnu-gcov' }} |
| coverage: ${{ github.repository == 'zlib-ng/zlib-ng' && 'el10_gcc_s390x_dfltcc' || 'ubuntu_gcc_s390x_dfltcc' }} |
| |
| - name: ${{ github.repository == 'zlib-ng/zlib-ng' && 'EL10 Clang S390X DFLTCC ASAN' || 'Ubuntu GCC S390X DFLTCC' }} |
| os: ${{ github.repository == 'zlib-ng/zlib-ng' && 'z15' || 'ubuntu-latest' }} |
| compiler: ${{ github.repository == 'zlib-ng/zlib-ng' && 'clang' || 'gcc' }} |
| cxx-compiler: ${{ github.repository == 'zlib-ng/zlib-ng' && 'clang++' || 'g++' }} |
| cmake-args: >- |
| ${{ github.repository == 'zlib-ng/zlib-ng' && '-DWITH_SANITIZER=Address' || '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake' }} |
| -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON |
| packages: qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross |
| asan-options: detect_leaks=0 |
| gcov-exec: ${{ github.repository == 'zlib-ng/zlib-ng' && 'llvm-cov gcov' || 's390x-linux-gnu-gcov' }} |
| coverage: ${{ github.repository == 'zlib-ng/zlib-ng' && 'el10_clang_s390x_dfltcc_asan' || 'ubuntu_gcc_s390x_dfltcc' }} |
| |
| - name: ${{ github.repository == 'zlib-ng/zlib-ng' && 'EL10 Clang' || 'Ubuntu GCC' }} S390X DFLTCC UBSAN |
| os: ${{ github.repository == 'zlib-ng/zlib-ng' && 'z15' || 'ubuntu-latest' }} |
| compiler: ${{ github.repository == 'zlib-ng/zlib-ng' && 'clang' || 'gcc' }} |
| cxx-compiler: ${{ github.repository == 'zlib-ng/zlib-ng' && 'clang++' || 'g++' }} |
| cmake-args: >- |
| ${{ github.repository != 'zlib-ng/zlib-ng' && '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake' || '' }} |
| -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Undefined |
| packages: qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross |
| gcov-exec: ${{ github.repository == 'zlib-ng/zlib-ng' && 'llvm-cov gcov' || 's390x-linux-gnu-gcov' }} |
| coverage: ${{ github.repository == 'zlib-ng/zlib-ng' && 'el10_clang_s390x_dfltcc_ubsan' || 'ubuntu_gcc_s390x_dfltcc_ubsan' }} |
| |
| - name: ${{ github.repository == 'zlib-ng/zlib-ng' && 'EL10 Clang' || 'Ubuntu GCC' }} S390X DFLTCC ${{ (github.repository == 'zlib-ng/zlib-ng' && 'MSAN') || 'Compat' }} |
| os: ${{ github.repository == 'zlib-ng/zlib-ng' && 'z15' || 'ubuntu-latest' }} |
| compiler: ${{ github.repository == 'zlib-ng/zlib-ng' && 'clang' || 'gcc' }} |
| cxx-compiler: ${{ github.repository == 'zlib-ng/zlib-ng' && 'clang++' || 'g++' }} |
| cmake-args: >- |
| ${{ github.repository == 'zlib-ng/zlib-ng' && '-GNinja -DWITH_SANITIZER=Memory' || '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DZLIB_COMPAT=ON' }} |
| -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON |
| packages: qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross |
| # Coverage disabled, causes MSAN errors |
| |
| - name: Ubuntu Clang-15 |
| os: ubuntu-latest |
| compiler: clang-15 |
| cxx-compiler: clang++-15 |
| cmake-args: -DCMAKE_LINKER_TYPE=LLD |
| packages: clang-15 lld |
| gcov-exec: llvm-cov-15 gcov |
| # Coverage disabled for clang-15, errors |
| |
| - name: Ubuntu Clang C17 MMAP |
| os: ubuntu-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DCMAKE_LINKER_TYPE=LLD -DCMAKE_C_STANDARD=17 |
| cflags: -DUSE_MMAP |
| packages: llvm-18 lld |
| gcov-exec: llvm-cov-18 gcov |
| coverage: ubuntu_clang_c17_mmap |
| |
| - name: Ubuntu Clang-20 C23 |
| os: ubuntu-latest |
| compiler: clang-20 |
| cxx-compiler: clang++-20 |
| cmake-args: -DCMAKE_LINKER_TYPE=LLD -DCMAKE_C_STANDARD=23 |
| packages: clang-20 lld |
| # Coverage disabled for clang-20, errors |
| |
| # Check for undefined symbols in the version script for the modern api |
| - name: Ubuntu Clang-20 Undefined Symbols |
| os: ubuntu-latest |
| compiler: clang-20 |
| cxx-compiler: clang++-20 |
| cmake-args: -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld -Wl,--no-undefined-version" -DZLIBNG_ENABLE_TESTS=OFF |
| build-shared: 'ON' |
| packages: clang-20 lld |
| # Coverage disabled, no tests run |
| |
| # Check for undefined symbols in the version script for the compat api |
| - name: Ubuntu Clang-20 Undefined Symbols Compat |
| os: ubuntu-latest |
| compiler: clang-20 |
| cxx-compiler: clang++-20 |
| cmake-args: -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld -Wl,--no-undefined-version" -DZLIBNG_ENABLE_TESTS=OFF -DZLIB_COMPAT=ON |
| build-shared: 'ON' |
| packages: clang-20 lld |
| # Coverage disabled, no tests run |
| |
| - name: Ubuntu Clang Inflate Strict REDUCED_MEM |
| os: ubuntu-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_INFLATE_STRICT=ON -DWITH_REDUCED_MEM=ON |
| packages: llvm-18 |
| gcov-exec: llvm-cov-18 gcov |
| coverage: ubuntu_clang_inflate_strict_reduced_mem |
| |
| - name: Ubuntu Clang Inflate Allow Invalid Dist |
| os: ubuntu-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_INFLATE_ALLOW_INVALID_DIST=ON |
| packages: llvm-18 |
| gcov-exec: llvm-cov-18 gcov |
| coverage: ubuntu_clang_inflate_allow_invalid_dist |
| |
| - name: Ubuntu Clang Compat Debug |
| os: ubuntu-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DZLIB_COMPAT=ON |
| packages: llvm-18 |
| gcov-exec: llvm-cov-18 gcov |
| build-config: Debug |
| coverage: ubuntu_clang_compat_debug |
| |
| - name: Ubuntu Clang-20 MSAN |
| os: ubuntu-latest |
| compiler: clang-20 |
| cxx-compiler: clang++-20 |
| cmake-args: -GNinja -DWITH_SANITIZER=Memory |
| packages: ninja-build clang-20 llvm-20 libclang-rt-20-dev |
| gcov-exec: llvm-cov-20 gcov |
| build-config: Debug |
| # https://github.com/llvm/llvm-project/issues/55785 |
| msan-options: use_sigaltstack=0 |
| # Coverage disabled for clang-20, errors |
| |
| - name: Ubuntu Emscripten WASM32 |
| os: ubuntu-latest |
| chost: wasm32 |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_C_COMPILER_TARGET=wasm32 -DCMAKE_CROSSCOMPILING_EMULATOR=${EMSDK_NODE} -DZLIB_COMPAT=ON |
| # Coverage disabled for wasm |
| |
| - name: Windows MSVC 2026 v145 Win64 C23 |
| os: windows-2025-vs2026 |
| compiler: cl |
| cmake-args: -G "Visual Studio 18 2026" -A x64 -T v145 -DCMAKE_C_STANDARD=23 -DWITH_BENCHMARKS=ON |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v143 Win32 |
| os: windows-latest |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v143 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v143 Win64 |
| os: windows-latest |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A x64 -T v143 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v143 Win64 Native Instructions (AVX) |
| os: windows-latest |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A x64 -T v143 -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE=/arch:AVX |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v143 Win64 C17 |
| os: windows-latest |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A x64 -T v143 -DCMAKE_C_STANDARD=17 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v142 Win32 |
| os: windows-latest |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v142 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v142 Win64 |
| os: windows-latest |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A x64 -T v142 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v141 Win32 |
| os: windows-2022 |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v141 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v141 Win64 |
| os: windows-2022 |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A x64 -T v141 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v140 Win32 |
| os: windows-2022 |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A Win32,version=10.0.14393.0 -T v140 -DCMAKE_SYSTEM_VERSION=10.0.14393.0 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC 2022 v140 Win64 |
| os: windows-2022 |
| compiler: cl |
| cmake-args: -G "Visual Studio 17 2022" -A x64,version=10.0.14393.0 -T v140 -DCMAKE_SYSTEM_VERSION=10.0.14393.0 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC ARM No Test |
| os: windows-latest |
| compiler: cl |
| cmake-args: -A ARM,version=10.0.22621.0 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC ARM64 |
| os: windows-11-arm |
| compiler: cl |
| cmake-args: -A ARM64 |
| # Coverage disabled for msvc |
| |
| - name: Windows MSVC ARM64EC |
| os: windows-11-arm |
| compiler: cl |
| cmake-args: -A ARM64EC |
| # Coverage disabled for msvc |
| |
| - name: Windows ClangCl Win32 |
| os: windows-latest |
| cmake-args: -T ClangCl -A Win32 |
| # Coverage disabled for clangcl |
| |
| - name: Windows ClangCl Win64 |
| os: windows-latest |
| cmake-args: -T ClangCl -A x64 |
| # Coverage disabled for clangcl |
| |
| - name: Windows ClangCl Win64 Native Instructions (AVX) |
| os: windows-latest |
| cmake-args: -T ClangCl -A x64 -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE="-mavx -mpclmul" |
| # Coverage disabled for clangcl |
| |
| - name: Windows GCC |
| os: windows-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -G Ninja |
| coverage: win64_gcc |
| |
| - name: Windows GCC Native Instructions (AVX) |
| os: windows-2022 |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -G Ninja -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE="-mavx -mpclmul" |
| coverage: win64_gcc_native_avx |
| |
| - name: Windows GCC Compat No Opt |
| os: windows-latest |
| compiler: gcc |
| cxx-compiler: g++ |
| cmake-args: -G Ninja -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF |
| coverage: win64_gcc_compat_no_opt |
| |
| - name: Windows GCC MinGW32 |
| os: windows-latest |
| shell: msys2 {0} |
| compiler: i686-w64-mingw32-gcc |
| cxx-compiler: i686-w64-mingw32-g++ |
| coverage: win32_gcc |
| |
| - name: Windows GCC MinGW32 Compat |
| os: windows-latest |
| shell: msys2 {0} |
| compiler: i686-w64-mingw32-gcc |
| cxx-compiler: i686-w64-mingw32-g++ |
| cmake-args: -DZLIB_COMPAT=ON |
| coverage: win32_gcc_compat |
| |
| - name: macOS Clang (Intel, Target 10.10) |
| os: macos-15-intel |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 -DWITH_BENCHMARKS=ON |
| ldflags: -ld_classic |
| coverage: macos_clang_intel |
| |
| - name: macOS Clang (Intel) ASAN |
| os: macos-15-intel |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_SANITIZER=Address |
| coverage: macos_clang_intel_asan |
| |
| - name: macOS Clang (Intel) UBSAN |
| os: macos-15-intel |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_SANITIZER=Undefined |
| coverage: macos_clang_intel_ubsan |
| |
| - name: macOS Clang (Intel) Native Instructions |
| os: macos-15-intel |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_NATIVE_INSTRUCTIONS=ON |
| coverage: macos_clang_native_intel |
| |
| - name: macOS Clang (ARM64) ASAN |
| os: macos-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_SANITIZER=Address |
| coverage: macos_clang_arm64 |
| |
| - name: macOS Clang (ARM64) UBSAN |
| os: macos-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_SANITIZER=Undefined |
| coverage: macos_clang_arm64_ubsan |
| |
| - name: macOS Clang (ARM64) Native Instructions |
| os: macos-latest |
| compiler: clang |
| cxx-compiler: clang++ |
| cmake-args: -DWITH_NATIVE_INSTRUCTIONS=ON |
| coverage: macos_clang_arm64_native |
| |
| - name: Ubuntu LCC e2kv4 |
| os: ubuntu-latest |
| cmake-args: -DWITH_BENCHMARKS=ON -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-e2k-lcc.cmake -DMCST_LCC_PREFIX=/opt/mcst/lcc-1.29.16.e2k-v4.linux-6.1 -DQEMU_CPU=elbrus-v4 -DBENCHMARK_ENABLE_WERROR=OFF -DBENCHMARK_FORCE_WERROR=OFF |
| toolchain: 1.29.16.e2k-v4.linux-6.1 |
| cflags: -march=elbrus-v4 |
| cxxflags: -march=elbrus-v4 -DBENCHMARK_HAS_NO_INLINE_ASSEMBLY |
| ldflags: -static |
| # Skipping coverage to allow optimized build |
| |
| - name: Ubuntu LCC e2kv5 |
| os: ubuntu-latest |
| cmake-args: -DWITH_BENCHMARKS=ON -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-e2k-lcc.cmake -DMCST_LCC_PREFIX=/opt/mcst/lcc-1.29.16.e2k-v5.linux-6.1 -DQEMU_CPU=elbrus-v5 -DBENCHMARK_ENABLE_WERROR=OFF -DBENCHMARK_FORCE_WERROR=OFF |
| toolchain: 1.29.16.e2k-v5.linux-6.1 |
| cflags: -march=elbrus-v5 |
| cxxflags: -march=elbrus-v5 -DBENCHMARK_HAS_NO_INLINE_ASSEMBLY |
| ldflags: -static |
| # Skipping coverage to allow optimized build |
| |
| - name: Ubuntu LCC e2kv5 (coverage) |
| os: ubuntu-latest |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-e2k-lcc.cmake -DMCST_LCC_PREFIX=/opt/mcst/lcc-1.29.16.e2k-v5.linux-6.1 -DQEMU_CPU=elbrus-v5 |
| toolchain: 1.29.16.e2k-v5.linux-6.1 |
| cflags: -march=elbrus-v5 |
| cxxflags: -march=elbrus-v5 |
| ldflags: -static |
| gcov-exec: /opt/mcst/lcc-1.29.16.e2k-v5.linux-6.1/gcov/bin/gcov |
| coverage: linux_mcst_lcc_e2kv5 |
| |
| - name: Ubuntu LCC e2kv6 |
| os: ubuntu-latest |
| cmake-args: -DWITH_BENCHMARKS=ON -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-e2k-lcc.cmake -DMCST_LCC_PREFIX=/opt/mcst/lcc-1.29.16.e2k-v6.linux-6.1 -DQEMU_CPU=elbrus-v6 -DBENCHMARK_ENABLE_WERROR=OFF -DBENCHMARK_FORCE_WERROR=OFF |
| toolchain: 1.29.16.e2k-v6.linux-6.1 |
| cflags: -march=elbrus-v6 |
| cxxflags: -march=elbrus-v6 -DBENCHMARK_HAS_NO_INLINE_ASSEMBLY |
| ldflags: -static |
| # Skipping coverage to allow optimized build |
| |
| steps: |
| - name: Checkout repository |
| uses: actions/checkout@v6 |
| with: |
| show-progress: false |
| |
| - name: Checkout test corpora |
| uses: actions/checkout@v6 |
| # Don't test the extra corpora with Sanitizer builds or RISC-V or e2k, due to their slow testing. |
| if: ${{ !contains(matrix.name, 'RISC-V') && !contains(matrix.name, 'e2k') && !contains(matrix.cmake-args, 'WITH_SANITIZER') }} |
| with: |
| repository: zlib-ng/corpora |
| path: test/data/corpora |
| show-progress: false |
| |
| - name: Setup MinGW32 |
| if: runner.os == 'Windows' && contains(matrix.name, 'MinGW32') |
| uses: msys2/setup-msys2@v2 |
| with: |
| update: true |
| msystem: MINGW32 |
| install: >- |
| pkg-config |
| make |
| git |
| mingw-w64-i686-toolchain |
| mingw-w64-i686-cmake |
| |
| - name: Add ubuntu mirrors |
| if: runner.os == 'Linux' && !contains(matrix.os, 'z15') |
| # Github Actions caching proxy is at times unreliable |
| run: | |
| echo -e 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\n' | sudo tee /etc/apt/mirrors.txt |
| curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt |
| sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu/#mirror+file:/etc/apt/mirrors.txt#' /etc/apt/sources.list |
| |
| - name: Install packages (Ubuntu) |
| if: runner.os == 'Linux' && !contains(matrix.os, 'z15') |
| run: | |
| sudo apt-get update |
| sudo apt-get install -y --allow-downgrades --no-install-recommends \ |
| ${{ matrix.packages || 'libgtest-dev libbenchmark-dev' }} |
| |
| - name: Install packages (Windows) |
| if: runner.os == 'Windows' |
| shell: pwsh |
| run: | |
| # strawberryperl installs /c/Strawberry/c/bin/libstdc++-6.dll, which is incompatible with the mingw64 one. |
| # zlib-ng does not need perl, so simply remove it. |
| choco uninstall --no-progress strawberryperl |
| choco install --no-progress ninja ${{ matrix.packages }} |
| |
| - name: Install Visual Studio toolset v140 (Windows) |
| if: contains(matrix.name, 'v140') |
| shell: pwsh |
| run: | |
| # Windows 10 SDK (10.0.14393.795) |
| # https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/index-legacy |
| Invoke-WebRequest -Method Get -Uri https://go.microsoft.com/fwlink/p/?LinkId=838916 -OutFile sdksetup.exe -UseBasicParsing |
| Unblock-File sdksetup.exe |
| Start-Process -Wait sdksetup.exe -ArgumentList "/q", "/norestart", "/ceip off", "/features OptionId.WindowsSoftwareDevelopmentKit" |
| |
| Set-Location "C:\Program Files (x86)\Microsoft Visual Studio\Installer\" |
| $InstallPath = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" |
| $componentsToInstall= @( |
| "Microsoft.VisualStudio.Component.VC.140" |
| ) |
| [string]$workloadArgs = $componentsToInstall | ForEach-Object {" --add " + $_} |
| $Arguments = ('/c', "vs_installer.exe", 'modify', '--installPath', "`"$InstallPath`"",$workloadArgs, '--quiet', '--norestart', '--nocache') |
| # should be run twice |
| $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden |
| $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden |
| |
| - name: Install Visual Studio toolset v141 (Windows) |
| if: contains(matrix.name, 'v141') |
| shell: pwsh |
| run: | |
| Set-Location "C:\Program Files (x86)\Microsoft Visual Studio\Installer\" |
| $InstallPath = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" |
| $componentsToInstall= @( |
| "Microsoft.VisualStudio.Component.VC.v141.x86.x64" |
| ) |
| [string]$workloadArgs = $componentsToInstall | ForEach-Object {" --add " + $_} |
| $Arguments = ('/c', "vs_installer.exe", 'modify', '--installPath', "`"$InstallPath`"",$workloadArgs, '--quiet', '--norestart', '--nocache') |
| # should be run twice |
| $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden |
| $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden |
| |
| - name: Install Windows 11 SDK (ARM) |
| shell: pwsh |
| if: contains(matrix.name, 'MSVC ARM ') |
| run: | |
| # Windows 11 SDK (10.0.22621.2428) |
| # https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/index-legacy |
| Invoke-WebRequest -Method Get -Uri https://go.microsoft.com/fwlink/p/?LinkId=2250105 -OutFile sdksetup.exe -UseBasicParsing |
| Unblock-File sdksetup.exe |
| Start-Process -Wait sdksetup.exe -ArgumentList "/q", "/norestart", "/ceip off" |
| |
| - name: Install packages (macOS) |
| if: runner.os == 'macOS' |
| run: brew install ninja ${{ matrix.packages }} |
| env: |
| HOMEBREW_NO_INSTALL_CLEANUP: 1 |
| |
| - name: Install Emscripten |
| if: contains(matrix.name, 'WASM32') |
| uses: mymindstorm/setup-emsdk@v14 |
| |
| # Get MCST LCC from github actions cache or download from dev.mcst.ru and save to cache |
| - name: Cache MCST LCC ${{ matrix.toolchain }} (Ubuntu) |
| if: contains(matrix.name, 'e2k') |
| id: cache-lcc |
| uses: actions/cache@v5 |
| with: |
| path: /opt/mcst |
| key: cache-lcc-${{ matrix.toolchain }} |
| |
| - name: Install MCST LCC ${{ matrix.toolchain }} (Ubuntu) |
| if: contains(matrix.name, 'e2k') && steps.cache-lcc.outputs.cache-hit != 'true' |
| shell: bash |
| run: | |
| wget -q https://dev.mcst.ru/downloads/2026-03-13/cross-sp-public-osl-${{ matrix.toolchain }}_64.tgz |
| sudo tar -xzf cross-sp-public-osl-${{ matrix.toolchain }}_64.tgz -C / |
| rm -f cross-sp-public-osl-${{ matrix.toolchain }}_64.tgz |
| |
| # Get qemu-e2k-static from github actions cache or download from dev.mcst.ru and save to cache |
| - name: Cache MCST QEMU (Ubuntu) |
| if: contains(matrix.name, 'e2k') |
| id: cache-qemu-e2k-static |
| uses: actions/cache@v5 |
| with: |
| path: /usr/local/bin/qemu-e2k-static |
| key: cache-qemu-e2k-static-2026-02-24 |
| |
| - name: Install MCST QEMU (Ubuntu) |
| if: contains(matrix.name, 'e2k') && steps.cache-qemu-e2k-static.outputs.cache-hit != 'true' |
| shell: bash |
| run: | |
| wget -q https://dev.mcst.ru/downloads/2026-02-24/qemu-e2k-static |
| chmod +x qemu-e2k-static |
| sudo mv qemu-e2k-static /usr/local/bin |
| |
| - name: Set LLVM_BUILD_DIR for LLVM C++ libraries (MSAN) |
| if: contains(matrix.name, 'MSAN') && startsWith(matrix.compiler, 'clang') |
| run: | |
| echo "LLVM_BUILD_DIR=`pwd`/llvm-project/build" >> $GITHUB_ENV |
| |
| - name: Get latest hash change for LLVM C++ libraries (MSAN) |
| if: contains(matrix.name, 'MSAN') && startsWith(matrix.compiler, 'clang') |
| id: llvm-remote-hash |
| run: | |
| HASH=$(git ls-remote https://github.com/llvm/llvm-project refs/heads/release/20.x | cut -f1) |
| if [ -z "$HASH" ]; then |
| echo "Failed to fetch LLVM remote hash" |
| exit 1 |
| fi |
| echo "value=$HASH" >> $GITHUB_OUTPUT |
| |
| - name: Cache LLVM C++ libraries (MSAN) |
| if: contains(matrix.name, 'MSAN') && startsWith(matrix.compiler, 'clang') |
| id: cache-llvm |
| uses: actions/cache@v5 |
| with: |
| path: | |
| ${{ env.LLVM_BUILD_DIR }}/lib |
| ${{ env.LLVM_BUILD_DIR }}/include |
| key: cache-llvm-${{ matrix.os }}-${{ runner.arch }}-${{ matrix.compiler }}-${{ steps.llvm-remote-hash.outputs.value }} |
| |
| - name: Compile LLVM C++ libraries (MSAN) |
| if: contains(matrix.name, 'MSAN') && startsWith(matrix.compiler, 'clang') && steps.cache-llvm.outputs.cache-hit != 'true' |
| run: | |
| # Use sparse-checkout to download only the folders we need (176MB instead of 2302MB) |
| git clone --depth=1 --filter=blob:none https://github.com/llvm/llvm-project --no-checkout --branch release/20.x |
| cd llvm-project |
| git sparse-checkout set cmake runtimes libc libcxx libcxxabi llvm/cmake |
| git checkout |
| cmake -S runtimes -B build -G Ninja \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ |
| -DLLVM_USE_SANITIZER=MemoryWithOrigins \ |
| -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ |
| -DLIBCXX_ENABLE_STATIC=OFF \ |
| -DLIBCXX_INCLUDE_BENCHMARKS=OFF \ |
| -DLLVM_INCLUDE_TESTS=OFF \ |
| -DLLVM_INCLUDE_DOCS=OFF |
| cmake --build build -j5 -- cxx cxxabi |
| env: |
| CFLAGS: -O2 |
| CC: ${{ matrix.compiler }} |
| CXX: ${{ matrix.cxx-compiler }} |
| |
| - name: Generate project files |
| # Shared libraries turned off for qemu ppc* and sparc & reduce code coverage sources |
| run: | |
| cmake -S . ${{ matrix.cmake-args }} \ |
| -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} \ |
| -DBUILD_SHARED_LIBS=${{ matrix.build-shared || 'OFF' }} \ |
| -DWITH_FUZZERS=ON \ |
| -DWITH_MAINTAINER_WARNINGS=ON \ |
| ${{ matrix.coverage && '-DWITH_CODE_COVERAGE=ON' }} |
| env: |
| CC: ${{ matrix.compiler }} |
| CXX: ${{ matrix.cxx-compiler }} |
| CFLAGS: ${{ matrix.cflags }} |
| CXXFLAGS: ${{ matrix.cxxflags }} |
| LDFLAGS: ${{ matrix.ldflags }} |
| CI: true |
| |
| - name: Compile source code |
| run: cmake --build . --verbose -j5 --config ${{ matrix.build-config || 'Release' }} |
| |
| - name: Run test cases |
| # Don't run tests on 32-bit Windows ARM |
| if: runner.os != 'Windows' || contains(matrix.name, 'ARM') == false || runner.arch == 'ARM64' |
| run: ctest --verbose -C ${{ matrix.build-config || 'Release' }} -E benchmark_zlib --output-on-failure --max-width 120 -j ${{ matrix.parallel-jobs || '5' }} |
| env: |
| ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| UBSAN_OPTIONS: ${{ matrix.ubsan-options || 'verbosity=0' }}:print_stacktrace=1:abort_on_error=1:halt_on_error=1 |
| |
| - name: Generate coverage report |
| if: matrix.coverage |
| shell: bash |
| run: | |
| python3 -u -m venv ./venv |
| source ./venv/${{ runner.os == 'Windows' && 'Scripts' || 'bin' }}/activate |
| python3 -u -m pip install gcovr |
| python3 -m gcovr -j 5 --gcov-ignore-parse-errors --verbose \ |
| --exclude '(.*/|^)(_deps|benchmarks)/.*' \ |
| --exclude-unreachable-branches \ |
| --merge-mode-functions separate \ |
| --merge-lines \ |
| --gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" \ |
| --xml --output ${{ matrix.coverage }}.xml |
| |
| - name: Upload job coverage report to coveralls |
| uses: coverallsapp/github-action@v2 |
| env: |
| COVERALLS_REPO_TOKEN: "${{ secrets.COVERALLS_REPO_TOKEN }}" |
| if: | |
| matrix.coverage |
| && !contains(matrix.os, 'z15') |
| && (env.COVERALLS_REPO_TOKEN != '' || github.repository == 'zlib-ng/zlib-ng') |
| with: |
| file: ${{ matrix.coverage }}.xml |
| flag-name: "${{ matrix.name }}-${{ github.event_name }}" |
| parallel: true |
| |
| - name: Test benchmarks (crashtest only, no coverage data collection) |
| if: contains(matrix.cmake-args, '-DWITH_BENCHMARKS=ON') |
| run: ctest --verbose -C Release -R ^benchmark_zlib$ --output-on-failure --max-width 120 -j ${{ matrix.parallel-jobs || '5' }} |
| env: |
| ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1 |
| UBSAN_OPTIONS: ${{ matrix.ubsan-options || 'verbosity=0' }}:print_stacktrace=1:abort_on_error=1:halt_on_error=1 |
| |
| - name: Upload build errors |
| uses: actions/upload-artifact@v7 |
| if: failure() |
| with: |
| name: ${{ matrix.name }} (cmake) |
| path: | |
| **/CMakeFiles/CMakeConfigureLog.yaml |
| **/CMakeFiles/CMakeOutput.log |
| **/CMakeFiles/CMakeError.log |
| **/Testing/Temporary/* |
| ${{ matrix.coverage }}.xml |
| retention-days: 30 |