-
Notifications
You must be signed in to change notification settings - Fork 597
275 lines (245 loc) · 11 KB
/
build-dawn.yml
File metadata and controls
275 lines (245 loc) · 11 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
269
270
271
272
273
274
275
name: Build Dawn
on: workflow_dispatch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
DAWN_BRANCH: chromium/7770 # Configure the Dawn branch to checkout
jobs:
prepare-release:
runs-on: ubuntu-latest
outputs:
dawn_branch: ${{ steps.dawn_meta.outputs.branch }}
dawn_branch_slug: ${{ steps.dawn_meta.outputs.branch_slug }}
tag_name: ${{ steps.release_meta.outputs.tag_name }}
release_name: ${{ steps.release_meta.outputs.release_name }}
steps:
- name: Checkout repository
uses: actions/checkout@v6.0.2
- name: Determine Dawn branch metadata
id: dawn_meta
run: |
set -eo pipefail
branch="${DAWN_BRANCH}"
# Convert slashes to hyphens for tag-safe slug
slug=${branch//\//-}
echo "branch=$branch" >> "$GITHUB_OUTPUT"
echo "branch_slug=$slug" >> "$GITHUB_OUTPUT"
env:
DAWN_BRANCH: ${{ env.DAWN_BRANCH }}
- name: Compute release metadata
id: release_meta
run: |
tag="dawn-${DAWN_BRANCH_SLUG}"
echo "tag_name=$tag" >> "$GITHUB_OUTPUT"
echo "release_name=Dawn ${DAWN_BRANCH}" >> "$GITHUB_OUTPUT"
env:
DAWN_BRANCH: ${{ steps.dawn_meta.outputs.branch }}
DAWN_BRANCH_SLUG: ${{ steps.dawn_meta.outputs.branch_slug }}
- name: Create GitHub release
id: create_release
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.release_meta.outputs.tag_name }}
name: ${{ steps.release_meta.outputs.release_name }}
body: "Dawn prebuilt binaries for version ${{ steps.dawn_meta.outputs.branch }}"
draft: false
prerelease: true
generate_release_notes: false
mobile-android:
needs: prepare-release
strategy:
fail-fast: false
matrix:
include:
# Android builds
- arch: arm64-v8a
toolchain_file: $ANDROID_NDK/build/cmake/android.toolchain.cmake
cmake_args: -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-26
output_dir: externals/dawn/out/android_arm64-v8a
library_path: src/dawn/native/libwebgpu_dawn.so
strip_tool: $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
- arch: armeabi-v7a
toolchain_file: $ANDROID_NDK/build/cmake/android.toolchain.cmake
cmake_args: -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-26
output_dir: externals/dawn/out/android_armeabi-v7a
library_path: src/dawn/native/libwebgpu_dawn.so
strip_tool: $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
- arch: x86
toolchain_file: $ANDROID_NDK/build/cmake/android.toolchain.cmake
cmake_args: -DANDROID_ABI=x86 -DANDROID_PLATFORM=android-26
output_dir: externals/dawn/out/android_x86
library_path: src/dawn/native/libwebgpu_dawn.so
strip_tool: $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
- arch: x86_64
toolchain_file: $ANDROID_NDK/build/cmake/android.toolchain.cmake
cmake_args: -DANDROID_ABI=x86_64 -DANDROID_PLATFORM=android-26
output_dir: externals/dawn/out/android_x86_64
library_path: src/dawn/native/libwebgpu_dawn.so
strip_tool: $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
name: Build-android-${{ matrix.arch }}
runs-on: ubuntu-latest
steps:
- name: Checkout main repository
uses: actions/checkout@v6.0.2
- name: Checkout Dawn repository
run: |
git clone --depth 1 --branch ${{ env.DAWN_BRANCH }} https://dawn.googlesource.com/dawn externals/dawn
- name: Setup Android NDK
id: setup-ndk
uses: nttld/setup-ndk@ed92fe6cadad69be94a966a7ee3271275e62f779 # v1.6.0
with:
ndk-version: r27d
- name: Set ANDROID_NDK
run: echo "ANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}" >> $GITHUB_ENV
- name: Build android ${{ matrix.arch }}
run: |
cmake -S externals/dawn -B ${{ matrix.output_dir }} -G Ninja \
-DDAWN_MOBILE_BUILD=android \
-C externals/dawn/.github/workflows/dawn-ci.cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain_file }} \
${{ matrix.cmake_args }} \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DDAWN_BUILD_MONOLITHIC_LIBRARY=SHARED \
-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON \
-DCMAKE_EXE_LINKER_FLAGS="-llog" \
-DCMAKE_SHARED_LINKER_FLAGS="-llog -Wl,-z,max-page-size=16384"
ninja -C ${{ matrix.output_dir }}
- name: Strip Android binaries
run: |
${{ matrix.strip_tool }} ${{ matrix.output_dir }}/${{ matrix.library_path }}
- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
name: build-android-${{ matrix.arch }}
path: ${{ matrix.output_dir }}/${{ matrix.library_path }}
- name: Install headers (from arm64-v8a build only)
if: matrix.arch == 'arm64-v8a'
run: |
cmake --install ${{ matrix.output_dir }} --prefix dawn-headers
- name: Upload headers (from arm64-v8a build only)
if: matrix.arch == 'arm64-v8a'
uses: actions/upload-artifact@v7
with:
name: dawn-headers
path: dawn-headers/
mobile-apple:
needs: prepare-release
strategy:
fail-fast: false
matrix:
include:
# Apple builds
- platform: ios
arch: arm64
cmake_args: -DPLATFORM=OS64 -DDEPLOYMENT_TARGET=14.0 -DENABLE_BITCODE=OFF -DENABLE_ARC=OFF -DENABLE_VISIBILITY=OFF
output_dir: externals/dawn/out/ios_arm64
library_path: src/dawn/native/libwebgpu_dawn.a
- platform: ios
arch: sim_arm64
cmake_args: -DPLATFORM=SIMULATORARM64 -DDEPLOYMENT_TARGET=14.0 -DENABLE_BITCODE=OFF -DENABLE_ARC=OFF -DENABLE_VISIBILITY=OFF
output_dir: externals/dawn/out/ios_sim_arm64
library_path: src/dawn/native/libwebgpu_dawn.a
- platform: ios
arch: sim_x86_64
cmake_args: -DPLATFORM=SIMULATOR64 -DDEPLOYMENT_TARGET=14.0 -DENABLE_BITCODE=OFF -DENABLE_ARC=OFF -DENABLE_VISIBILITY=OFF
output_dir: externals/dawn/out/ios_sim_x86_64
library_path: src/dawn/native/libwebgpu_dawn.a
- platform: macos
arch: universal
cmake_args: -DPLATFORM=MAC_UNIVERSAL -DDEPLOYMENT_TARGET=11.0 -DENABLE_BITCODE=OFF -DENABLE_ARC=OFF -DENABLE_VISIBILITY=OFF
output_dir: externals/dawn/out/macos_universal
library_path: src/dawn/native/libwebgpu_dawn.a
name: Build-${{ matrix.platform }}-${{ matrix.arch }}
runs-on: macos-latest-large
steps:
- name: Checkout main repository
uses: actions/checkout@v6.0.2
- name: Checkout Dawn repository
run: |
git clone --depth 1 --branch ${{ env.DAWN_BRANCH }} https://dawn.googlesource.com/dawn externals/dawn
# submodules: true
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0
with:
xcode-version: latest-stable
- name: Download Apple toolchain
run: |
mkdir -p externals/dawn/build-tools
# Download the ios-cmake toolchain file
curl -L https://raw.githubusercontent.com/leetal/ios-cmake/6fa909e133b92343db2d099e0478448c05ffec1a/ios.toolchain.cmake -o externals/dawn/build-tools/apple.toolchain.cmake
- name: Build ${{ matrix.platform }} ${{ matrix.arch }}
run: |
cmake -S externals/dawn -B ${{ matrix.output_dir }} -G Ninja \
-DDAWN_MOBILE_BUILD=apple \
-C externals/dawn/.github/workflows/dawn-ci.cmake \
-DCMAKE_TOOLCHAIN_FILE=build-tools/apple.toolchain.cmake \
${{ matrix.cmake_args }} \
-DCMAKE_BUILD_TYPE=Release
ninja -C ${{ matrix.output_dir }}
- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
name: build-${{ matrix.platform }}-${{ matrix.arch }}
path: ${{ matrix.output_dir }}/${{ matrix.library_path }}
package-mobile:
name: Package Mobile Artifacts
runs-on: macos-latest
needs: [prepare-release, mobile-android, mobile-apple]
steps:
- name: Checkout main repository
uses: actions/checkout@v6.0.2
- name: Download all build artifacts
uses: actions/download-artifact@v8
with:
pattern: build-*
path: artifacts
- name: Download headers
uses: actions/download-artifact@v8
with:
name: dawn-headers
path: dawn-headers
- name: Create iOS Simulator fat binary
run: |
mkdir -p libs/apple/iphonesimulator
lipo -create \
artifacts/build-ios-sim_x86_64/libwebgpu_dawn.a \
artifacts/build-ios-sim_arm64/libwebgpu_dawn.a \
-output libs/apple/iphonesimulator/libwebgpu_dawn.a
- name: Create XCFramework
run: |
xcodebuild -create-xcframework \
-library libs/apple/iphonesimulator/libwebgpu_dawn.a \
-library artifacts/build-ios-arm64/libwebgpu_dawn.a \
-library artifacts/build-macos-universal/libwebgpu_dawn.a \
-output dawn-apple.xcframework
- name: Package Android libraries
run: |
mkdir -p dawn-android/arm64-v8a
mkdir -p dawn-android/armeabi-v7a
mkdir -p dawn-android/x86
mkdir -p dawn-android/x86_64
cp artifacts/build-android-arm64-v8a/libwebgpu_dawn.so dawn-android/arm64-v8a/
cp artifacts/build-android-armeabi-v7a/libwebgpu_dawn.so dawn-android/armeabi-v7a/
cp artifacts/build-android-x86/libwebgpu_dawn.so dawn-android/x86/
cp artifacts/build-android-x86_64/libwebgpu_dawn.so dawn-android/x86_64/
- name: Create archives
run: |
TAG="${{ needs.prepare-release.outputs.tag_name }}"
tar -czf dawn-android-${TAG}.tar.gz dawn-android
tar -czf dawn-apple-${TAG}.xcframework.tar.gz dawn-apple.xcframework
tar -czf dawn-headers-${TAG}.tar.gz dawn-headers
- name: Upload to GitHub release
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.prepare-release.outputs.tag_name }}
files: |
dawn-android-${{ needs.prepare-release.outputs.tag_name }}.tar.gz
dawn-apple-${{ needs.prepare-release.outputs.tag_name }}.xcframework.tar.gz
dawn-headers-${{ needs.prepare-release.outputs.tag_name }}.tar.gz
prerelease: true