mirror of
https://github.com/GerbilSoft/zlib-ng.git
synced 2025-06-18 11:35:35 -04:00
624 lines
25 KiB
YAML
624 lines
25 KiB
YAML
name: CMake
|
|
on: [push, pull_request]
|
|
env:
|
|
TERM: xterm-256color
|
|
GTEST_COLOR: 1
|
|
jobs:
|
|
cmake:
|
|
name: ${{ matrix.name }}
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 60
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: Ubuntu 20.04 GCC
|
|
os: ubuntu-20.04
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
|
|
- name: Ubuntu GCC ASAN
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_SANITIZER=Address
|
|
codecov: ubuntu_gcc
|
|
|
|
- name: Ubuntu GCC Benchmark
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_BENCHMARKS=ON
|
|
codecov: ubuntu_gcc_benchmark
|
|
|
|
- name: Ubuntu GCC Symbol Prefix
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DZLIB_SYMBOL_PREFIX=zTest_
|
|
codecov: ubuntu_gcc_sprefix
|
|
|
|
- name: Ubuntu GCC Compat Symbol Prefix
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DZLIB_COMPAT=ON -DZLIB_SYMBOL_PREFIX=zTest_
|
|
codecov: ubuntu_gcc_compat_sprefix
|
|
|
|
- name: Ubuntu GCC -O3 OSB
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
build-dir: ../build
|
|
build-src-dir: ../zlib-ng
|
|
codecov: ubuntu_gcc_osb
|
|
cflags: -O3
|
|
|
|
- name: Ubuntu GCC -O3 OSB add_subdirectory
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
build-dir: ../build
|
|
build-src-dir: ../zlib-ng/test/add-subdirectory-project
|
|
|
|
- name: Ubuntu GCC -O1 No Unaligned UBSAN
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_UNALIGNED=OFF -DWITH_SANITIZER=Undefined
|
|
codecov: ubuntu_gcc_o1
|
|
cflags: -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
|
|
packages: gcc-multilib g++-multilib
|
|
codecov: ubuntu_gcc_m32
|
|
|
|
- name: Ubuntu GCC No CTZLL
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF
|
|
codecov: ubuntu_gcc_no_ctzll
|
|
|
|
- name: Ubuntu GCC No CTZ
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF -DHAVE_BUILTIN_CTZ=OFF
|
|
codecov: ubuntu_gcc_no_ctz
|
|
|
|
- name: Ubuntu GCC No AVX2 UBSAN
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_AVX2=OFF -DWITH_SANITIZER=Undefined
|
|
codecov: ubuntu_gcc_no_avx2
|
|
|
|
- name: Ubuntu GCC No SSE2 UBSAN
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_SSE2=OFF -DWITH_SANITIZER=Undefined
|
|
codecov: ubuntu_gcc_no_sse2
|
|
|
|
- name: Ubuntu GCC No SSE4.2 UBSAN
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_SSE42=OFF -DWITH_SANITIZER=Undefined
|
|
codecov: ubuntu_gcc_no_sse42
|
|
|
|
- name: Ubuntu GCC No PCLMULQDQ UBSAN
|
|
os: ubuntu-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_PCLMULQDQ=OFF -DWITH_SANITIZER=Undefined
|
|
codecov: ubuntu_gcc_no_pclmulqdq
|
|
|
|
- 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
|
|
codecov: ubuntu_gcc_compat_no_opt
|
|
cflags: -DNOT_TWEAK_COMPILER
|
|
|
|
- name: Ubuntu GCC ARM SF ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
|
|
codecov: ubuntu_gcc_armsf
|
|
|
|
- name: Ubuntu GCC ARM SF Compat No Opt UBSAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
|
|
packages: qemu qemu-user gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
|
|
codecov: ubuntu_gcc_armsf_compat_no_opt
|
|
|
|
- name: Ubuntu GCC ARM HF ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
|
|
codecov: ubuntu_gcc_armhf
|
|
|
|
- name: Ubuntu GCC ARM HF No ACLE ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_ACLE=OFF -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
|
|
codecov: ubuntu_gcc_armhf_no_acle
|
|
|
|
- name: Ubuntu GCC ARM HF No NEON ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
|
|
codecov: ubuntu_gcc_armhf_no_neon
|
|
|
|
- name: Ubuntu GCC ARM HF Compat No Opt UBSAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
|
|
packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
|
|
codecov: ubuntu_gcc_armhf_compat_no_opt
|
|
|
|
- name: Ubuntu GCC AARCH64 ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
|
|
codecov: ubuntu_gcc_aarch64
|
|
|
|
- name: Ubuntu GCC AARCH64 No ACLE UBSAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_ACLE=OFF -DWITH_SANITIZER=Undefined
|
|
packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
|
|
codecov: ubuntu_gcc_aarch64_no_acle
|
|
|
|
- name: Ubuntu GCC AARCH64 No NEON UBSAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Undefined
|
|
packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
|
|
codecov: ubuntu_gcc_aarch64_no_neon
|
|
|
|
- name: Ubuntu GCC AARCH64 Compat No Opt UBSAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
|
|
packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
|
|
codecov: ubuntu_gcc_aarch64_compat_no_opt
|
|
|
|
- name: Ubuntu GCC PPC
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake
|
|
packages: qemu qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc-dev-powerpc-cross
|
|
codecov: 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 qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc-dev-powerpc-cross
|
|
codecov: ubuntu_gcc_ppc_no_power8
|
|
|
|
- name: Ubuntu GCC PPC64
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64.cmake
|
|
packages: qemu qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-ppc64-cross
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_ppc64
|
|
|
|
- name: Ubuntu GCC PPC64LE
|
|
os: ubuntu-20.04
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake
|
|
packages: qemu qemu-user gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc-dev-ppc64el-cross
|
|
codecov: ubuntu_gcc_ppc64le
|
|
|
|
- name: Ubuntu GCC SPARC64
|
|
os: ubuntu-20.04
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake
|
|
packages: qemu qemu-user gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc-dev-sparc64-cross
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_sparc64
|
|
|
|
- name: Ubuntu GCC S390X ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_s390x
|
|
# The dedicated test VM has 4 cores
|
|
parallels-jobs: 4
|
|
|
|
- name: Ubuntu GCC S390X No vectorized CRC32 ASAN
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_CRC32_VX=OFF -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
packages: qemu qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_s390x_no_crc32
|
|
# The dedicated test VM has 4 cores
|
|
parallels-jobs: 4
|
|
|
|
- name: Ubuntu GCC S390X DFLTCC ASAN
|
|
os: z15
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Address
|
|
asan-options: detect_leaks=0
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_s390x_dfltcc
|
|
# The dedicated test VM has 4 cores
|
|
parallels-jobs: 4
|
|
|
|
- name: Ubuntu GCC S390X DFLTCC Compat UBSAN
|
|
os: z15
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -DZLIB_COMPAT=ON -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Undefined
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_s390x_dfltcc_compat
|
|
# The dedicated test VM has 4 cores
|
|
parallels-jobs: 4
|
|
|
|
- name: Ubuntu Clang S390X DFLTCC MSAN
|
|
os: z15
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cmake-args: -GNinja -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Memory
|
|
# The dedicated test VM has 4 cores
|
|
parallels-jobs: 4
|
|
|
|
- name: Ubuntu MinGW i686
|
|
os: ubuntu-22.04
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-i686.cmake
|
|
packages: wine wine32 gcc-mingw-w64-i686 g++-mingw-w64-i686 libpcre2-8-0=10.39-3ubuntu0.1 libpcre2-8-0:i386=10.39-3ubuntu0.1 libodbc1=2.3.9-5 libodbc1:i386=2.3.9-5 libwine:i386=6.0.3~repack-1 libgphoto2-6:i386=2.5.27-1build2 libsane:i386=1.1.1-5 libgd3=2.3.0-2ubuntu2 libgd3:i386=2.3.0-2ubuntu2
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_mingw_i686
|
|
# Limit parallel test jobs to prevent wine errors
|
|
parallels-jobs: 1
|
|
|
|
- name: Ubuntu MinGW x86_64
|
|
os: ubuntu-latest
|
|
cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-x86_64.cmake
|
|
packages: wine wine64 gcc-mingw-w64 g++-mingw-w64
|
|
ldflags: -static
|
|
codecov: ubuntu_gcc_mingw_x86_64
|
|
# Limit parallel test jobs to prevent wine errors
|
|
parallels-jobs: 1
|
|
|
|
- name: Ubuntu 20.04 Clang
|
|
os: ubuntu-20.04
|
|
compiler: clang-6.0
|
|
cxx-compiler: clang++-6.0
|
|
packages: clang-6.0
|
|
|
|
- name: Ubuntu Clang
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
packages: clang-11 llvm-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
codecov: ubuntu_clang
|
|
|
|
# Check for undefined symbols in the version script for the modern api
|
|
- name: Ubuntu Clang Undefined Symbols
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cmake-args: -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld -Wl,--no-undefined-version" -DZLIBNG_ENABLE_TESTS=OFF
|
|
build-shared: ON
|
|
packages: clang-11 llvm-11 lld
|
|
|
|
# Check for undefined symbols in the version script for the compat api
|
|
- name: Ubuntu Clang Undefined Symbols Compat
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
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-11 llvm-11 lld
|
|
|
|
- name: Ubuntu Clang Inflate Strict
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cmake-args: -DWITH_INFLATE_STRICT=ON
|
|
packages: clang-11 llvm-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
codecov: ubuntu_clang_inflate_strict
|
|
|
|
- name: Ubuntu Clang Inflate Allow Invalid Dist
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cmake-args: -DWITH_INFLATE_ALLOW_INVALID_DIST=ON
|
|
packages: clang-11 llvm-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
codecov: ubuntu_clang_inflate_allow_invalid_dist
|
|
|
|
- name: Ubuntu Clang Reduced Memory
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cmake-args: -DWITH_REDUCED_MEM=ON
|
|
packages: clang-11 llvm-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
codecov: ubuntu_clang_reduced_mem
|
|
|
|
- name: Ubuntu Clang Memory Map
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cflags: -DUSE_MMAP
|
|
packages: clang-11 llvm-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
codecov: ubuntu_clang_mmap
|
|
|
|
- name: Ubuntu Clang Debug
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
packages: clang-11 llvm-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
codecov: ubuntu_clang_debug
|
|
build-config: Debug
|
|
|
|
- name: Ubuntu Clang MSAN
|
|
os: ubuntu-latest
|
|
compiler: clang-11
|
|
cxx-compiler: clang++-11
|
|
cmake-args: -GNinja -DWITH_SANITIZER=Memory
|
|
packages: ninja-build clang-11 llvm-11-tools
|
|
gcov-exec: llvm-cov-11 gcov
|
|
# https://github.com/llvm/llvm-project/issues/55785
|
|
msan-options: use_sigaltstack=0
|
|
|
|
- name: Ubuntu Clang RISC-V
|
|
os: ubuntu-latest
|
|
cmake-args: -GNinja -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain-riscv.cmake -DTOOLCHAIN_PATH=${PWD}/prebuilt-riscv-toolchain-qemu/riscv-clang -DQEMU_PATH=${PWD}/prebuilt-riscv-toolchain-qemu/riscv-qemu/bin/qemu-riscv64
|
|
packages: build-essential cmake ninja-build
|
|
codecov: ubuntu_clang_toolchain_riscv
|
|
|
|
- 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
|
|
|
|
- name: Windows MSVC 2022 v143 Win32
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v143
|
|
|
|
- name: Windows MSVC 2022 v143 Win64
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 17 2022" -A x64 -T v143
|
|
|
|
- name: Windows MSVC 2022 v142 Win32
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v142
|
|
|
|
- name: Windows MSVC 2022 v142 Win64
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 17 2022" -A x64 -T v142
|
|
|
|
- name: Windows MSVC 2022 v141 Win32
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v141
|
|
|
|
- name: Windows MSVC 2022 v141 Win64
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 17 2022" -A x64 -T v141
|
|
|
|
- name: Windows MSVC 2019 v140 Win32
|
|
os: windows-2019
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 16 2019" -A Win32 -T v140
|
|
|
|
- name: Windows MSVC 2019 v140 Win64
|
|
os: windows-2019
|
|
compiler: cl
|
|
cmake-args: -G "Visual Studio 16 2019" -A x64 -T v140
|
|
|
|
- name: Windows MSVC ARM No Test
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -A ARM
|
|
|
|
- name: Windows MSVC ARM64 No Test
|
|
os: windows-latest
|
|
compiler: cl
|
|
cmake-args: -A ARM64
|
|
|
|
- name: Windows ClangCl Win32
|
|
os: windows-latest
|
|
cmake-args: -T ClangCl -A Win32
|
|
|
|
- name: Windows ClangCl Win64
|
|
os: windows-latest
|
|
cmake-args: -T ClangCl -A x64
|
|
|
|
- name: Windows GCC
|
|
os: windows-latest
|
|
compiler: gcc
|
|
cxx-compiler: g++
|
|
cmake-args: -G Ninja
|
|
codecov: win64_gcc
|
|
|
|
- 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
|
|
codecov: win64_gcc_compat_no_opt
|
|
|
|
- name: macOS Clang ASAN
|
|
os: macos-latest
|
|
compiler: clang
|
|
cxx-compiler: clang++
|
|
cmake-args: -DWITH_SANITIZER=Address
|
|
codecov: macos_clang
|
|
|
|
- name: macOS GCC UBSAN
|
|
os: macos-latest
|
|
compiler: gcc-10
|
|
cxx-compiler: g++-10
|
|
cmake-args: -DWITH_SANITIZER=Undefined
|
|
packages: gcc@10
|
|
gcov-exec: gcov-10
|
|
codecov: macos_gcc
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Checkout test corpora
|
|
uses: actions/checkout@v3
|
|
# Don't test against all corpora with MinGW due to Wine being unable to run parallel jobs
|
|
# without connection timeout. Without parallel jobs test runs using Wine take close to an hour.
|
|
if: contains(matrix.name, 'MinGW') == false
|
|
with:
|
|
repository: zlib-ng/corpora
|
|
path: test/data/corpora
|
|
|
|
- name: Add repositories (Wine)
|
|
if: contains(matrix.packages, 'wine32')
|
|
run: sudo dpkg --add-architecture i386
|
|
|
|
- name: Add ubuntu mirrors
|
|
if: runner.os == 'Linux' && matrix.packages
|
|
run: |
|
|
# Github Actions caching proxy is at times unreliable
|
|
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' && matrix.packages
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --allow-downgrades --no-install-recommends ${{ matrix.packages }}
|
|
|
|
- name: Download prebuilt RISC-V Clang toolchain & QEMU emulator
|
|
if: runner.os == 'Linux' && contains(matrix.name, 'RISC-V')
|
|
run: |
|
|
gh release download ubuntu20.04_llvm16.0.0_qemu7.0.0 --repo sifive/prepare-riscv-toolchain-qemu
|
|
tar zxvf prebuilt-riscv-toolchain-qemu.tar.gz
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Install packages (Windows)
|
|
if: runner.os == 'Windows'
|
|
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 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@v12
|
|
|
|
- name: Initialize Wine
|
|
# Prevent parallel test jobs from initializing Wine at the same time
|
|
if: contains(matrix.packages, 'wine')
|
|
run: wineboot --init
|
|
|
|
- name: Compile LLVM C++ libraries (MSAN)
|
|
if: contains(matrix.name, 'MSAN')
|
|
run: |
|
|
git clone --depth=1 https://github.com/llvm/llvm-project --single-branch --branch llvmorg-11.1.0
|
|
cmake -S llvm-project/llvm -B llvm-project/build -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" \
|
|
-DLLVM_USE_SANITIZER=MemoryWithOrigins \
|
|
-DLLVM_LIBC_ENABLE_LINTING=OFF
|
|
cmake --build llvm-project/build -j2 -- cxx cxxabi
|
|
echo "LLVM_BUILD_DIR=`pwd`/llvm-project/build" >> $GITHUB_ENV
|
|
env:
|
|
CC: ${{ matrix.compiler }}
|
|
CXX: ${{ matrix.cxx-compiler }}
|
|
|
|
- name: Generate project files
|
|
shell: bash
|
|
# Shared libraries turned off for qemu ppc* and sparc & reduce code coverage sources
|
|
run: |
|
|
cmake -S ${{ matrix.build-src-dir || '.' }} -B ${{ matrix.build-dir || '.' }} ${{ 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.codecov && '-DWITH_CODE_COVERAGE=ON' }}
|
|
env:
|
|
CC: ${{ matrix.compiler }}
|
|
CXX: ${{ matrix.cxx-compiler }}
|
|
CFLAGS: ${{ matrix.cflags }}
|
|
LDFLAGS: ${{ matrix.ldflags }}
|
|
CI: true
|
|
|
|
- name: Compile source code
|
|
run: cmake --build ${{ matrix.build-dir || '.' }} -j2 --config ${{ matrix.build-config || 'Release' }}
|
|
|
|
- name: Run test cases
|
|
# Don't run tests on Windows ARM
|
|
if: runner.os != 'Windows' || contains(matrix.name, 'ARM') == false
|
|
run: ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '3' }}
|
|
working-directory: ${{ matrix.build-dir || '.' }}
|
|
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.codecov
|
|
shell: bash
|
|
run: |
|
|
python3 -u -m pip install --user gcovr==5.0
|
|
python3 -m gcovr -j 3 --verbose \
|
|
--exclude-unreachable-branches \
|
|
--gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" \
|
|
--root ${{ matrix.build-src-dir || '.' }} \
|
|
--xml --output coverage.xml
|
|
|
|
- name: Upload coverage report
|
|
uses: codecov/codecov-action@v3
|
|
if: matrix.codecov && (env.CODECOV_TOKEN != '' || github.repository == 'zlib-ng/zlib-ng')
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}
|
|
flags: ${{ matrix.codecov }}
|
|
name: ${{ matrix.name }}
|
|
directory: ${{ matrix.build-src-dir || '.' }}
|
|
verbose: true
|
|
fail_ci_if_error: true
|
|
env:
|
|
CODECOV_TOKEN: "${{secrets.CODECOV_TOKEN}}"
|
|
|
|
- name: Upload build errors
|
|
uses: actions/upload-artifact@v3
|
|
if: failure()
|
|
with:
|
|
name: ${{ matrix.name }} (cmake)
|
|
path: |
|
|
**/CMakeFiles/CMakeOutput.log
|
|
**/CMakeFiles/CMakeError.log
|
|
**/Testing/Temporary/*
|
|
coverage.xml
|
|
retention-days: 30
|