]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Added github actions yaml for cmake and configure.
authorNathan Moinvaziri <nathan@nathanm.com>
Wed, 25 Sep 2019 02:40:26 +0000 (19:40 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Tue, 22 Oct 2019 07:25:48 +0000 (09:25 +0200)
Added cmake toolchain files for qemu powerpc, sparc64, and s390x.
Turn off shared libs for qemu and use static builds for qemu.
Fixed maintainer mode being overwriting when in CI by options parsing.
Set CI environment variable to enable Fuzzers by default.
Added support for code-coverage for all tests.

.github/workflows/cmake.yml [new file with mode: 0644]
.github/workflows/configure.yml [new file with mode: 0644]
.travis.yml [deleted file]
CMakeLists.txt
cmake/toolchain-powerpc.cmake [new file with mode: 0644]
cmake/toolchain-powerpc64.cmake [new file with mode: 0644]
cmake/toolchain-powerpc64le.cmake [new file with mode: 0644]
cmake/toolchain-s390x.cmake [new file with mode: 0644]
cmake/toolchain-sparc64.cmake [new file with mode: 0644]

diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
new file mode 100644 (file)
index 0000000..5c14979
--- /dev/null
@@ -0,0 +1,322 @@
+name: CI CMake
+on: [push]
+jobs:
+  ci-cmake:
+    name: ${{ matrix.name }}
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        name: [
+          Ubuntu 18.04 GCC,
+          Ubuntu 18.04 GCC OSB,
+          Ubuntu 18.04 GCC No Opt,
+          Ubuntu 18.04 GCC Compat,
+          Ubuntu 18.04 GCC Compat No Opt,
+          Ubuntu 18.04 GCC Compat,
+          Ubuntu 18.04 GCC ARM SF,
+          Ubuntu 18.04 GCC ARM SF No Opt,
+          Ubuntu 18.04 GCC ARM SF Compat,
+          Ubuntu 18.04 GCC ARM SF Compat No Opt,
+          Ubuntu 18.04 GCC ARM HF,
+          Ubuntu 18.04 GCC ARM HF No Opt,
+          Ubuntu 18.04 GCC ARM HF Compat,
+          Ubuntu 18.04 GCC ARM HF Compat No Opt,
+          Ubuntu 18.04 GCC ARM HF Compat No Neon,
+          Ubuntu 18.04 GCC AARCH64 Compat,
+          Ubuntu 18.04 GCC AARCH64 Compat No Opt,
+          Ubuntu 18.04 GCC PPC Compat,
+          Ubuntu 18.04 GCC PPC64 Compat,
+          Ubuntu 18.04 GCC PPC64LE Compat,
+          Ubuntu 18.04 GCC SPARC64 Compat,
+          Ubuntu 18.04 GCC S390X Compat,
+          Ubuntu 18.04 Clang,
+          Ubuntu 18.04 Clang MSAN,
+          Windows 2019 MSVC Win32,
+          Windows 2019 MSVC Win64,
+          Windows 2019 GCC,
+          Windows 2019 GCC Compat,
+          Windows 2019 GCC Compat No Opt,
+          macOS 10.14 Clang,
+          macOS 10.14 GCC
+        ]
+        include:
+          - name: Ubuntu 18.04 GCC
+            os: ubuntu-18.04
+            compiler: gcc
+            cmake-args: -DWITH_SANITIZERS=ON
+            codecov: ubuntu_gcc
+
+          - name: Ubuntu 18.04 GCC OSB
+            os: ubuntu-18.04
+            compiler: gcc
+            cmake-args: -DWITH_SANITIZERS=ON
+            build-dir: ../build
+            build-src-dir: ../zlib-ng
+            codecov: ubuntu_gcc_osb
+
+          - name: Ubuntu 18.04 GCC No Opt
+            os: ubuntu-18.04
+            compiler: gcc
+            cmake-args: -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            codecov: ubuntu_gcc_no_opt
+
+          - name: Ubuntu 18.04 GCC Compat
+            os: ubuntu-18.04
+            compiler: gcc
+            cmake-args: -DZLIB_COMPAT=ON
+            codecov: ubuntu_gcc_compat
+
+          - name: Ubuntu 18.04 GCC Compat No Opt
+            os: ubuntu-18.04
+            compiler: gcc
+            cmake-args: -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            codecov: ubuntu_gcc_compat_no_opt
+
+          - name: Ubuntu 18.04 GCC Compat
+            os: ubuntu-18.04
+            compiler: gcc
+            cmake-args: -DZLIB_COMPAT=ON -DWITH_SANITIZERS=ON
+            codecov: ubuntu_gcc_compat
+
+          - name: Ubuntu 18.04 GCC ARM SF
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+            codecov: ubuntu_gcc_armsf
+
+          - name: Ubuntu 18.04 GCC ARM SF No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+            codecov: ubuntu_gcc_armsf_no_opt
+
+          - name: Ubuntu 18.04 GCC ARM SF Compat
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi -DZLIB_COMPAT=ON -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+            codecov: ubuntu_gcc_armsf_compat
+
+          - name: Ubuntu 18.04 GCC ARM SF Compat No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+            codecov: ubuntu_gcc_armsf_compat_no_opt
+
+          - name: Ubuntu 18.04 GCC ARM HF
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+            codecov: ubuntu_gcc_armhf
+
+          - name: Ubuntu 18.04 GCC ARM HF No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+            codecov: ubuntu_gcc_armhf_no_opt
+
+          - name: Ubuntu 18.04 GCC ARM HF Compat
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DZLIB_COMPAT=ON -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+            codecov: ubuntu_gcc_armhf_compat
+
+          - name: Ubuntu 18.04 GCC ARM HF Compat No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+            codecov: ubuntu_gcc_armhf_compat_no_opt
+
+          - name: Ubuntu 18.04 GCC ARM HF Compat No Neon
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DZLIB_COMPAT=ON -DWITH_NEON=OFF -DWITH_SANITIZERS=ON
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+            codecov: ubuntu_gcc_armhf_compat_no_neon
+
+          - name: Ubuntu 18.04 GCC AARCH64 Compat
+            os: ubuntu-18.04
+            compiler: aarch64-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DZLIB_COMPAT=ON -DWITH_SANITIZERS=ON
+            asan-options: detect_leaks=0
+            packages: qemu gcc-aarch64-linux-gnu libc-dev-arm64-cross
+            codecov: ubuntu_gcc_aarch64_compat
+
+          - name: Ubuntu 18.04 GCC AARCH64 Compat No Opt
+            os: ubuntu-18.04
+            compiler: aarch64-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO -DWITH_SANITIZERS=ON
+            asan-options: detect_leaks=0
+            packages: qemu gcc-aarch64-linux-gnu libc-dev-arm64-cross
+            codecov: ubuntu_gcc_aarch64_compat_no_opt
+
+          - name: Ubuntu 18.04 GCC PPC Compat
+            os: ubuntu-18.04
+            compiler: powerpc-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake -DZLIB_COMPAT=ON
+            packages: qemu gcc-powerpc-linux-gnu libc-dev-powerpc-cross
+            codecov: ubuntu_gcc_ppc_compat
+
+            cflags: -static
+          - name: Ubuntu 18.04 GCC PPC64 Compat
+            os: ubuntu-18.04
+            compiler: powerpc64-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64.cmake -DZLIB_COMPAT=ON
+            packages: qemu gcc-powerpc64-linux-gnu libc-dev-ppc64-cross
+            cflags: -static
+            codecov: ubuntu_gcc_ppc64_compat
+
+          - name: Ubuntu 18.04 GCC PPC64LE Compat
+            os: ubuntu-18.04
+            compiler: powerpc64le-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake -DZLIB_COMPAT=ON
+            packages: qemu gcc-powerpc64le-linux-gnu libc-dev-ppc64el-cross
+            cflags: -static
+            codecov: ubuntu_gcc_ppc64le_compat
+
+          - name: Ubuntu 18.04 GCC SPARC64 Compat
+            os: ubuntu-18.04
+            compiler: sparc64-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake -DZLIB_COMPAT=ON
+            packages: qemu gcc-sparc64-linux-gnu libc-dev-sparc64-cross
+            cflags: -static
+            codecov: ubuntu_gcc_sparc64_compat
+
+          - name: Ubuntu 18.04 GCC S390X Compat
+            os: ubuntu-18.04
+            compiler: s390x-linux-gnu-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DZLIB_COMPAT=ON
+            packages: qemu gcc-s390x-linux-gnu libc-dev-s390x-cross
+            cflags: -static
+            codecov: ubuntu_gcc_s390x_compat
+
+          - name: Ubuntu 18.04 Clang
+            os: ubuntu-18.04
+            compiler: clang
+            codecov: ubuntu_clang
+
+          - name: Ubuntu 18.04 Clang MSAN
+            os: ubuntu-18.04
+            compiler: clang
+            cmake-args: -GNinja -DWITH_MSAN=ON
+            packages:  ninja-build
+            cflags: -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize-memory-track-origins
+            codecov: ubuntu_clang_msan
+
+          - name: Windows 2019 MSVC Win32
+            os: windows-2019
+            compiler: cl
+            cmake-args: -A Win32
+
+          - name: Windows 2019 MSVC Win64
+            os: windows-2019
+            compiler: cl
+            cmake-args: -A x64
+
+          - name: Windows 2019 GCC
+            os: windows-2019
+            compiler: gcc
+            cmake-args: -G Ninja
+            codecov: win64_gcc
+
+          - name: Windows 2019 GCC Compat
+            os: windows-2019
+            compiler: gcc
+            cmake-args: -G Ninja -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO
+            codecov: win64_gcc
+
+          - name: Windows 2019 GCC Compat No Opt
+            os: windows-2019
+            compiler: gcc
+            cmake-args: -G Ninja -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO
+            codecov: win64_gcc
+
+          - name: macOS 10.14 Clang
+            os: macOS-10.14
+            compiler: clang
+            cmake-args: -DWITH_SANITIZERS=ON
+            codecov: macos_clang
+
+          - name: macOS 10.14 GCC
+            os: macOS-10.14
+            compiler: gcc
+            cmake-args: -DWITH_SANITIZERS=ON
+            codecov: macos_gcc
+
+    steps:
+    - uses: actions/checkout@v1
+
+    - name: Install packages (Ubuntu)
+      if: runner.os == 'Linux'
+      run: |
+        sudo apt-get install -y ninja-build ${{ matrix.packages }}
+        sudo pip install codecov
+
+    - name: Install Clang code coverage tools (Ubuntu)
+      if: runner.os == 'Linux' && matrix.codecov && matrix.compiler == 'clang'
+      run: |
+        sudo apt-get install -y gcc-7 clang-7 clang-tools-7 llvm lcov
+
+    - name: Install packages (Windows)
+      if: runner.os == 'Windows'
+      # Use gcov-7 on windows because gcov-8 throws tons of warnings
+      # https://partner-bugzilla.redhat.com/show_bug.cgi?id=1577508
+      # Need to use special fork of codecov-python for Windows
+      # https://github.com/codecov/codecov-python/pull/169
+      run: |
+        choco install ninja ${{ matrix.packages }}
+        choco uninstall mingw
+        choco install mingw --version=7.3.0
+        pip install git+https://github.com/nmoinvaz/codecov-python.git@master
+
+    - name: Install packages (macOS)
+      if: runner.os == 'macOS'
+      run: |
+        brew install ninja llvm ${{ matrix.packages }}
+        sudo pip install codecov
+
+    - name: Generate project files
+      # Shared libaries turned off for qemu ppc* and sparc & reduce code coverage sources
+      # Gzip file operations turned on to reduce code coverage sources across multiple tests
+      run: |
+        mkdir ${{ matrix.build-dir || '.not-used' }}
+        cd ${{ matrix.build-dir || '.' }}
+        ${{ matrix.cmake-prefix }} cmake ${{ matrix.build-src-dir || '.' }} ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DWITH_GZFILEOP=ON
+      env:
+        CC: ${{ matrix.compiler }}
+        CFLAGS: ${{ matrix.cflags }}
+        LDFLAGS: ${{ matrix.ldflags }}
+        CI: true
+
+    - name: Compile source code
+      run: |
+        cd ${{ matrix.build-dir || '.' }}
+        ${{ matrix.cmake-prefix }} cmake --build . --config Release
+
+    - name: Run test cases
+      run: |
+        cd ${{ matrix.build-dir || '.' }}
+        ctest -C Release --output-on-failure --max-width 120
+      env:
+        ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=1' }}
+        MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=1' }}
+        TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=1' }}
+        LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=1' }}
+
+    - name: Upload coverage report
+      if: matrix.codecov
+      shell: pwsh
+      run: |
+        $gcovfiles = (Get-ChildItem -Path "*.gcov").Name
+        codecov -f $gcovfiles -F "${{ matrix.codecov }}" --name "${{ matrix.name }}"
+      env:
+        # Codecov does not yet support GitHub Actions
+        CODECOV_TOKEN: "${{secrets.CODECOV_TOKEN}}"
diff --git a/.github/workflows/configure.yml b/.github/workflows/configure.yml
new file mode 100644 (file)
index 0000000..1ee769c
--- /dev/null
@@ -0,0 +1,154 @@
+name: CI Configure
+on: [push]
+jobs:
+  ci-configure:
+    name: ${{ matrix.name }}
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        name: [
+          Ubuntu 18.04 Clang,
+          Ubuntu 18.04 Clang OSB,
+          Ubuntu 18.04 Clang No Opt,
+          Ubuntu 18.04 Clang Compat,
+          Ubuntu 18.04 Clang Compat No Opt,
+          Ubuntu 18.04 Clang Compat,
+          Ubuntu 18.04 Clang ARM SF,
+          Ubuntu 18.04 Clang ARM SF No Opt,
+          Ubuntu 18.04 Clang ARM SF Compat,
+          Ubuntu 18.04 Clang ARM SF Compat No Opt,
+          Ubuntu 18.04 Clang ARM HF,
+          Ubuntu 18.04 Clang ARM HF No Opt,
+          Ubuntu 18.04 Clang ARM HF Compat,
+          Ubuntu 18.04 Clang ARM HF Compat No Opt,
+          Ubuntu 18.04 Clang ARM HF Compat No Neon,
+          Ubuntu 18.04 Clang AARCH64 Compat No Opt,
+          Ubuntu 18.04 Clang AARCH64 Compat
+        ]
+        include:
+          - name: Ubuntu 18.04 Clang
+            os: ubuntu-18.04
+            compiler: gcc
+            configure-args: --warn
+
+          - name: Ubuntu 18.04 Clang OSB
+            os: ubuntu-18.04
+            compiler: gcc
+            configure-args: --warn
+            build-dir: ../build
+            build-src-dir: ../zlib-ng
+
+          - name: Ubuntu 18.04 Clang No Opt
+            os: ubuntu-18.04
+            compiler: gcc
+            configure-args: --warn --without-optimizations --without-new-strategies
+
+          - name: Ubuntu 18.04 Clang Compat
+            os: ubuntu-18.04
+            compiler: gcc
+            configure-args: --warn --zlib-compat
+
+          - name: Ubuntu 18.04 Clang Compat No Opt
+            os: ubuntu-18.04
+            compiler: gcc
+            configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
+
+          - name: Ubuntu 18.04 Clang Compat
+            os: ubuntu-18.04
+            compiler: gcc
+            configure-args: --warn --zlib-compat
+
+          - name: Ubuntu 18.04 Clang ARM SF
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            configure-args: --warn
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM SF No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            configure-args: --warn --without-optimizations --without-new-strategies
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM SF Compat
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            configure-args: --warn --zlib-compat
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM SF Compat No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabi-gcc
+            configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
+            packages: qemu gcc-arm-linux-gnueabi libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM HF
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            configure-args: --warn
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM HF No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            configure-args: --warn --without-optimizations --without-new-strategies
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM HF Compat
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            configure-args: --warn --zlib-compat
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM HF Compat No Opt
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang ARM HF Compat No Neon
+            os: ubuntu-18.04
+            compiler: arm-linux-gnueabihf-gcc
+            configure-args: --warn --zlib-compat --without-neon
+            packages: qemu gcc-arm-linux-gnueabihf libc-dev-armel-cross
+
+          - name: Ubuntu 18.04 Clang AARCH64 Compat
+            os: ubuntu-18.04
+            compiler: aarch64-linux-gnu-gcc
+            configure-args: --warn --zlib-compat
+            asan-options: detect_leaks=0
+            packages: qemu gcc-aarch64-linux-gnu libc-dev-arm64-cross
+
+          - name: Ubuntu 18.04 Clang AARCH64 Compat No Opt
+            os: ubuntu-18.04
+            compiler: aarch64-linux-gnu-gcc
+            configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
+            asan-options: detect_leaks=0
+            packages: qemu gcc-aarch64-linux-gnu libc-dev-arm64-cross
+
+    steps:
+    - uses: actions/checkout@v1
+
+    - name: Generate project files
+      run: |
+        mkdir ${{ matrix.build-dir || '.not-used' }}
+        cd ${{ matrix.build-dir || '.' }}
+        ${{ matrix.build-src-dir || '.' }}/configure ${{ matrix.configure-args }}
+      env:
+        CI: true
+
+    - name: Compile source code
+      run: |
+        cd ${{ matrix.build-dir || '.' }}
+        make -j2
+
+    - name: Run test cases
+      run: |
+        cd ${{ matrix.build-dir || '.' }}
+        make test
+      env:
+        ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=1' }}
+        MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=1' }}
+        TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=1' }}
+        LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=1' }}
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644 (file)
index 7dae5c8..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-# Notes:
-# - Fuzzers get automatically enabled when cmake detect CI
-# - ccache cannot be used because it caches gcno(coverage) files,
-#   and it is slow during travis network issues
-# - "language" selects what vm image is chosen
-#   - Linux, "C" selects the full generic image, we only need the minimal image
-#   - Windows builds require "c" image
-
-language: minimal
-bundler_args: --retry 5
-dist: bionic
-
-env:
-  global:
-    - BUILDDIR=.
-    - MAKER="make -j2"
-    - TESTER="make test"
-    - CFLAGS="-O2 -g --coverage"
-    - LDFLAGS="--coverage"
-
-    - ASAN_OPTIONS="verbosity=1"
-    - TSAN_OPTIONS="verbosity=1"
-    - MSAN_OPTIONS="verbosity=1"
-    - LSAN_OPTIONS="verbosity=1"
-
-    # Shorthand variables
-    - MSAN="-DWITH_MSAN=ON"
-    - SANI="-DWITH_SANITIZERS=ON"
-    - TC_AARCH64="-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake"
-    - TC_ARM="-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake"
-    - T_ARMHF="-DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf"
-    - T_ARMSF="-DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi"
-    - CTEST="ctest -C Release --output-on-failure --max-width 120"
-
-matrix:
-  include:
-    # Linux x86-64 tests
-    #   gcc/configure
-    - os: linux
-      compiler: gcc
-      env: GENERATOR="./configure --warn"
-
-    - os: linux
-      compiler: gcc
-      env: GENERATOR="./configure --warn --zlib-compat --without-optimizations --without-new-strategies"
-
-    - os: linux
-      compiler: gcc
-      env:
-        - GENERATOR="../zlib-ng/configure --warn --zlib-compat"
-        - BUILDDIR=../build
-
-    #   gcc/cmake
-    - os: linux
-      compiler: gcc
-      env:
-        - GENERATOR="cmake . $SANI"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: gcc
-      env:
-        - GENERATOR="cmake . -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO $SANI"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: gcc
-      env:
-        - GENERATOR="cmake ../zlib-ng -DZLIB_COMPAT=ON $SANI"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-    #   gcc-9/cmake
-    - os: linux
-      compiler: gcc-9
-      addons:
-        apt:
-          sources:
-            - sourceline: 'ppa:ubuntu-toolchain-r/test'
-          packages:
-            - gcc-9
-      env:
-        - CC=gcc-9
-        - GENERATOR="cmake . $SANI"
-        - TESTER="$CTEST"
-
-    #   clang/configure
-    - os: linux
-      compiler: clang
-      env: GENERATOR="./configure --warn --zlib-compat"
-
-    #   clang/cmake
-    - os: linux
-      compiler: clang
-      env:
-        - GENERATOR="cmake ../zlib-ng"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-    - os: linux
-      compiler: clang
-      env:
-        - GENERATOR="scan-build -v --status-bugs cmake ../zlib-ng $MSAN"
-        - MAKER="scan-build -v --status-bugs make"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-    - os: linux
-      compiler: clang
-      env:
-        - GENERATOR="scan-build -v --status-bugs cmake ../zlib-ng -DZLIB_COMPAT=ON $SANI"
-        - MAKER="scan-build -v --status-bugs make"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-
-    # Linux ppc64le
-    #   gcc/cmake
-    - os: linux-ppc64le
-      dist: xenial
-      compiler: gcc-9
-      addons:
-        apt:
-          sources:
-            - sourceline: 'ppa:ubuntu-toolchain-r/test'
-          packages:
-            - gcc-9
-      env:
-        - CC=gcc-9
-        - GENERATOR="cmake . $SANI"
-
-    - os: linux-ppc64le
-      dist: xenial
-      compiler: gcc-9
-      addons:
-        apt:
-          sources:
-            - sourceline: 'ppa:ubuntu-toolchain-r/test'
-          packages:
-            - gcc-9
-      env:
-        - CC=gcc-9
-        - GENERATOR="cmake ../zlib-ng -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO $SANI"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-    #   clang/configure
-    - os: linux-ppc64le
-      dist: xenial
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-xenial-6.0
-          packages:
-            - clang-6.0
-      env:
-        - CC=clang-6.0
-        - GENERATOR="./configure --warn --zlib-compat"
-
-    #   clang/cmake
-    - os: linux-ppc64le
-      dist: xenial
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-xenial-6.0
-          packages:
-            - clang-6.0
-      env:
-        - CC=clang-6.0
-        - GENERATOR="cmake . $SANI"
-        - TESTER="$CTEST"
-
-    #   clang/cmake
-    - os: linux-ppc64le
-      dist: xenial
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-xenial-6.0
-          packages:
-            - clang-6.0
-      env:
-        - CC=clang-6.0
-        - GENERATOR="cmake ../zlib-ng -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-
-    # Linux AARCH64, cross compiled + qemu
-    #   gcc/configure
-    - os: linux
-      compiler: aarch64-linux-gnu-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-aarch64-linux-gnu
-            - libc-dev-arm64-cross
-      # For all aarch64 implementations NEON is mandatory, while crypto/crc are not.
-      env:
-        - GENERATOR="./configure --warn"
-        - CHOST=aarch64-linux-gnu
-
-    - os: linux
-      compiler: aarch64-linux-gnu-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-aarch64-linux-gnu
-            - libc-dev-arm64-cross
-      env:
-        - GENERATOR="../zlib-ng/configure --warn --zlib-compat"
-        - CHOST=aarch64-linux-gnu
-        - BUILDDIR=../build
-
-    #   gcc/cmake
-    - os: linux
-      compiler: aarch64-linux-gnu-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-aarch64-linux-gnu
-            - libc-dev-arm64-cross
-      # For all aarch64 implementations NEON is mandatory, while crypto/crc are not.
-      env:
-        - ASAN_OPTIONS=detect_leaks=0  # Crashes under qemu
-        - GENERATOR="cmake . $TC_AARCH64 -DZLIB_COMPAT=ON $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: aarch64-linux-gnu-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-aarch64-linux-gnu
-            - libc-dev-arm64-cross
-      env:
-        - ASAN_OPTIONS=detect_leaks=0  # Crashes under qemu
-        - GENERATOR="cmake . $TC_AARCH64 -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    # Linux ARM Hard-float, cross compiled + qemu
-    #   gcc/configure
-    - os: linux
-      compiler: arm-linux-gnueabihf-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabihf
-            - libc-dev-armhf-cross
-      env:
-        - GENERATOR="./configure --warn"
-        - CHOST=arm-linux-gnueabihf
-
-    - os: linux
-      compiler: arm-linux-gnueabihf-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabihf
-            - libc-dev-armhf-cross
-      env:
-        - GENERATOR="./configure --warn --zlib-compat --without-neon"
-        - CHOST=arm-linux-gnueabihf
-
-    - os: linux
-      compiler: arm-linux-gnueabihf-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabihf
-            - libc-dev-armhf-cross
-      env:
-        - GENERATOR="./configure --warn --zlib-compat"
-        - CHOST=arm-linux-gnueabihf
-
-    #   gcc/cmake
-    - os: linux
-      compiler: arm-linux-gnueabihf-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabihf
-            - libc-dev-armhf-cross
-      env:
-        - GENERATOR="cmake . $TC_ARM $T_ARMHF $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: arm-linux-gnueabihf-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabihf
-            - libc-dev-armhf-cross
-      env:
-        - GENERATOR="cmake . $TC_ARM $T_ARMHF -DZLIB_COMPAT=ON -DWITH_NEON=OFF $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: arm-linux-gnueabihf-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabihf
-            - libc-dev-armhf-cross
-      env:
-        - GENERATOR="cmake . $TC_ARM $T_ARMHF -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    # Linux ARM Soft-float, cross compiled + qemu
-    #   gcc/configure
-    - os: linux
-      compiler: arm-linux-gnueabi-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabi
-            - libc-dev-armel-cross
-      env:
-        - GENERATOR="./configure --warn"
-        - CHOST=arm-linux-gnueabi
-
-    - os: linux
-      compiler: arm-linux-gnueabi-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabi
-            - libc-dev-armel-cross
-      env:
-        - GENERATOR="./configure --warn --zlib-compat"
-        - CHOST=arm-linux-gnueabi
-
-    #   gcc/cmake
-    - os: linux
-      compiler: arm-linux-gnueabi-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabi
-            - libc-dev-armel-cross
-      env:
-        - GENERATOR="cmake . $TC_ARM $T_ARMSF $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: arm-linux-gnueabi-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabi
-            - libc-dev-armel-cross
-      env:
-        - GENERATOR="cmake . $TC_ARM $T_ARMSF -DZLIB_COMPAT=ON $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: linux
-      compiler: arm-linux-gnueabi-gcc
-      addons:
-        apt:
-          packages:
-            - qemu
-            - gcc-arm-linux-gnueabi
-            - libc-dev-armel-cross
-      env:
-        - GENERATOR="cmake . $TC_ARM $T_ARMSF -DWITH_NEW_STRATEGIES=NO -DWITH_OPTIM=NO $SANI"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-
-    # Windows tests
-    #   msvc/cmake
-    - os: windows
-      language: c
-      env:
-        - GENERATOR="cmake . "
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: windows
-      language: c
-      env:
-        - GENERATOR="cmake . -A x64"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-
-    - os: windows
-      language: c
-      env:
-        - GENERATOR="cmake ..\\zlib-ng -DZLIB_COMPAT=ON"
-        - MAKER="cmake --build . --config Release"
-        - TESTER="$CTEST"
-        - BUILDDIR=..\\build
-
-
-    # OSX tests
-    #   gcc/configure
-    - os: osx
-      compiler: gcc
-      env: GENERATOR="./configure --warn"
-
-    - os: osx
-      compiler: gcc
-      env:
-        - GENERATOR="../zlib-ng/configure --warn --zlib-compat"
-        - BUILDDIR=../build
-
-    #   gcc/cmake
-    - os: osx
-      compiler: gcc
-      env:
-        - GENERATOR="cmake . $SANI"
-        - TESTER="$CTEST"
-
-    #   clang/configure
-    - os: osx
-      compiler: clang
-      env: GENERATOR="./configure --warn --zlib-compat"
-
-    #   clang/cmake
-    - os: osx
-      compiler: clang
-      env:
-        - GENERATOR="cmake ../zlib-ng $SANI"
-        - TESTER="$CTEST"
-        - BUILDDIR=../build
-
-
-
-
-script:
-  - mkdir -p $BUILDDIR
-  - cd $BUILDDIR
-  - $GENERATOR
-  - $MAKER
-  - $TESTER
-
-after_success:
-  - bash <(curl -s https://codecov.io/bash --connect-timeout 10 --retry 8 --retry-delay 10) -U "--connect-timeout 10 --retry 8 --retry-delay 10"
-
-after_failure:
-  - cd $BUILDDIR
-  - cat CMakeFiles/CMakeError.log || true
-  - cat configure.log || true
index ee5be006da0337ba06526590cf1f63abd39b8488..978e746f7c56db81799b3add1b49b6c173f21699 100644 (file)
@@ -70,14 +70,6 @@ else()
     add_feature_info(CMAKE_BUILD_TYPE 1 "Build type: ${CMAKE_BUILD_TYPE} (selected)")
 endif()
 
-if(DEFINED ENV{CI})
-    message(STATUS "CI detected, enabling maintainer mode.")
-    set(MAINTAINER ON)
-endif()
-if(MAINTAINER)
-    set(WITH_FUZZERS ON)
-endif()
-
 check_include_file(sys/types.h HAVE_SYS_TYPES_H)
 check_include_file(stdint.h    HAVE_STDINT_H)
 check_include_file(stddef.h    HAVE_STDDEF_H)
@@ -105,6 +97,15 @@ elseif(BASEARCH_S360_FOUND AND "${ARCH}" MATCHES "s390x")
 endif()
 option(MAINTAINER "Build with extra warnings and tests enabled" OFF)
 
+if(DEFINED ENV{CI})
+    message(STATUS "CI detected, enabling maintainer mode.")
+    set(MAINTAINER ON)
+    set(CODECOVERAGE ON)
+endif()
+if(MAINTAINER)
+    set(WITH_FUZZERS ON)
+endif()
+
 add_feature_info(ZLIB_COMPAT ZLIB_COMPAT "Provide a zlib-compatible API")
 add_feature_info(WITH_GZFILEOP WITH_GZFILEOP "Compile with support for gzFile-related functions")
 add_feature_info(WITH_OPTIM WITH_OPTIM "Build with optimisation")
@@ -247,6 +248,14 @@ if(MAINTAINER)
 else()
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNFLAGS} ${WARNFLAGS_DISABLE}")
 endif()
+if(CODECOVERAGE)
+    if(CMAKE_C_COMPILER_ID MATCHES "Clang")
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -g -coverage")
+    elseif(__GNUC__)
+        # Some versions of GCC don't support -coverage shorthand
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -fprofile-arcs -ftest-coverage")
+    endif()
+endif()
 
 #
 # Check to see if we have large file support
diff --git a/cmake/toolchain-powerpc.cmake b/cmake/toolchain-powerpc.cmake
new file mode 100644 (file)
index 0000000..4f7f8e9
--- /dev/null
@@ -0,0 +1,25 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR powerpc)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_C_COMPILER_TARGET "powerpc-linux-gnu")
+set(CMAKE_CXX_COMPILER_TARGET "powerpc-linux-gnu")
+
+set(CMAKE_CROSSCOMPILING TRUE)
+set(CMAKE_CROSSCOMPILING_EMULATOR qemu-ppc -L /usr/${CMAKE_C_COMPILER_TARGET}/)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+find_program(C_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-gcc)
+if(NOT C_COMPILER_FULL_PATH)
+    message(FATAL_ERROR "Cross-compiler ${CMAKE_C_COMPILER_TARGET}-gcc not found")
+endif()
+set(CMAKE_C_COMPILER ${C_COMPILER_FULL_PATH})
+
+find_program(CXX_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-g++)
+if(CXX_COMPILER_FULL_PATH)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH})
+endif()
diff --git a/cmake/toolchain-powerpc64.cmake b/cmake/toolchain-powerpc64.cmake
new file mode 100644 (file)
index 0000000..4be3bbd
--- /dev/null
@@ -0,0 +1,25 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR ppc64)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_C_COMPILER_TARGET "powerpc64-linux-gnu")
+set(CMAKE_CXX_COMPILER_TARGET "powerpc64-linux-gnu")
+
+set(CMAKE_CROSSCOMPILING TRUE)
+set(CMAKE_CROSSCOMPILING_EMULATOR qemu-ppc64 -L /usr/${CMAKE_C_COMPILER_TARGET}/)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+find_program(C_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-gcc)
+if(NOT C_COMPILER_FULL_PATH)
+    message(FATAL_ERROR "Cross-compiler ${CMAKE_C_COMPILER_TARGET}-gcc not found")
+endif()
+set(CMAKE_C_COMPILER ${C_COMPILER_FULL_PATH})
+
+find_program(CXX_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-g++)
+if(CXX_COMPILER_FULL_PATH)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH})
+endif()
diff --git a/cmake/toolchain-powerpc64le.cmake b/cmake/toolchain-powerpc64le.cmake
new file mode 100644 (file)
index 0000000..5535f61
--- /dev/null
@@ -0,0 +1,25 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR ppc64le)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_C_COMPILER_TARGET "powerpc64le-linux-gnu")
+set(CMAKE_CXX_COMPILER_TARGET "powerpc64le-linux-gnu")
+
+set(CMAKE_CROSSCOMPILING TRUE)
+set(CMAKE_CROSSCOMPILING_EMULATOR qemu-ppc64le -L /usr/${CMAKE_C_COMPILER_TARGET}/)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+find_program(C_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-gcc)
+if(NOT C_COMPILER_FULL_PATH)
+    message(FATAL_ERROR "Cross-compiler ${CMAKE_C_COMPILER_TARGET}-gcc not found")
+endif()
+set(CMAKE_C_COMPILER ${C_COMPILER_FULL_PATH})
+
+find_program(CXX_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-g++)
+if(CXX_COMPILER_FULL_PATH)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH})
+endif()
diff --git a/cmake/toolchain-s390x.cmake b/cmake/toolchain-s390x.cmake
new file mode 100644 (file)
index 0000000..41bc0d1
--- /dev/null
@@ -0,0 +1,25 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR s390x)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_C_COMPILER_TARGET "s390x-linux-gnu")
+set(CMAKE_CXX_COMPILER_TARGET "s390x-linux-gnu")
+
+set(CMAKE_CROSSCOMPILING TRUE)
+set(CMAKE_CROSSCOMPILING_EMULATOR qemu-s390x -L /usr/${CMAKE_C_COMPILER_TARGET}/)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+find_program(C_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-gcc)
+if(NOT C_COMPILER_FULL_PATH)
+    message(FATAL_ERROR "Cross-compiler ${CMAKE_C_COMPILER_TARGET}-gcc not found")
+endif()
+set(CMAKE_C_COMPILER ${C_COMPILER_FULL_PATH})
+
+find_program(CXX_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-g++)
+if(CXX_COMPILER_FULL_PATH)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH})
+endif()
diff --git a/cmake/toolchain-sparc64.cmake b/cmake/toolchain-sparc64.cmake
new file mode 100644 (file)
index 0000000..f0cd995
--- /dev/null
@@ -0,0 +1,25 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR sparc64)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_C_COMPILER_TARGET "sparc64-linux-gnu")
+set(CMAKE_CXX_COMPILER_TARGET "sparc64-linux-gnu")
+
+set(CMAKE_CROSSCOMPILING TRUE)
+set(CMAKE_CROSSCOMPILING_EMULATOR qemu-sparc64 -L /usr/${CMAKE_C_COMPILER_TARGET}/)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+find_program(C_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-gcc)
+if(NOT C_COMPILER_FULL_PATH)
+    message(FATAL_ERROR "Cross-compiler ${CMAKE_C_COMPILER_TARGET}-gcc not found")
+endif()
+set(CMAKE_C_COMPILER ${C_COMPILER_FULL_PATH})
+
+find_program(CXX_COMPILER_FULL_PATH ${CMAKE_C_COMPILER_TARGET}-g++)
+if(CXX_COMPILER_FULL_PATH)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH})
+endif()