name: Boost (toolsets) on: push: pull_request: schedule: # Weekly, at 5:30 AM on Saturday (somewhat randomly chosen). - cron: '30 5 * * 6' workflow_dispatch: jobs: build: strategy: matrix: boost-version: [1.58.0, 1.68.0, 1.78.0] toolset: [auto, clang, clang-cl, gcc, mingw, msvc] os: [ubuntu-latest, windows-2016, windows-2019, windows-2022] include: # Prettier run names. - {os: windows-2022, name: Windows 2022} - {os: windows-2019, name: Windows 2019} - {os: windows-2016, name: Windows 2016} - {os: ubuntu-latest, name: Ubuntu} # Target platform. - {boost-version: 1.58.0, platform: x64} - {boost-version: 1.68.0, platform: x86} - {boost-version: 1.78.0, platform: x64} # Configuration. - {boost-version: 1.58.0, configuration: Debug} - {boost-version: 1.68.0, configuration: MinSizeRel} - {boost-version: 1.78.0, configuration: Release} # Some Boost libraries commonly used by me. - libraries: filesystem program_options regex system # On Windows, clang fails to build Boost.Test prior to version 1.61 # with the following error: # # .\boost/test/impl/execution_monitor.ipp:1134:20: error: cannot compile this 'this' captured by SEH yet # # This was fixed for 1.61 in this commit: # https://github.com/boostorg/test/commit/c94ef6982e2ebe77f9376579547c228f0d62e45f. # On Linux, everything should be fine though. #- libraries: filesystem program_options regex system test exclude: # Ubuntu: no MSVC/clang-cl. - {os: ubuntu-latest, toolset: msvc} - {os: ubuntu-latest, toolset: clang-cl} # Optimization: MinGW-w64 should be the same on different Windows # versions. Clang on the other hand relies on the Microsoft linker # (at least it did at some point), so it makes sense to test it # against different Visual Studio versions. - {os: windows-2016, toolset: gcc} - {os: windows-2019, toolset: gcc} - {os: windows-2016, toolset: mingw} - {os: windows-2019, toolset: mingw} # clang-cl is only supported by Boost.Build since 1.69 (see the # boost_clang_windows.yml workflow). - {toolset: clang-cl, boost-version: 1.58.0} - {toolset: clang-cl, boost-version: 1.68.0} runs-on: '${{ matrix.os }}' name: '${{ matrix.boost-version }} / ${{ matrix.toolset }} / ${{ matrix.name }}' # 1) VS 2022 isn't supported by older Boost versions. It just doesn't # work, the errors are numerous. # # 2) clang-cl on windows-2016 fails to build the latest Boost. The error # is # # LINK : fatal error LNK1171: unable to load mspdbcore.dll (error code: 193) # # No idea what's up with that. continue-on-error: ${{ (matrix.os == 'windows-2022' && (matrix.toolset == 'auto' || matrix.toolset == 'clang-cl' || matrix.toolset == 'msvc') && matrix.boost-version < '1.78.0') || (matrix.os == 'windows-2016' && matrix.toolset == 'clang-cl' && matrix.boost-version == '1.78.0') }} defaults: run: shell: pwsh steps: - name: Checkout uses: actions/checkout@v2 - name: Cache Boost uses: actions/cache@v2 with: path: '${{ runner.workspace }}/boost/boost_*.tar.gz' key: 'boost_${{ matrix.boost-version }}' - name: Clean up PATH uses: egor-tensin/cleanup-path@v2 if: runner.os == 'Windows' - name: Set common variables uses: ./.github/actions/common-variables with: toolset: '${{ matrix.toolset }}' - name: Set up Python uses: actions/setup-python@v2 - name: Install GCC uses: egor-tensin/setup-gcc@v1 with: platform: '${{ matrix.platform }}' if: env.CI_HOST_LINUX && (matrix.toolset == 'auto' || matrix.toolset == 'gcc') - name: Install Clang uses: egor-tensin/setup-clang@v1 with: platform: '${{ matrix.platform }}' if: matrix.toolset == 'clang' || matrix.toolset == 'clang-cl' - name: Install MinGW uses: egor-tensin/setup-mingw@v2 with: platform: '${{ matrix.platform }}' # toolset == 'clang' needs some kind of make, e.g. mingw32-make: if: env.CI_MINGW || (matrix.toolset == 'clang' && env.CI_HOST_WINDOWS) - name: Set up software environment uses: ./.github/actions/software-environment with: toolset: '${{ matrix.toolset }}' platform: '${{ matrix.platform }}' - name: Set up Visual Studio uses: egor-tensin/vs-shell@v2 with: arch: '${{ matrix.platform }}' if: matrix.toolset == 'clang-cl' && env.CI_HOST_WINDOWS - name: Download Boost uses: ./.github/actions/download-boost with: boost-version: '${{ matrix.boost-version }}' - name: Build Boost uses: ./.github/actions/build-boost with: toolset: '${{ matrix.toolset }}' libraries: '${{ matrix.libraries }}' platform: '${{ matrix.platform }}' configuration: '${{ matrix.configuration }}' continue-on-error: true - name: Check that Boost was bootstrapped uses: ./.github/actions/check-boost-bootstrapped - name: Check that Boost libraries were built uses: ./.github/actions/check-boost-libraries with: libraries: '${{ matrix.libraries }}' platform: '${{ matrix.platform }}' configuration: '${{ matrix.configuration }}' - name: Build examples/boost id: build_example uses: ./.github/actions/build-example with: src-dir: examples/boost boost-dir: '${{ env.BOOST_DIR }}' toolset: '${{ matrix.toolset }}' platform: '${{ matrix.platform }}' configuration: '${{ matrix.configuration }}' - name: Verify runtime library linkage uses: ./.github/actions/check-runtime-library with: path: '${{ steps.build_example.outputs.install-dir }}' - name: Verify architecture uses: ./.github/actions/check-arch with: path: '${{ steps.build_example.outputs.install-dir }}' expected: '${{ matrix.platform }}' - name: Run examples/boost uses: ./.github/actions/run-example-boost with: path: '${{ steps.build_example.outputs.install-dir }}'