Skip to content

Enable CI builds for ARM64 on Windows #230

Enable CI builds for ARM64 on Windows

Enable CI builds for ARM64 on Windows #230

Workflow file for this run

name: Win64-CI
on:
push:
branches: [master]
pull_request:
jobs:
build:
runs-on: windows-2022
name: "Windows-x64-Qt${{ matrix.cfg.qt_version }}"
strategy:
matrix:
cfg:
- kf_version: "5.116"
kf_fullver: "5.116.0"
qt_version: "5.15.2"
qt_arch: "msvc2019_64"
kf_cmake_args: ""
build_installer: "$false"
deploy_openssl: "$true"
- kf_version: "6.10"
kf_fullver: "6.10.0"
qt_version: "6.8.2"
qt_arch: "msvc2022_64"
kf_cmake_args: "-DBUILD_WITH_QT6=ON"
build_installer: "$true"
deploy_openssl: "$false"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
arch: "win64_${{ matrix.cfg.qt_arch }}"
version: ${{ matrix.cfg.qt_version }}
- name: Add MSVC to PATH
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Build Qt Libs
run: |
cd "${Env:RUNNER_WORKSPACE}"
mkdir build_deps
cd build_deps
curl -LO https://download.kde.org/stable/frameworks/${{ matrix.cfg.kf_version }}/extra-cmake-modules-${{ matrix.cfg.kf_fullver }}.tar.xz
curl -LO https://download.kde.org/stable/frameworks/${{ matrix.cfg.kf_version }}/syntax-highlighting-${{ matrix.cfg.kf_fullver }}.tar.xz
cmake -E tar xf extra-cmake-modules-${{ matrix.cfg.kf_fullver }}.tar.xz
cd extra-cmake-modules-${{ matrix.cfg.kf_fullver }}
mkdir build && cd build
cmake -G "NMake Makefiles" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/${{ matrix.cfg.qt_arch }}" `
"-DCMAKE_INSTALL_PREFIX=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/${{ matrix.cfg.qt_arch }}" `
-DCMAKE_BUILD_TYPE=Release ${{ matrix.cfg.kf_cmake_args }} ..
cmake --build . --target install
cd ..\..
cmake -E tar xf syntax-highlighting-${{ matrix.cfg.kf_fullver }}.tar.xz
cd syntax-highlighting-${{ matrix.cfg.kf_fullver }}
mkdir build && cd build
cmake -G "NMake Makefiles" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/${{ matrix.cfg.qt_arch }}" `
"-DCMAKE_INSTALL_PREFIX=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/${{ matrix.cfg.qt_arch }}" `
-DCMAKE_BUILD_TYPE=Release ${{ matrix.cfg.kf_cmake_args }} ..
cmake --build .
cmake --build . --target install
- name: Build qtextpad
run: |
mkdir build && cd build
cmake -G "NMake Makefiles" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/${{ matrix.cfg.qt_arch }}" `
"-DCMAKE_INSTALL_PREFIX=${Env:GITHUB_WORKSPACE}/dist/qtextpad-x64" `
-DCMAKE_BUILD_TYPE=Release ..
cmake --build .
cmake --build . --target install
- name: Package qtextpad
run: |
$buildver = ((git describe --dirty) | Out-String).Trim()
$buildver += "-qt" + "${{ matrix.cfg.qt_version }}"[0]
cd "${Env:GITHUB_WORKSPACE}\dist"
windeployqt qtextpad-x64\qtextpad.exe --release --no-opengl-sw --no-system-d3d-compiler
copy -Path "${Env:GITHUB_WORKSPACE}\COPYING", `
"${Env:RUNNER_WORKSPACE}\Qt\${{ matrix.cfg.qt_version }}\${{ matrix.cfg.qt_arch }}\bin\KF*SyntaxHighlighting.dll" `
-Destination qtextpad-x64
cmake -E copy_directory "${Env:RUNNER_WORKSPACE}\Qt\${{ matrix.cfg.qt_version }}\${{ matrix.cfg.qt_arch }}\bin\data" `
qtextpad-x64\data
windeployqt qtextpad-x64\KF*SyntaxHighlighting.dll --release --no-opengl-sw --no-system-d3d-compiler
# OpenSSL libs are required for the online repository update in Qt5,
# but Qt6 can use the Windows SChannel backend instead
if (${{ matrix.cfg.deploy_openssl }}) {
copy -Path `
"C:\Program Files\OpenSSL\bin\libcrypto-1_1-x64.dll", `
"C:\Program Files\OpenSSL\bin\libssl-1_1-x64.dll" `
-Destination qtextpad-x64
} elseif (Test-Path qtextpad-x64\tls\qopensslbackend.dll) {
del qtextpad-x64\tls\qopensslbackend.dll
}
cmake -E tar cf "..\qtextpad-x64-${buildver}.zip" --format=zip qtextpad-x64
cd ..\win32
cmake -E tar xf "..\qtextpad-x64-${buildver}.zip"
if (${{ matrix.cfg.build_installer }}) {
iscc setup.iss
cmake -E rename qtextpad-x64.exe "..\qtextpad-x64-${buildver}.exe"
}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: QTextPad-x64-qt${{ matrix.cfg.qt_version }}
path: qtextpad-x64-*.*
build-arm64:
runs-on: windows-2022
name: "Windows-arm64-Qt${{ matrix.cfg.qt_version }}"
strategy:
matrix:
cfg:
- kf_version: "6.10"
kf_fullver: "6.10.0"
qt_version: "6.8.2"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
arch: win64_msvc2022_arm64_cross_compiled
version: ${{ matrix.cfg.qt_version }}
# First build katehighlightingindexer for x64 so we can use it for cross-compilation
- name: Add MSVC to PATH (x64)
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Build katehighlightingindexer
run: |
cd "${Env:RUNNER_WORKSPACE}"
mkdir build_deps
cd build_deps
curl -LO https://download.kde.org/stable/frameworks/${{ matrix.cfg.kf_version }}/extra-cmake-modules-${{ matrix.cfg.kf_fullver }}.tar.xz
curl -LO https://download.kde.org/stable/frameworks/${{ matrix.cfg.kf_version }}/syntax-highlighting-${{ matrix.cfg.kf_fullver }}.tar.xz
cmake -E tar xf extra-cmake-modules-${{ matrix.cfg.kf_fullver }}.tar.xz
cd extra-cmake-modules-${{ matrix.cfg.kf_fullver }}
mkdir build-host && cd build-host
cmake -G "NMake Makefiles" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
"-DCMAKE_INSTALL_PREFIX=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
-DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON ..
cmake --build . --target install
cd ..\..
cmake -E tar xf syntax-highlighting-${{ matrix.cfg.kf_fullver }}.tar.xz
cd syntax-highlighting-${{ matrix.cfg.kf_fullver }}
mkdir build-host && cd build-host
cmake -G "NMake Makefiles" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
"-DCMAKE_INSTALL_PREFIX=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
-DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON ..
cmake --build . --target katehighlightingindexer
"${Env:RUNNER_WORKSPACE}\Qt\${{ matrix.cfg.qt_version }}\msvc2022_64\bin\windeployqt.exe" `
bin\katehighlightingindexer.exe --release --no-opengl-sw --no-system-d3d-compiler
# Now build for ARM64
- name: Add MSVC to PATH (arm64)
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64_arm64
- name: Build Qt Libs
run: |
cd "${Env:RUNNER_WORKSPACE}\build_deps"
cd extra-cmake-modules-${{ matrix.cfg.kf_fullver }}
mkdir build && cd build
cmake -G "NMake Makefiles" `
"-DQT_HOST_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_arm64" `
"-DCMAKE_INSTALL_PREFIX=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_arm64" `
-DCMAKE_CROSS_COMPILING=ON -DCMAKE_SYSTEM_NAME=Windows `
-DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON ..
cmake --build . --target install
cd ..\..\syntax-highlighting-${{ matrix.cfg.kf_fullver }}
mkdir build && cd build
cmake -G "NMake Makefiles" `
"-DQT_HOST_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_arm64" `
"-DCMAKE_INSTALL_PREFIX=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_arm64" `
-DCMAKE_CROSS_COMPILING=ON -DCMAKE_SYSTEM_NAME=Windows `
"-DKATEHIGHLIGHTINGINDEXER_EXECUTABLE=${Env:RUNNER_WORKSPACE}/build_deps/syntax-highlighting-${{ matrix.cfg.kf_fullver }}/build-host/bin/katehighlightingindexer.exe" `
-DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON ..
cmake --build .
cmake --build . --target install
- name: Build qtextpad
run: |
mkdir build
cd build
cmake -G "NMake Makefiles" `
"-DQT_HOST_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_64" `
"-DCMAKE_PREFIX_PATH=${Env:RUNNER_WORKSPACE}/Qt/${{ matrix.cfg.qt_version }}/msvc2022_arm64" `
"-DCMAKE_INSTALL_PREFIX=${Env:GITHUB_WORKSPACE}/dist/qtextpad-arm64" `
-DCMAKE_CROSS_COMPILING=ON -DCMAKE_SYSTEM_NAME=Windows `
-DCMAKE_BUILD_TYPE=Release ..
cmake --build .
cmake --build . --target install
- name: Package qtextpad
run: |
$buildver = ((git describe --dirty) | Out-String).Trim()
$buildver += "-qt" + "${{ matrix.cfg.qt_version }}"[0]
cd "${Env:GITHUB_WORKSPACE}\dist"
windeployqt qtextpad-arm64\qtextpad.exe --release --no-opengl-sw --no-system-d3d-compiler
copy -Path "${Env:GITHUB_WORKSPACE}\COPYING", `
"${Env:RUNNER_WORKSPACE}\Qt\${{ matrix.cfg.qt_version }}\msvc2022_arm64\bin\KF*SyntaxHighlighting.dll" `
-Destination qtextpad-arm64
cmake -E copy_directory "${Env:RUNNER_WORKSPACE}\Qt\${{ matrix.cfg.qt_version }}\msvc2022_arm64\bin\data" `
qtextpad-arm64\data
windeployqt qtextpad-arm64\KF*SyntaxHighlighting.dll --release --no-opengl-sw --no-system-d3d-compiler
del qtextpad-arm64\tls\qopensslbackend.dll
cmake -E tar cf "..\qtextpad-arm64-${buildver}.zip" --format=zip qtextpad-arm64
cd ..\win32
cmake -E tar xf "..\qtextpad-arm64-${buildver}.zip"
iscc setup-arm64.iss
cmake -E rename qtextpad-arm64.exe "..\qtextpad-arm64-${buildver}.exe"
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: QTextPad-arm64-qt${{ matrix.cfg.qt_version }}
path: qtextpad-arm64-*.*