aboutsummaryrefslogblamecommitdiffstatshomepage
path: root/.github/workflows/boost_toolsets.yml
blob: 2a5dbf9c571dba02f955bc1af148ca277c4ee77f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                                                
             
                                               
                                                          
                                                                     


                               
                                                  

                                                  
                                             

                                                  

                                                  

                                                         

                                                              

                                                     

                                                              






                                                                                                                      
                                                       
                                                                    
                
                                     

                                                  







                                                                             


                                                                         
                                                      




                                                                                    
                                                                          

                                       
                                                                             




                                                                                       
                          
                                        






                                                    









                                 
                         
                              

                                                              
                                                  
 
                           
                                         





                                                


                                     



                                      
                                            
                                                                                      



                                        
                                            




                                                                     
                                            































































                                                                              
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 }}'