-
Notifications
You must be signed in to change notification settings - Fork 8
138 lines (119 loc) · 4.93 KB
/
build-macos.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: Build and test on macos
on:
push:
branches:
- master
- "release/v[0-9].[0-9].[0-9]"
pull_request:
types:
- opened # triggers build when opened
- synchronize # triggers build when commits are pushed to HEAD
branches:
- master
- "release/v[0-9].[0-9].[0-9]"
- "feature/**"
# Manual trigger
workflow_dispatch:
jobs:
build:
# Build strategy
strategy:
fail-fast: false
matrix:
platform:
# - ubuntu-latest
- macos-latest
- macos-13-xlarge
build_type:
- 'Release'
#- 'Debug'
#- 'DebugWithRelInfo '
# Build platform
runs-on: ${{ matrix.platform }}
name: ${{ matrix.platform }}-${{ matrix.build_type }}
# The default compiler on macos is clang, switch to gcc 11. Specifying the version is necessary.
# It seems like gcc and g++ are symbolic links to the default clang and clang++ compilers, respectively.
# CMAKE_CXX_COMPILER_ID will evaluate to AppleClang rather than GNU on macos.
env:
CC: gcc-11
CXX: g++-11
# Build steps
steps:
# Step: Checkout
- name: Checkout
uses: actions/checkout@v4
# Workaround for getting "git describe --tags" to work in cmake/get_version_from_git.cmake (Build step)
with:
fetch-depth: 0
# Step: Set paths
- name: Set paths
id: paths
run : |
echo "build_dir=${{ github.workspace }}/build" >> $GITHUB_OUTPUT
echo "ext_deps_dir=${{ github.workspace }}/external_dependencies" >> $GITHUB_OUTPUT
echo "install_dir=${{ github.workspace }}/install" >> $GITHUB_OUTPUT
- name: Install system-provided dependencies
run: |
if [ "${{ runner.os }}" == "macOS" ]; then
brew install boost doxygen netcdf
elif [ "${{ runner.os }}" == "Linux" ]; then
sudo apt-get install libboost-all-dev doxygen
fi
# Step: Restore cached user-provided dependencies
- if: runner.os != 'macOS'
name: Restore cached user-provided dependencies
uses: actions/cache/restore@v3
id: restore-cached-external-dependencies
with:
key: ${{ runner.os }}-cache-key
restore-keys: ${{ runner.os }}-cache-key
path: ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install/netcdf-c
# Step: Build and install user-provided dependencies, executes only if no cache restored
- name: Build and install user-provided dependencies
if: runner.os != 'macOS' && steps.restore-cached-external-dependencies.outputs.cache-hit != 'true'
# NetCDF Dependencies m4, curl, and openssl are provided by the build machine
run: >
pwsh ${{ github.workspace }}/scripts/install_netcdf_static.ps1
-WorkDir ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/work
-InstallDir ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install
-BuildType '${{ matrix.build_type }}'
-ParallelJobs 10
# Step: Cache user-provided dependencies, executes only if no cache restored
- name: Cache user-provided dependencies
uses: actions/cache/save@v3
if: runner.os != 'macOS' && steps.restore-cached-external-dependencies.outputs.cache-hit != 'true'
with:
key: ${{ runner.os }}-cache-key
path: ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install/netcdf-c
# Step: CMake configuration
- name: Configure
run: >
cmake
-S ${{ github.workspace }}
-B ${{ steps.paths.outputs.build_dir }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DCMAKE_PREFIX_PATH=${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install/netcdf-c
-DCMAKE_INSTALL_PREFIX=${{ steps.paths.outputs.install_dir }}
# Step: CMake build
- name: Build
run: cmake --build ${{ steps.paths.outputs.build_dir }} --config ${{ matrix.build_type }} -j
# Step: Test
# Works if runner.os == 'Linux' or runner.os == 'macOS'
# if runner.os == 'Windows', /matrix.build_type needs to be inserted before /tests
- name: Test
run: |
echo -e "\n*************** MeshKernel Tests ***************\n"
${{ steps.paths.outputs.build_dir }}/libs/MeshKernel/tests/MeshKernelUnitTests
echo -e "\n\n*************** MeshKernel API Tests ***************\n"
${{ steps.paths.outputs.build_dir }}/libs/MeshKernelApi/tests/MeshKernelApiUnitTests
# Step: CMake install
- name: Install
run: cmake --install ${{ steps.paths.outputs.build_dir }}
# Step: Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: meshkernel-${{ matrix.platform }}-${{ matrix.build_type }}
path: ${{ steps.paths.outputs.install_dir }}
if-no-files-found: error