cmake-multi-platform.yml (4794B)
1 # This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform. 2 # See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml 3 name: CMake on multiple platforms 4 5 on: 6 push: 7 branches: [ "main" ] 8 pull_request: 9 branches: [ "main" ] 10 11 jobs: 12 build: 13 runs-on: ${{ matrix.os }} 14 15 strategy: 16 # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. 17 fail-fast: false 18 19 # Set up a matrix to run the following 3 configurations: 20 # 1. <Windows, Release, latest MSVC compiler toolchain on the default runner image, default generator> 21 # 2. <Linux, Release, latest GCC compiler toolchain on the default runner image, default generator> 22 # 3. <Linux, Release, latest Clang compiler toolchain on the default runner image, default generator> 23 # 24 # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. 25 matrix: 26 os: [ ubuntu-latest, windows-latest ] 27 build_type: [ Release ] 28 c_compiler: [ gcc, clang, cl ] 29 include: 30 - os: windows-latest 31 c_compiler: cl 32 cpp_compiler: cl 33 - os: ubuntu-latest 34 c_compiler: gcc 35 cpp_compiler: g++ 36 - os: ubuntu-latest 37 c_compiler: clang 38 cpp_compiler: clang++ 39 exclude: 40 - os: windows-latest 41 c_compiler: gcc 42 - os: windows-latest 43 c_compiler: clang 44 - os: ubuntu-latest 45 c_compiler: cl 46 47 steps: 48 - uses: actions/checkout@v4 49 50 - name: Set reusable strings 51 # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. 52 id: strings 53 shell: bash 54 run: | 55 echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" 56 57 # Install dependencies if linux 58 - name: Install dependencies 59 if: startsWith(matrix.os, 'ubuntu') 60 run: sudo apt-get -y install cmake libcurl4-openssl-dev libspdlog-dev libjsoncpp-dev 61 62 # Setup vcpkg if windows 63 - name: Setup vcpkg 64 if: startsWith(matrix.os, 'windows') 65 uses: friendlyanon/setup-vcpkg@v1 66 67 - name: Configure CMake 68 # Only run this step if we are not on windows as windows will use the vcpkg toolchain file. So this only runs on macos or linux. 69 if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos') 70 71 # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. 72 # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type 73 run: > 74 cmake -B ${{ steps.strings.outputs.build-output-dir }} 75 -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} 76 -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} 77 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} 78 -S ${{ github.workspace }} 79 80 - name: Configure CMake 81 # Only run this step if we are not on windows as windows will use the vcpkg toolchain file. So this only runs on macos or linux. 82 if: startsWith(matrix.os, 'windows') 83 84 # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. 85 # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type 86 run: | 87 vcpkg install curl spdlog jsoncpp 88 cmake -B ${{ steps.strings.outputs.build-output-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -D "CMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -S ${{ github.workspace }} 89 90 - name: Build 91 # Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). 92 run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} 93 94 - name: Test 95 working-directory: ${{ steps.strings.outputs.build-output-dir }} 96 # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). 97 # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail 98 run: ctest --build-config ${{ matrix.build_type }}