# This workflow is for CMake-based build/test running on multiple platforms. name: cmake build on: [push, pull_request] jobs: build: name: ${{ matrix.os }} ${{ matrix.c_compiler }} thr:${{ matrix.enable_threads }} rwlock:${{ matrix.enable_rwlock }} redir:${{ matrix.redirect_malloc }} dll:${{ matrix.shared_libs }} cpp:${{ matrix.enable_cplusplus }} runs-on: ${{ matrix.os }} timeout-minutes: 6 strategy: # Deliver the feedback for all matrix combinations. fail-fast: false matrix: os: [ macos-latest, ubuntu-latest, windows-latest ] c_compiler: [ cl, clang, gcc ] cxx_compiler: [ cl, clang++, g++ ] enable_cplusplus: [ off, on ] build_type: [ Release ] disable_gc_debug: [ off ] gc_assertions: [ on ] large_config: [ on ] enable_threads: [ off, on ] enable_rwlock: [ off, on ] redirect_malloc: [ off, on ] shared_libs: [ off, on ] exclude: - os: macos-latest c_compiler: cl - os: macos-latest c_compiler: gcc - os: ubuntu-latest c_compiler: cl - enable_threads: off enable_rwlock: on - c_compiler: cl cxx_compiler: clang++ - c_compiler: cl cxx_compiler: g++ - c_compiler: clang cxx_compiler: cl - c_compiler: clang cxx_compiler: g++ - c_compiler: gcc cxx_compiler: cl - c_compiler: gcc cxx_compiler: clang++ - os: macos-latest enable_cplusplus: off - os: ubuntu-latest enable_cplusplus: off - os: windows-latest c_compiler: cl enable_cplusplus: off - os: windows-latest # TODO: replacement operator cannot be inline c_compiler: clang enable_cplusplus: on - os: windows-latest c_compiler: gcc enable_cplusplus: off - os: windows-latest # TODO: support dependency on libatomic_ops c_compiler: cl enable_threads: on include: - os: windows-latest c_compiler: gcc cmake_generator_opt: '-G "Unix Makefiles"' - os: windows-latest c_compiler: clang cmake_generator_opt: '-G "Unix Makefiles"' steps: - uses: actions/checkout@v4 - name: Set reusable strings # Turn repeated input strings into step outputs. id: strings shell: bash run: | echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" - name: Configure CMake # Configure CMake in a 'build' subdirectory. run: > cmake -B ${{ steps.strings.outputs.build-output-dir }} ${{ matrix.cmake_generator_opt }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.cxx_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -Dbuild_tests=ON -Ddisable_gc_debug=${{ matrix.disable_gc_debug }} -Denable_cplusplus=${{ matrix.enable_cplusplus }} -Denable_gc_assertions=${{ matrix.gc_assertions }} -Denable_large_config=${{ matrix.large_config }} -Denable_redirect_malloc=${{ matrix.redirect_malloc }} -Denable_rwlock=${{ matrix.enable_rwlock }} -Denable_threads=${{ matrix.enable_threads }} -Denable_werror=ON -Werror=dev -S ${{ github.workspace }} - name: Build # Build the code with the given configuration. run: > cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} --verbose --parallel - name: Test working-directory: ${{ steps.strings.outputs.build-output-dir }} # Execute tests defined by the CMake configuration. run: ctest --build-config ${{ matrix.build_type }} --verbose --parallel 8