name: build-and-test on: push: {} pull_request: {} jobs: # TODO: add 32-bit builds (g++ and clang++) for ubuntu # (requires g++-multilib and libc6:i386) # TODO: add coverage build (requires lcov) # TODO: add clang + libc++ builds for ubuntu job: name: ${{ matrix.os }}.${{ matrix.build_type }}.${{ matrix.lib }}.${{ matrix.compiler }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, ubuntu-20.04, macos-latest] build_type: ['Release', 'Debug'] compiler: [g++, clang++] lib: ['shared', 'static'] steps: - uses: actions/checkout@v2 - name: create build environment run: cmake -E make_directory ${{ runner.workspace }}/_build - name: setup cmake initial cache run: touch compiler-cache.cmake - name: setup lto # Workaround for enabling -flto on old GCC versions if: matrix.build_type == 'Release' && startsWith(matrix.compiler, 'g++') && matrix.os != 'macos-latest' run: > echo 'set (CMAKE_CXX_FLAGS -flto CACHE STRING "")' >> compiler-cache.cmake; echo 'set (CMAKE_RANLIB /usr/bin/gcc-ranlib CACHE FILEPATH "")' >> compiler-cache.cmake; echo 'set (CMAKE_AR /usr/bin/gcc-ar CACHE FILEPATH "")' >> compiler-cache.cmake; echo 'set (CMAKE_NM /usr/bin/gcc-nm CACHE FILEPATH "")' >> compiler-cache.cmake; - name: configure cmake env: CXX: ${{ matrix.compiler }} shell: bash working-directory: ${{ runner.workspace }}/_build run: > cmake -C ${{ github.workspace }}/compiler-cache.cmake $GITHUB_WORKSPACE -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON -DBUILD_SHARED_LIBS=${{ matrix.lib == 'shared' }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_VISIBILITY_INLINES_HIDDEN=ON - name: build shell: bash working-directory: ${{ runner.workspace }}/_build run: cmake --build . --config ${{ matrix.build_type }} - name: test shell: bash working-directory: ${{ runner.workspace }}/_build run: ctest -C ${{ matrix.build_type }} -VV msvc: name: ${{ matrix.os }}.${{ matrix.build_type }}.${{ matrix.lib }}.${{ matrix.msvc }} runs-on: ${{ matrix.os }} defaults: run: shell: powershell strategy: fail-fast: false matrix: msvc: - VS-16-2019 - VS-17-2022 arch: - x64 build_type: - Debug - Release lib: - shared - static include: - msvc: VS-16-2019 os: windows-2019 generator: 'Visual Studio 16 2019' - msvc: VS-17-2022 os: windows-2022 generator: 'Visual Studio 17 2022' steps: - uses: actions/checkout@v2 - name: configure cmake run: > cmake -S . -B _build/ -A ${{ matrix.arch }} -G "${{ matrix.generator }}" -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON -DBUILD_SHARED_LIBS=${{ matrix.lib == 'shared' }} - name: build run: cmake --build _build/ --config ${{ matrix.build_type }} - name: setup test environment # Make sure gmock and benchmark DLLs can be found run: > echo "$((Get-Item .).FullName)/_build/bin/${{ matrix.build_type }}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append; echo "$((Get-Item .).FullName)/_build/src/${{ matrix.build_type }}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append; - name: test run: ctest --test-dir _build/ -C ${{ matrix.build_type }} -VV ubuntu-16_04: name: ubuntu-16.04.${{ matrix.build_type }}.${{ matrix.compiler }} runs-on: [ubuntu-latest] strategy: fail-fast: false matrix: build_type: ['Release', 'Debug'] compiler: [g++, clang++] container: ubuntu:16.04 steps: - uses: actions/checkout@v2 - name: install required bits run: | apt update apt -y install clang cmake g++ git - name: create build environment run: cmake -E make_directory $GITHUB_WORKSPACE/_build - name: setup cmake initial cache run: touch compiler-cache.cmake - name: setup lto # Workaround for enabling -flto on old GCC versions # -Wl,--no-as-needed is needed to avoid the following linker error: # # /usr/lib/gcc/x86_64-linux-gnu/5/libstdc++.so: undefined reference to `pthread_create' # if: matrix.build_type == 'Release' && startsWith(matrix.compiler, 'g++') run: > echo 'set (CMAKE_CXX_FLAGS "-Wl,--no-as-needed -flto" CACHE STRING "")' >> compiler-cache.cmake; echo 'set (CMAKE_RANLIB "/usr/bin/gcc-ranlib" CACHE FILEPATH "")' >> compiler-cache.cmake; echo 'set (CMAKE_AR "/usr/bin/gcc-ar" CACHE FILEPATH "")' >> compiler-cache.cmake; echo 'set (CMAKE_NM "/usr/bin/gcc-nm" CACHE FILEPATH "")' >> compiler-cache.cmake; - name: configure cmake env: CXX: ${{ matrix.compiler }} shell: bash working-directory: ${{ github.workspace }}/_build run: > cmake -C ../compiler-cache.cmake .. -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON -DBUILD_SHARED_LIBS=${{ matrix.lib == 'shared' }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_VISIBILITY_INLINES_HIDDEN=ON - name: build shell: bash working-directory: ${{ github.workspace }}/_build run: cmake --build . --config ${{ matrix.build_type }} - name: test shell: bash working-directory: ${{ github.workspace }}/_build run: ctest -C ${{ matrix.build_type }} -VV ubuntu-14_04: name: ubuntu-14.04.${{ matrix.build_type }}.${{ matrix.compiler }} runs-on: [ubuntu-latest] strategy: fail-fast: false matrix: build_type: ['Release', 'Debug'] compiler: [g++-4.8, clang++-3.6] include: - compiler: g++-6 build_type: 'Debug' run_tests: true - compiler: g++-6 build_type: 'Release' run_tests: true container: ubuntu:14.04 steps: - uses: actions/checkout@v2 - name: install required bits run: | sudo apt update sudo apt -y install clang-3.6 cmake3 g++-4.8 git - name: install other bits if: ${{ matrix.compiler }} == g++-6 run: | sudo apt -y install software-properties-common sudo add-apt-repository -y "ppa:ubuntu-toolchain-r/test" sudo apt update sudo apt -y install g++-6 - name: create build environment run: cmake -E make_directory $GITHUB_WORKSPACE/_build - name: setup cmake initial cache run: touch compiler-cache.cmake - name: setup lto # Workaround for enabling -flto on old GCC versions # -Wl,--no-as-needed is needed to avoid the following linker error: # # /usr/lib/gcc/x86_64-linux-gnu/6/libstdc++.so: undefined reference to `pthread_create' # if: matrix.build_type == 'Release' && startsWith(matrix.compiler, 'g++') run: > COMPILER=${{ matrix.compiler }}; VERSION=${COMPILER#g++-}; PREFIX=/usr/bin/gcc; echo "set (CMAKE_CXX_FLAGS \"-Wl,--no-as-needed -flto\" CACHE STRING \"\")" >> compiler-cache.cmake; echo "set (CMAKE_RANLIB \"$PREFIX-ranlib-$VERSION\" CACHE FILEPATH \"\")" >> compiler-cache.cmake; echo "set (CMAKE_AR \"$PREFIX-ar-$VERSION\" CACHE FILEPATH \"\")" >> compiler-cache.cmake; echo "set (CMAKE_NM \"$PREFIX-nm-$VERSION\" CACHE FILEPAT \"\")" >> compiler-cache.cmake; - name: configure cmake env: CXX: ${{ matrix.compiler }} shell: bash working-directory: ${{ github.workspace }}/_build run: > cmake -C ../compiler-cache.cmake .. -DBENCHMARK_DOWNLOAD_DEPENDENCIES=${{ matrix.run_tests }} -DBENCHMARK_ENABLE_TESTING=${{ matrix.run_tests }} -DBUILD_SHARED_LIBS=${{ matrix.lib == 'shared' }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_VISIBILITY_INLINES_HIDDEN=ON - name: build shell: bash working-directory: ${{ github.workspace }}/_build run: cmake --build . --config ${{ matrix.build_type }} - name: test if: ${{ matrix.run_tests }} shell: bash working-directory: ${{ github.workspace }}/_build run: ctest -C ${{ matrix.build_type }} -VV