name: Boost (toolsets) on: workflow_call: workflow_dispatch: permissions: {} jobs: build: strategy: matrix: boost-version: - 1.72.0 - 1.82.0 - 1.91.0 toolset: - auto - clang - clang-cl - gcc - mingw - msvc os: - ubuntu-latest - windows-2022 - windows-2025 include: # Prettier run names. - {os: windows-2022, name: Windows 2022} - {os: windows-2025, name: Windows 2025} - {os: ubuntu-latest, name: Ubuntu} # Target platform. - {boost-version: 1.72.0, platform: x86} - {boost-version: 1.82.0, platform: x64} - {boost-version: 1.91.0, platform: x86} # Configuration. - {boost-version: 1.72.0, configuration: Debug} - {boost-version: 1.82.0, configuration: Release} - {boost-version: 1.91.0, configuration: RelWithDebInfo} # Some Boost libraries commonly used by me. - libraries: filesystem program_options regex 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-2022, toolset: gcc} - {os: windows-2022, toolset: mingw} # Boost only supports VS 2026 starting with 1.91, I think. - {os: windows-2025, boost-version: 1.72.0} - {os: windows-2025, boost-version: 1.82.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. continue-on-error: ${{ ( (matrix.os == 'windows-2022' || matrix.os == 'windows-2025') && (matrix.toolset == 'auto' || matrix.toolset == 'clang-cl' || matrix.toolset == 'msvc') && matrix.boost-version < '1.82.0' ) }} steps: - name: Checkout uses: actions/checkout@v7 with: persist-credentials: false - name: Cache Boost uses: actions/cache@v6 with: path: '${{ runner.workspace }}/boost/boost_*.tar.gz' key: 'boost_${{ matrix.boost-version }}' - name: Clean up PATH uses: egor-tensin/cleanup-path@v5 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@v7 with: python-version: '3.x' - name: Install GCC uses: egor-tensin/setup-gcc@v2 with: platform: ${{ matrix.platform }} if: env.CI_HOST_LINUX && (matrix.toolset == 'auto' || matrix.toolset == 'gcc') - name: Install Clang uses: egor-tensin/setup-clang@v2 with: platform: ${{ matrix.platform }} if: matrix.toolset == 'clang' || matrix.toolset == 'clang-cl' - name: Install MinGW uses: egor-tensin/setup-mingw@v3 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: test/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 }}