-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.yml
More file actions
268 lines (259 loc) · 12.2 KB
/
action.yml
File metadata and controls
268 lines (259 loc) · 12.2 KB
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
name: 'setup-ci'
description: 'Sets up a toolchain on CI for building spatial-model-editor'
inputs:
sme_deps:
description: 'Set to a version or latest to download sme_deps'
required: false
default: 'skip'
sme_deps_common:
description: 'Set to a version or latest to download sme_deps_common'
required: false
default: 'skip'
sme_deps_qt:
description: 'Set to a version or latest to download sme_deps_qt'
required: false
default: 'skip'
sme_deps_llvm:
description: 'Set to a version or latest to download sme_deps_llvm'
required: false
default: 'skip'
cache_id:
description: 'A unique id for the cache - only needed if multiple jobs have the same name'
required: false
default: ''
extra-deps:
description: 'Optional extra platform-native packages to install'
required: false
default: ''
build_tag:
description: 'An optional build tag that gets appended to the downloaded libs file, e.g. _tsan'
required: false
default: ''
runs:
using: "composite"
steps:
# GLOBAL ENV VARS
- id: global-env
shell: bash
env:
CCACHE_VERSION: '4.12.1'
PYTHON_VERSION: '3.12'
MSVC_TOOLSET: '14.44'
run: |
echo "CCACHE_VERSION=${CCACHE_VERSION}" >> $GITHUB_ENV
echo "PYTHON_VERSION=${PYTHON_VERSION}" >> $GITHUB_ENV
echo "MSVC_TOOLSET=${MSVC_TOOLSET}" >> $GITHUB_ENV
echo "python_version=${PYTHON_VERSION}" >> $GITHUB_OUTPUT
echo "msvc_toolset=${MSVC_TOOLSET}" >> $GITHUB_OUTPUT
# LINUX X86_64-specific
- if: (runner.os == 'Linux') && (runner.arch == 'X64')
shell: bash
run: |
# set X64 environment variables
echo "TARGET_TRIPLE=x86_64-unknown-linux-gnu" >> $GITHUB_ENV
echo "HOST_TRIPLE=x86_64-unknown-linux-gnu" >> $GITHUB_ENV
echo "OS=linux" >> $GITHUB_ENV
echo "CCACHE_ARCH=x86_64" >> $GITHUB_ENV
# LINUX ARM64-specific
- if: (runner.os == 'Linux') && (runner.arch == 'ARM64')
shell: bash
run: |
# set ARM64 environment variables
echo "TARGET_TRIPLE=aarch64-unknown-linux-gnu" >> $GITHUB_ENV
echo "HOST_TRIPLE=aarch64-unknown-linux-gnu" >> $GITHUB_ENV
echo "OS=linux-arm64" >> $GITHUB_ENV
echo "CCACHE_ARCH=aarch64" >> $GITHUB_ENV
# LINUX
- if: runner.os == 'Linux'
shell: bash
env:
CLANG_VERSION: '19'
run: |
# set environment variables
echo "INSTALL_PREFIX=/opt/smelibs" >> $GITHUB_ENV
echo "SUDO_CMD=sudo" >> $GITHUB_ENV
echo "PYTHON_EXE=python" >> $GITHUB_ENV
echo "CC=clang" >> $GITHUB_ENV
echo "CXX=clang++" >> $GITHUB_ENV
# install ccache
wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-${CCACHE_ARCH}.tar.xz
tar -xf ccache-${CCACHE_VERSION}-linux-${CCACHE_ARCH}.tar.xz
sudo cp ccache-${CCACHE_VERSION}-linux-${CCACHE_ARCH}/ccache /usr/bin/ccache
rm -rf ccache-${CCACHE_VERSION}-linux-${CCACHE_ARCH}
rm -f ccache-${CCACHE_VERSION}-linux-${CCACHE_ARCH}.tar.xz
# add llvm repo for clang
sudo wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-${CLANG_VERSION} main"
sudo apt update -yy
# install clang, ninja, qt build deps, and any extra dependencies
sudo apt install -yy clang-${CLANG_VERSION} llvm-${CLANG_VERSION} lld-${CLANG_VERSION} libclang-rt-${CLANG_VERSION}-dev libclang-dev ninja-build xvfb jwm lcov libglu1-mesa-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxkbcommon-dev libxkbcommon-x11-dev '^libxcb.*-dev' ${{ inputs.extra-deps }}
# install a recent version of cmake
pip install cmake
cmake --version
# set default clang version
sudo update-alternatives --remove-all clang || echo "nothing to remove"
sudo update-alternatives --remove-all clang++ || echo "nothing to remove"
sudo update-alternatives --remove-all llvm-cov || echo "nothing to remove"
sudo update-alternatives --remove-all llvm-objcopy || echo "nothing to remove"
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${CLANG_VERSION} 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${CLANG_VERSION} 100
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${CLANG_VERSION} 100
sudo update-alternatives --install /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-${CLANG_VERSION} 100
clang++ --version
# disable system blas/lapack if present
sudo rm -rf /usr/lib/*-linux-gnu/libblas*
sudo rm -rf /usr/lib/*-linux-gnu/liblapack*
- if: always() && runner.os == 'Linux'
uses: actions/cache@v5
with:
path: '~/.cache/ccache'
key: ccache-${{ github.job }}-${{ inputs.cache_id }}-${{ runner.os }}-${{ runner.arch }}-${{ github.sha }}
restore-keys: ccache-${{ github.job }}-${{ inputs.cache_id }}-${{ runner.os }}-${{ runner.arch }}-
# MACOS ARM64
- if: (runner.os == 'macOS') && (runner.arch == 'ARM64')
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.1'
- if: (runner.os == 'macOS') && (runner.arch != 'ARM64')
shell: bash
run: |
echo "Unsupported runner: Intel macOS is no longer supported" >&2
exit 1
- if: (runner.os == 'macOS') && (runner.arch == 'ARM64')
shell: bash
run: |
# set ARM64 environment variables
echo "TARGET_TRIPLE=aarch64-apple-darwin20.1.0" >> $GITHUB_ENV
echo "HOST_TRIPLE=aarch64-apple-darwin20.1.0" >> $GITHUB_ENV
echo "OS=osx-arm64" >> $GITHUB_ENV
echo "INSTALL_PREFIX=/opt/smelibs" >> $GITHUB_ENV
echo "SUDO_CMD=sudo" >> $GITHUB_ENV
echo "PYTHON_EXE=python" >> $GITHUB_ENV
echo "MACOSX_DEPLOYMENT_TARGET=13" >> $GITHUB_ENV
# install required tools and any extra dependencies
LOCAL_BIN="${HOME}/.local/smebin"
mkdir -p ${LOCAL_BIN}
brew install bison flex ${{ inputs.extra-deps }}
echo "${LOCAL_BIN}:/opt/homebrew/opt/flex/bin:/opt/homebrew/opt/bison/bin:$PATH" > $GITHUB_PATH
# install ccache
wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-darwin.tar.gz
tar -xf ccache-${CCACHE_VERSION}-darwin.tar.gz
cp ccache-${CCACHE_VERSION}-darwin/ccache ${LOCAL_BIN}/ccache
rm -rf ccache-${CCACHE_VERSION}-darwin
rm -f ccache-${CCACHE_VERSION}-darwin.tar.gz
- if: always() && (runner.os == 'macOS') && (runner.arch == 'ARM64')
uses: actions/cache@v5
with:
path: '/Users/runner/Library/Caches/ccache'
key: ccache-${{ github.job }}-${{ inputs.cache_id }}-${{ runner.os }}-${{ runner.arch }}-${{ github.sha }}
restore-keys: ccache-${{ github.job }}-${{ inputs.cache_id }}-${{ runner.os }}-${{ runner.arch }}-
# WINDOWS X86_64-specific
- if: runner.os == 'Windows' && (runner.arch == 'X64')
shell: pwsh
run: |
# set environment variables
Add-Content -Path $env:GITHUB_ENV -Value "INSTALL_PREFIX=c:\smelibs"
Add-Content -Path $env:GITHUB_ENV -Value "SUDO_CMD="
Add-Content -Path $env:GITHUB_ENV -Value "TARGET_TRIPLE=x86_64-pc-windows-msvc"
Add-Content -Path $env:GITHUB_ENV -Value "HOST_TRIPLE=x86_64-pc-windows-msvc"
Add-Content -Path $env:GITHUB_ENV -Value "PYTHON_EXE=python"
Add-Content -Path $env:GITHUB_ENV -Value "OS=win64"
Add-Content -Path $env:GITHUB_ENV -Value "CC=cl"
Add-Content -Path $env:GITHUB_ENV -Value "CXX=cl"
Add-Content -Path $env:GITHUB_ENV -Value "CMAKE_CXX_FLAGS=/permissive- /Zc:__cplusplus /Zc:preprocessor /bigobj /EHsc /external:anglebrackets"
Add-Content -Path $env:GITHUB_ENV -Value "CCACHE_ARCH=x86_64"
- if: runner.os == 'Windows' && (runner.arch == 'X64')
uses: TheMrMilchmann/setup-msvc-dev@v4
with:
arch: amd64
toolset: ${{ steps.global-env.outputs.msvc_toolset }}
# WINDOWS ARM64-specific
- if: runner.os == 'Windows' && (runner.arch == 'ARM64')
shell: pwsh
run: |
# set environment variables
Add-Content -Path $env:GITHUB_ENV -Value "INSTALL_PREFIX=c:\smelibs"
Add-Content -Path $env:GITHUB_ENV -Value "SUDO_CMD="
Add-Content -Path $env:GITHUB_ENV -Value "TARGET_TRIPLE=aarch64-pc-windows-msvc"
Add-Content -Path $env:GITHUB_ENV -Value "HOST_TRIPLE=aarch64-pc-windows-msvc"
Add-Content -Path $env:GITHUB_ENV -Value "PYTHON_EXE=python"
Add-Content -Path $env:GITHUB_ENV -Value "OS=win64-arm64"
Add-Content -Path $env:GITHUB_ENV -Value "CC=cl"
Add-Content -Path $env:GITHUB_ENV -Value "CXX=cl"
Add-Content -Path $env:GITHUB_ENV -Value "CMAKE_CXX_FLAGS=/permissive- /Zc:__cplusplus /Zc:preprocessor /bigobj /EHsc /external:anglebrackets"
Add-Content -Path $env:GITHUB_ENV -Value "CCACHE_ARCH=aarch64"
- if: runner.os == 'Windows' && (runner.arch == 'ARM64')
uses: TheMrMilchmann/setup-msvc-dev@v4
with:
arch: arm64
toolset: ${{ steps.global-env.outputs.msvc_toolset }}
- if: runner.os == 'Windows'
uses: actions/setup-python@v6
with:
python-version: ${{ steps.global-env.outputs.python_version }}
- if: runner.os == 'Windows'
shell: pwsh
run: |
python -m pip install --upgrade pip
python -m pip install cmake ninja
choco install --no-progress -y winflexbison3 ${{ inputs.extra-deps }}
git lfs install
cmake --version
ninja --version
# WINDOWS
- if: runner.os == 'Windows'
shell: pwsh
run: |
# install ccache
$localBin = Join-Path $env:USERPROFILE ".local\smebin"
New-Item -ItemType Directory -Force -Path $localBin | Out-Null
$ccacheDir = "ccache-$env:CCACHE_VERSION-windows-$env:CCACHE_ARCH"
$ccacheZip = "$ccacheDir.zip"
Invoke-WebRequest "https://github.com/ccache/ccache/releases/download/v$env:CCACHE_VERSION/$ccacheZip" -OutFile $ccacheZip
Expand-Archive $ccacheZip -DestinationPath .
Copy-Item (Join-Path $ccacheDir "ccache.exe") $localBin
Add-Content -Path $env:GITHUB_PATH -Value $localBin
Remove-Item $ccacheDir -Recurse -Force
Remove-Item $ccacheZip -Force
- if: always() && runner.os == 'Windows'
uses: actions/cache@v5
with:
path: 'C:\Users\runneradmin\AppData\Local\ccache'
key: ccache-${{ github.job }}-${{ inputs.cache_id }}-${{ runner.os }}-${{ runner.arch }}-${{ github.sha }}
restore-keys: ccache-${{ github.job }}-${{ inputs.cache_id }}-${{ runner.os }}-${{ runner.arch }}-
- if: runner.os == 'Windows'
name: Install Mesa 3D to get OpenGL support on Windows without a GPU
uses: ssciwr/setup-mesa-dist-win@v3
with:
version: "26.0.3"
# SET CCACHE MAX SIZE
- if: runner.os != 'Windows'
shell: bash
run: |
ccache --version
ccache --max-size 400M
ccache --cleanup
ccache --zero-stats
ccache --show-stats
- if: runner.os == 'Windows'
shell: pwsh
run: |
ccache --version
ccache --max-size 400M
ccache --cleanup
ccache --zero-stats
ccache --show-stats
# PYTHON
- if: runner.os != 'Windows'
uses: actions/setup-python@v6
with:
python-version: ${{ steps.global-env.outputs.python_version }}
# GET-LIBS
- if: runner.os != 'Windows'
shell: bash
working-directory: ${{ github.action_path }}
run: ./get-libs.sh ${{ inputs.sme_deps }} ${{ inputs.sme_deps_common }} ${{ inputs.sme_deps_qt }} ${{ inputs.sme_deps_llvm }} ${{ inputs.build_tag }}
- if: runner.os == 'Windows'
shell: pwsh
working-directory: ${{ github.action_path }}
run: ./get-libs.ps1 ${{ inputs.sme_deps }} ${{ inputs.sme_deps_common }} ${{ inputs.sme_deps_qt }} ${{ inputs.sme_deps_llvm }} ${{ inputs.build_tag }}