| name: macOS | |
| on: [push, pull_request] | |
| jobs: | |
| build: | |
| name: ${{matrix.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.target}} | |
| runs-on: ${{matrix.os}} | |
| defaults: | |
| run: | |
| shell: bash -e -o pipefail {0} | |
| env: | |
| CCACHE_DIR: ${{github.workspace}}/ccache | |
| CMAKE_GENERATOR: Ninja | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| os: | |
| - macos-14 | |
| - macos-15 | |
| build_type: | |
| - Release | |
| lib: | |
| - shared | |
| - static | |
| target: | |
| - host | |
| - ios | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Setup Dependencies (iOS) | |
| if: matrix.target == 'ios' | |
| run: | | |
| brew install \ | |
| ccache \ | |
| eigen \ | |
| ninja | |
| - name: Setup Dependencies (Host) | |
| if: matrix.target == 'host' | |
| run: | | |
| brew install \ | |
| ccache \ | |
| eigen \ | |
| google-benchmark \ | |
| metis \ | |
| ninja \ | |
| suite-sparse | |
| - name: Cache Build | |
| id: cache-build | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{env.CCACHE_DIR}} | |
| key: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.target}}-${{github.run_id}} | |
| restore-keys: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.target}}- | |
| - name: Setup Environment | |
| if: matrix.build_type == 'Release' | |
| run: | | |
| echo 'CXXFLAGS=-flto=auto' >> $GITHUB_ENV | |
| - name: Configure (iOS) | |
| if: matrix.target == 'ios' | |
| run: | | |
| cmake -S . -B build_${{matrix.build_type}} \ | |
| -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \ | |
| -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=$(which ccache) \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=$(which ccache) \ | |
| -DCMAKE_TOOLCHAIN_FILE=${{github.workspace}}/cmake/iOS.cmake \ | |
| -DEigen3_DIR=$(brew --prefix)/share/eigen3/cmake \ | |
| -DIOS_PLATFORM=OS \ | |
| -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install | |
| - name: Configure (Host) | |
| if: matrix.target == 'host' | |
| run: | | |
| cmake -S . -B build_${{matrix.build_type}} \ | |
| -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \ | |
| -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=$(which ccache) \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=$(which ccache) \ | |
| -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install \ | |
| -DWITH_SUITESPARSE=ON | |
| - name: Build | |
| run: | | |
| cmake --build build_${{matrix.build_type}} \ | |
| --config ${{matrix.build_type}} | |
| - name: Test | |
| if: matrix.target == 'host' | |
| run: | | |
| ctest --test-dir build_${{matrix.build_type}} \ | |
| --build-config ${{matrix.build_type}} \ | |
| --output-on-failure \ | |
| -j$(sysctl -n hw.ncpu) | |
| - name: Install | |
| run: | | |
| cmake --build build_${{matrix.build_type}}/ \ | |
| --config ${{matrix.build_type}} \ | |
| --target install |