name: CI Matrix on: [push, pull_request] jobs: Windows: name: Windows ${{ matrix.runs.generator }} (${{ matrix.build-type }}) runs-on: ${{ matrix.runs.os }} strategy: fail-fast: false matrix: build-type: [Release, Debug] runs: [ {generator: "Ninja", os: windows-latest}, {generator: "NMake Makefiles", os: windows-latest}, {generator: "Visual Studio 16 2019", os: windows-2019}] steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Print env run: | echo github.event.action: ${{ github.event.action }} echo github.event_name: ${{ github.event_name }} - name: Setup Ninja uses: abdes/gha-setup-ninja@master with: version: 1.11.0 - name: Setup cmake uses: jwlawson/actions-setup-cmake@v1.14 with: cmake-version: 3.21.x - name: Setup ccache # If ccache behaves badly on windows, skip this step # if: runner.os != 'Windows' uses: Chocobo1/setup-ccache-action@v1 with: install_ccache: true update_packager_index: true prepend_symlinks_to_path: true windows_compile_environment: msvc # this field is required - name: Set environment uses: ilammy/msvc-dev-cmd@v1 - name: Configure run: | cmake ` -S . ` -B build ` -D CMAKE_BUILD_TYPE=${{ matrix.build-type }} ` -G "${{ matrix.runs.generator }}" ` -D USE_CCACHE=ON ` -D CMAKE_VERBOSE_MAKEFILE=ON - name: Build run: cmake --build build --config ${{ matrix.build-type }} - name: Run cryptest run: ctest --verbose -j40 -R cryptest --test-dir build -C ${{ matrix.build-type }} - name: Run build tests run: ctest -j40 -E cryptest --output-on-failure --test-dir build -C ${{ matrix.build-type }} MacOS: name: ${{ matrix.config.name }} ${{matrix.generator }} (${{ matrix.build-type }}) runs-on: macos-latest strategy: fail-fast: false matrix: build-type: [Release, Debug] generator: [Ninja, Xcode] config: - { name: "MacOS", omp: "OFF", } - { name: "MacOS-omp-homebrew", omp: "ON", } - { name: "MacOS-omp-macports", omp: "ON", } steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Print env run: | echo github.event.action: ${{ github.event.action }} echo github.event_name: ${{ github.event_name }} - name: Setup Ninja uses: abdes/gha-setup-ninja@master with: version: 1.11.0 - name: Setup cmake uses: jwlawson/actions-setup-cmake@v1.14 with: cmake-version: 3.21.x - name: Setup ccache uses: Chocobo1/setup-ccache-action@v1 with: install_ccache: true update_packager_index: true prepend_symlinks_to_path: false windows_compile_environment: msvc # this field is required - name: Install macports uses: melusina-org/setup-macports@v1 if: endsWith(matrix.config.name, 'macports') - name: Install libomp (macports) run: | port install libomp brew uninstall --ignore-dependencies --zap libomp if: endsWith(matrix.config.name, 'macports') - name: Setup XCode uses: mobiledevops/xcode-select-version-action@v1 with: xcode-select-version: 13.1 if: matrix.generator == 'Xcode' - name: Configure run: | cmake \ -S . \ -B build \ -G ${{ matrix.generator }} \ -D USE_CCACHE=ON \ -D CMAKE_VERBOSE_MAKEFILE=ON \ -D USE_OPENMP=${{ matrix.config.omp }} \ -D CMAKE_BUILD_TYPE=${{ matrix.build-type }} - name: Build run: | NINJA_STATUS="[%f/%t %o/sec] " export NINJA_STATUS cmake --build build --config ${{ matrix.build-type }} - name: Run cryptest run: ctest -j40 --verbose -R "cryptest" --test-dir build -C ${{ matrix.build-type }} - name: Run build tests run: ctest -j40 -E "cryptest" --output-on-failure --test-dir build -C ${{ matrix.build-type }} Ubuntu: name: ${{ matrix.config.name }} (${{ matrix.build-type }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: build-type: [Release, Debug] config: - { name: "ubuntu", cc: "gcc-10", cxx: "g++-10", generators: "Ninja", } - { name: "ubuntu-gcc12", cc: "gcc-12", cxx: "g++-12", generators: "Ninja", } steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Print env run: | echo github.event.action: ${{ github.event.action }} echo github.event_name: ${{ github.event_name }} - name: Setup Ninja uses: abdes/gha-setup-ninja@master with: version: 1.11.0 - name: Setup cmake uses: jwlawson/actions-setup-cmake@v1.14 with: cmake-version: 3.21.x - name: Install ccache shell: cmake -P {0} run: | set(ccache_version "4.6.3") set(ccache_dist "ccache-${ccache_version}-linux-x86_64") set(ccache_url "https://github.com/ccache/ccache/releases/download/v${ccache_version}/${ccache_dist}.tar.xz") file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS) execute_process(COMMAND ${CMAKE_COMMAND} -E tar zxvf ./ccache.tar.xz) # Add to PATH environment variable file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${ccache_dist}" ccache_dir) set(path_separator ":") file(APPEND "$ENV{GITHUB_PATH}" "$ENV{GITHUB_WORKSPACE}${path_separator}${ccache_dir}") - name: Setup ccache uses: Chocobo1/setup-ccache-action@v1 with: install_ccache: false update_packager_index: false prepend_symlinks_to_path: false windows_compile_environment: msvc # this field is required - name: Configure run: | export CC=${{ matrix.config.cc }} export CXX=${{ matrix.config.cxx }} export PATH=${GITHUB_WORKSPACE}:${PATH} cmake \ -S . \ -B build \ -D CMAKE_BUILD_TYPE=$ENV{BUILD_TYPE} \ -G Ninja \ -D CMAKE_MAKE_PROGRAM=ninja \ -D USE_CCACHE=ON \ -D CMAKE_VERBOSE_MAKEFILE=ON \ -D CMAKE_BUILD_TYPE=${{ matrix.build-type }} - name: Build run: | export NINJA_STATUS="[%f/%t %o/sec] " cmake --build build --target all --config ${{ matrix.build-type }} - name: Run cryptest run: ctest -j40 --verbose -R cryptest --test-dir build -C ${{ matrix.build-type }} - name: Run build tests run: | export CC=${{ matrix.config.cc }} export CXX=${{ matrix.config.cxx }} ctest -j40 -E cryptest --output-on-failure --test-dir build -C ${{ matrix.build-type }} MSys: runs-on: windows-latest strategy: fail-fast: false matrix: build-type: [Release, Debug] sys: [mingw32, mingw64, ucrt64, clang64] config: - { name: "with OMP ", omp: ON, } - { name: "", omp: "OFF", } exclude: - sys: mingw32 build-type: Debug name: MSys - ${{ matrix.sys }} ${{ matrix.config.name }}(${{ matrix.build-type }}) defaults: run: shell: msys2 {0} steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup MSYS2 uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.sys }} update: true install: >- git make pacboy: >- toolchain:p cmake:p - name: Setup ccache uses: Chocobo1/setup-ccache-action@v1 with: prepend_symlinks_to_path: false windows_compile_environment: msys2 - name: Configure run: | cmake -G"Unix Makefiles" \ -S . \ -B build \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \ -DUSE_OPENMP=${{ matrix.config.omp }} \ -D USE_CCACHE=ON - name: Build run: cmake --build build --config ${{ matrix.build-type }} - name: Run cryptest run: ctest -j40 --verbose -R cryptest --test-dir build -C ${{ matrix.build-type }} - name: Run tests run: ctest -j40 -E cryptest --output-on-failure --test-dir build -C ${{ matrix.build-type }} cygwin: strategy: fail-fast: false matrix: build-type: [Release] config: - { name: "with OMP ", omp: ON, } - { name: "", omp: "OFF", } runs-on: windows-latest defaults: run: shell: C:\cygwin\bin\bash.exe --login -o igncr '{0}' name: Cygwin ${{ matrix.config.name }}(${{ matrix.build-type }}) steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup cygwin uses: cygwin/cygwin-install-action@master with: packages: >- ccache cmake gcc-core gcc-g++ ninja - name: Configure run: | cmake /cygdrive/d/a/cryptopp-cmake/cryptopp-cmake \ -B build \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -G Ninja \ -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \ -DUSE_OPENMP=${{ matrix.config.omp }} \ -D USE_CCACHE=ON - name: Build run: cmake --build build --config ${{ matrix.build-type }} - name: Run cryptest run: ctest -j40 --verbose -R cryptest --test-dir build -C ${{ matrix.build-type }} - name: Run tests run: ctest -j40 -E cryptest --output-on-failure --test-dir build -C ${{ matrix.build-type }}