Skip to content

Commit ea33625

Browse files
committed
Add Windows on ARM64 GitHub Actions CI support
Fixes issue : #1070 Draft PR for the review. .gitmodules changes were done to build in my fork. They will be discarded in the due course.
1 parent f41e539 commit ea33625

File tree

3 files changed

+318
-172
lines changed

3 files changed

+318
-172
lines changed

.github/workflows/ci.yml

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,3 +243,149 @@ jobs:
243243
run: |
244244
cd __build__
245245
ctest --output-on-failure --no-tests=error -j 3 -R quick -C Debug
246+
247+
# setup windows-11-arm as it is new and does not have all requirements pre-installed.
248+
setup-windows-arm64:
249+
runs-on: windows-11-arm
250+
outputs:
251+
vcpkg-root: ${{ steps.set-vcpkg-root.outputs.vcpkg-root }}
252+
253+
steps:
254+
- uses: actions/checkout@v4
255+
256+
- name: Install vcpkg
257+
run: |
258+
if (!(Test-Path C:\vcpkg)) {
259+
git clone https://github.com/microsoft/vcpkg.git C:\vcpkg
260+
C:\vcpkg\bootstrap-vcpkg.bat
261+
}
262+
else {
263+
echo "vcpkg already installed"
264+
}
265+
266+
- name: Restore vcpkg cache
267+
id: cache-vcpkg
268+
uses: actions/cache@v3
269+
with:
270+
path: |
271+
C:\vcpkg\downloads
272+
C:\vcpkg\installed
273+
key: vcpkg-${{ runner.os }}-arm64
274+
restore-keys: |
275+
vcpkg-${{ runner.os }}-arm64
276+
277+
- name: Install OpenSSL via vcpkg (if not cached)
278+
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
279+
run: |
280+
C:\vcpkg\vcpkg install openssl:arm64-windows
281+
282+
- name: Set vcpkg-root output
283+
id: set-vcpkg-root
284+
shell: pwsh
285+
run: |
286+
echo "Writing vcpkg-root=C:\vcpkg to GITHUB_OUTPUT"
287+
echo "vcpkg-root=C:\vcpkg" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
288+
289+
- name: Log step output
290+
run: |
291+
echo "Step output is: ${{ steps.set-vcpkg-root.outputs.vcpkg-root }}"
292+
293+
294+
b2-windows-arm64:
295+
needs: setup-windows-arm64
296+
runs-on: windows-11-arm
297+
steps:
298+
- uses: actions/checkout@v4
299+
with:
300+
submodules: true
301+
302+
- name: Setup Boost
303+
shell: cmd
304+
run: |
305+
bootstrap
306+
b2 -d0 headers
307+
308+
# There is no mpi support yet for Windows arm64. So built without mpi for now
309+
# pch needs to be turned off, otherwise few components fail.
310+
# It requires additional parameters to be pass for selecting correct asm files for boost:context
311+
- name: Build Boost
312+
run: ./b2 -j2 toolset=msvc architecture=arm address-model=64 abi=ms pch=off --without-mpi --without-graph_parallel stage
313+
314+
- name: Install Boost
315+
run: ./b2 -j2 toolset=msvc architecture=arm address-model=64 abi=ms pch=off --without-mpi --without-graph_parallel install
316+
317+
- name: Test Boost
318+
run: |
319+
cd status
320+
../b2 -j3 quick
321+
322+
# Win Arm64 CMake job
323+
cmake-install-windows-arm64:
324+
needs: setup-windows-arm64
325+
runs-on: windows-11-arm
326+
327+
steps:
328+
- uses: actions/checkout@v4
329+
with:
330+
submodules: true
331+
332+
- name: Restore vcpkg cache
333+
uses: actions/cache@v3
334+
with:
335+
path: |
336+
C:\vcpkg\downloads
337+
C:\vcpkg\installed
338+
key: vcpkg-${{ runner.os }}-arm64
339+
340+
# We are using vcpkg to install dependencies such as OpenSSL in windows-11-arm runner.
341+
- name: Configure Boost
342+
run: |
343+
mkdir __build__ && cd __build__
344+
$vcpkgRoot="${{ needs.setup-windows-arm64.outputs.vcpkg-root }}"
345+
cmake -DBUILD_SHARED_LIBS=ON `
346+
-DCMAKE_TOOLCHAIN_FILE="$vcpkgRoot\scripts\buildsystems\vcpkg.cmake" `
347+
-DVCPKG_TARGET_TRIPLET=arm64-windows ..
348+
349+
- name: Build Boost
350+
run: |
351+
cd __build__
352+
cmake --build . -j 3
353+
354+
- name: Install Boost
355+
run: |
356+
cd __build__
357+
cmake --build . -j 3 --target install
358+
359+
# Win Arm64 CMake test job
360+
cmake-test-windows-arm64-quick:
361+
needs: setup-windows-arm64
362+
runs-on: windows-11-arm
363+
steps:
364+
- uses: actions/checkout@v4
365+
with:
366+
submodules: true
367+
368+
# Restore cache
369+
- uses: actions/cache@v3
370+
with:
371+
path: |
372+
C:\vcpkg\downloads
373+
C:\vcpkg\installed
374+
key: vcpkg-${{ runner.os }}-arm64
375+
376+
# we are using vcpkg to install OpenSSL in windows-11-arm runner.
377+
- name: Configure Boost
378+
run: |
379+
mkdir __build__; cd __build__
380+
$vcpkgRoot="${{ needs.setup-windows-arm64.outputs.vcpkg-root }}"
381+
cmake -DBUILD_TESTING=ON -DCMAKE_TOOLCHAIN_FILE="$vcpkgRoot\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=arm64-windows ..
382+
383+
- name: Build tests
384+
run: |
385+
cd __build__
386+
cmake --build . -j2 --target tests-quick
387+
388+
- name: Run tests
389+
run: |
390+
cd __build__
391+
ctest --output-on-failure --no-tests=error -j2 -R quick -C Debug

0 commit comments

Comments
 (0)