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-11 - macos-12 - macos-13 build_type: - Release lib: - shared - static target: - host - ios steps: - uses: actions/checkout@v3 - 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 \ gflags \ glog \ google-benchmark \ metis \ ninja \ suite-sparse - name: Cache Build id: cache-build uses: actions/cache@v3 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' >> $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=/usr/local/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 - 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}} \ --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