| name: windows |
| |
| on: [push, pull_request] |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| build: |
| runs-on: ${{matrix.os}} |
| strategy: |
| matrix: |
| # windows-2019 has MSVC 2019 installed; |
| # windows-2022 has MSVC 2022 installed: |
| # https://github.com/actions/virtual-environments. |
| os: [windows-2019] |
| platform: [Win32, x64] |
| toolset: [v141, v142] |
| standard: [14, 17, 20] |
| shared: ["", -DBUILD_SHARED_LIBS=ON] |
| build_type: [Debug, Release] |
| exclude: |
| - { toolset: v141, standard: 20 } |
| - { toolset: v142, standard: 14 } |
| - { platform: Win32, toolset: v141 } |
| - { platform: Win32, standard: 14 } |
| - { platform: Win32, standard: 20 } |
| - { platform: x64, toolset: v141, shared: -DBUILD_SHARED_LIBS=ON } |
| - { platform: x64, standard: 14, shared: -DBUILD_SHARED_LIBS=ON } |
| - { platform: x64, standard: 20, shared: -DBUILD_SHARED_LIBS=ON } |
| include: |
| - os: windows-2022 |
| platform: x64 |
| toolset: v143 |
| build_type: Debug |
| standard: 20 |
| |
| steps: |
| - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 |
| |
| - name: Set timezone |
| run: tzutil /s "Ekaterinburg Standard Time" |
| |
| - name: Create Build Environment |
| run: cmake -E make_directory ${{runner.workspace}}/build |
| |
| - name: Configure |
| # Use a bash shell for $GITHUB_WORKSPACE. |
| shell: bash |
| working-directory: ${{runner.workspace}}/build |
| run: | |
| cmake -A ${{matrix.platform}} -T ${{matrix.toolset}} \ |
| -DCMAKE_CXX_STANDARD=${{matrix.standard}} \ |
| ${{matrix.shared}} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ |
| $GITHUB_WORKSPACE |
| |
| - name: Build |
| working-directory: ${{runner.workspace}}/build |
| run: | |
| $threads = (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors |
| cmake --build . --config ${{matrix.build_type}} --parallel $threads |
| |
| - name: Test |
| working-directory: ${{runner.workspace}}/build |
| run: ctest -C ${{matrix.build_type}} -V |
| env: |
| CTEST_OUTPUT_ON_FAILURE: True |
| |
| mingw: |
| runs-on: windows-latest |
| defaults: |
| run: |
| shell: msys2 {0} |
| strategy: |
| matrix: |
| sys: [ mingw64, ucrt64 ] |
| steps: |
| - name: Set timezone |
| run: tzutil /s "Ekaterinburg Standard Time" |
| shell: cmd |
| - uses: msys2/setup-msys2@5df0ca6cbf14efcd08f8d5bd5e049a3cc8e07fd2 # v2.24.0 |
| with: |
| release: false |
| msystem: ${{matrix.sys}} |
| pacboy: cc:p cmake:p ninja:p lld:p |
| - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 |
| - name: Configure |
| run: cmake -B ../build -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Debug |
| env: { LDFLAGS: -fuse-ld=lld } |
| - name: Build |
| run: cmake --build ../build |
| - name: Test |
| run: ctest -j `nproc` --test-dir ../build |
| env: |
| CTEST_OUTPUT_ON_FAILURE: True |