# This basically tests two things. # # * If, instead of some kind of MinGW-born ar & ranlib, you only have # upstream LLVM distribution on Windows, you wouldn't be able to use # toolset=clang until 1.66.0. # * toolset=clang-win is broken until 1.69.0. name: Boost & Clang on Windows 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: toolset: [clang, clang-cl] boost-version: [1.63.0, 1.64.0, 1.65.1, 1.66.0, 1.67.0, 1.68.0, 1.69.0, 1.70.0, 1.71.0, 1.74.0] include: - {toolset: clang, b2_toolset: clang} - {toolset: clang-cl, b2_toolset: clang-win} runs-on: windows-2019 name: '${{ matrix.toolset }} / ${{ matrix.boost-version }}' steps: - name: Checkout uses: actions/checkout@v3 - name: Cache Boost uses: actions/cache@v3 with: path: '${{ runner.workspace }}/boost/boost_*.tar.gz' key: 'boost_${{ matrix.boost-version }}' - name: Clean up PATH uses: egor-tensin/cleanup-path@v3 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@v4 with: python-version: '3.x' - name: Install Clang uses: egor-tensin/setup-clang@v1 - name: Set up software environment uses: ./.github/actions/software-environment with: toolset: '${{ matrix.toolset }}' - name: Download Boost uses: ./.github/actions/download-boost with: boost-version: '${{ matrix.boost-version }}' - name: Bootstrap Boost run: | cd $env:BOOST_DIR .\bootstrap.bat continue-on-error: true - name: Check that Boost was bootstrapped uses: ./.github/actions/check-boost-bootstrapped - name: Write toolset-config.jam (clang) run: | echo 'using ${{ matrix.b2_toolset }} : : clang++.exe : llvm-ar llvm-ranlib ;' > "$env:BOOST_DIR\toolset-config.jam" if: matrix.toolset == 'clang' - name: Write toolset-config.jam (clang-cl) run: | echo 'using ${{ matrix.b2_toolset }} ;' > "$env:BOOST_DIR\toolset-config.jam" if: matrix.toolset == 'clang-cl' - name: Build Boost.Filesystem run: | cd $env:BOOST_DIR $stagedir = "stage" $librarydir = "$env:BOOST_DIR\$stagedir\lib" echo "BOOST_LIBRARYDIR=$librarydir" >> $env:GITHUB_ENV .\b2.exe ` "--stagedir=$stagedir" ` --layout=system ` --dump-configuration ` address-model=64 ` "--user-config=$env:BOOST_DIR\toolset-config.jam" ` variant=debug ` link=static ` runtime-link=static ` -d2 --dump-configuration ` --with-filesystem ` --with-system continue-on-error: true - name: Boost.Filesystem failed to build run: $(Test-Path "$env:BOOST_LIBRARYDIR\libboost_filesystem.lib" -Type Leaf) -and $(throw "libboost_filesystem.lib was build?!") if: | (matrix.toolset == 'clang' && matrix.boost-version < '1.66.0') || (matrix.toolset == 'clang-cl' && matrix.boost-version < '1.69.0') - id: boost_filesystem_built name: Boost.Filesystem was built run: $(Test-Path "$env:BOOST_LIBRARYDIR\libboost_filesystem.lib" -Type Leaf) -or $(throw "libboost_filesystem.lib wasn't found") if: | !((matrix.toolset == 'clang' && matrix.boost-version < '1.66.0') || (matrix.toolset == 'clang-cl' && matrix.boost-version < '1.69.0')) # Check that we can link to the built libraries. - name: Build foo.exe using clang run: | clang++.exe ` "-I$env:BOOST_DIR" ` -D BOOST_ALL_NO_LIB=1 ` "-L$env:BOOST_LIBRARYDIR" ` -llibboost_filesystem ` -llibboost_system ` -o foo.exe ` examples/boost/foo.cpp if: steps.boost_filesystem_built.conclusion == 'success' && matrix.toolset == 'clang' - name: Build foo.exe using clang-cl run: | clang-cl.exe ` /EHsc ` /MTd ` "/I$env:BOOST_DIR" ` /D BOOST_ALL_NO_LIB=1 ` "/Fefoo.exe" ` examples/boost/foo.cpp ` libboost_filesystem.lib ` libboost_system.lib ` /link "/LIBPATH:$env:BOOST_LIBRARYDIR" if: steps.boost_filesystem_built.conclusion == 'success' && matrix.toolset == 'clang-cl' - name: foo.exe run: .\foo.exe if: steps.boost_filesystem_built.conclusion == 'success'