blob: bca7a1ca6d311b279bf069838dc8ac8f92210c9d [file] [log] [blame]
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-12
- macos-13
- macos-14
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 \
gflags \
glog \
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' >> $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
- 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