Skip to content

Commit c491dff

Browse files
build(windows): add arm64 build
1 parent 0bdc918 commit c491dff

File tree

2 files changed

+67
-42
lines changed

2 files changed

+67
-42
lines changed

.github/workflows/CI.yml

Lines changed: 66 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -740,9 +740,26 @@ jobs:
740740
validate: false
741741

742742
build_win:
743-
name: Windows
743+
name: ${{ matrix.name }}
744744
needs: setup_release
745-
runs-on: windows-2019
745+
runs-on: ${{ matrix.os }}
746+
defaults:
747+
run:
748+
shell: msys2 {0}
749+
strategy:
750+
fail-fast: false
751+
matrix:
752+
include:
753+
- name: Windows-AMD64
754+
os: windows-2019
755+
arch: x86_64
756+
msystem: ucrt64
757+
toolchain: ucrt-x86_64
758+
- name: Windows-ARM64
759+
os: windows-11-arm
760+
arch: aarch64
761+
msystem: clangarm64
762+
toolchain: clang-aarch64
746763
steps:
747764
- name: Checkout
748765
uses: actions/checkout@v4
@@ -752,6 +769,7 @@ jobs:
752769
- name: Prepare tests
753770
id: prepare-tests
754771
if: false # todo: DirectX11 is not available, so even software encoder fails
772+
shell: pwsh
755773
run: |
756774
# function to download and extract a zip file
757775
function DownloadAndExtract {
@@ -854,58 +872,69 @@ jobs:
854872
Get-Content -Path monitor_list.txt
855873
856874
- name: Setup Dependencies Windows
857-
# if a dependency needs to be pinned, see https://github.com/LizardByte/build-deps/pull/186
858875
uses: msys2/setup-msys2@v2
859876
with:
860-
msystem: ucrt64
877+
msystem: ${{ matrix.msystem }}
861878
update: true
862-
install: >-
863-
wget
864879

865880
- name: Update Windows dependencies
866881
env:
867-
gcc_version: "14.2.0-3"
868-
shell: msys2 {0}
882+
MSYSTEM: ${{ matrix.msystem }}
883+
TOOLCHAIN: ${{ matrix.toolchain }}
869884
run: |
870-
broken_deps=(
871-
"mingw-w64-ucrt-x86_64-gcc"
872-
"mingw-w64-ucrt-x86_64-gcc-libs"
885+
# variables
886+
declare -A pinned_deps
887+
if [[ ${MSYSTEM} == "ucrt64" ]]; then
888+
pinned_deps["mingw-w64-${TOOLCHAIN}-gcc"]="14.2.0-3"
889+
pinned_deps["mingw-w64-${TOOLCHAIN}-gcc-libs"]="14.2.0-3"
890+
fi
891+
892+
dependencies=(
893+
"git"
894+
"mingw-w64-${TOOLCHAIN}-cmake"
895+
"mingw-w64-${TOOLCHAIN}-cppwinrt"
896+
"mingw-w64-${TOOLCHAIN}-curl-winssl"
897+
"mingw-w64-${TOOLCHAIN}-graphviz"
898+
"mingw-w64-${TOOLCHAIN}-MinHook"
899+
"mingw-w64-${TOOLCHAIN}-miniupnpc"
900+
"mingw-w64-${TOOLCHAIN}-nlohmann-json"
901+
"mingw-w64-${TOOLCHAIN}-nodejs"
902+
"mingw-w64-${TOOLCHAIN}-nsis"
903+
"mingw-w64-${TOOLCHAIN}-onevpl"
904+
"mingw-w64-${TOOLCHAIN}-openssl"
905+
"mingw-w64-${TOOLCHAIN}-opus"
906+
"mingw-w64-${TOOLCHAIN}-toolchain"
873907
)
874908
909+
# do not modify below this line
910+
911+
ignore_packages=()
875912
tarballs=""
876-
for dep in "${broken_deps[@]}"; do
877-
tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
913+
for pkg in "${!pinned_deps[@]}"; do
914+
ignore_packages+=("${pkg}")
915+
version="${pinned_deps[$pkg]}"
916+
tarball="${pkg}-${version}-any.pkg.tar.zst"
878917
879918
# download and install working version
880-
wget https://repo.msys2.org/mingw/ucrt64/${tarball}
919+
wget "https://repo.msys2.org/mingw/${MSYSTEM}/${tarball}"
881920
882921
tarballs="${tarballs} ${tarball}"
883922
done
884923
885-
# install broken dependencies
924+
# Create the ignore string for pacman
925+
ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
926+
927+
# install pinned dependencies
886928
if [ -n "$tarballs" ]; then
887929
pacman -U --noconfirm ${tarballs}
888930
fi
889931
890-
# install dependencies
891-
dependencies=(
892-
"git"
893-
"mingw-w64-ucrt-x86_64-cmake"
894-
"mingw-w64-ucrt-x86_64-cppwinrt"
895-
"mingw-w64-ucrt-x86_64-curl-winssl"
896-
"mingw-w64-ucrt-x86_64-graphviz"
897-
"mingw-w64-ucrt-x86_64-MinHook"
898-
"mingw-w64-ucrt-x86_64-miniupnpc"
899-
"mingw-w64-ucrt-x86_64-nlohmann-json"
900-
"mingw-w64-ucrt-x86_64-nodejs"
901-
"mingw-w64-ucrt-x86_64-nsis"
902-
"mingw-w64-ucrt-x86_64-onevpl"
903-
"mingw-w64-ucrt-x86_64-openssl"
904-
"mingw-w64-ucrt-x86_64-opus"
905-
"mingw-w64-ucrt-x86_64-toolchain"
906-
)
907-
908-
pacman -Syu --noconfirm --ignore="$(IFS=,; echo "${broken_deps[*]}")" "${dependencies[@]}"
932+
# Only add --ignore if we have packages to ignore
933+
if [ -n "$ignore_list" ]; then
934+
pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
935+
else
936+
pacman -Syu --noconfirm "${dependencies[@]}"
937+
fi
909938
910939
- name: Install Doxygen
911940
# GCC compiled doxygen has issues when running graphviz
@@ -940,7 +969,6 @@ jobs:
940969

941970
- name: Python Path
942971
id: python-path
943-
shell: msys2 {0}
944972
run: |
945973
# replace backslashes with double backslashes
946974
python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
@@ -950,7 +978,6 @@ jobs:
950978
echo "python-path=${python_path}" >> $GITHUB_OUTPUT
951979
952980
- name: Build Windows
953-
shell: msys2 {0}
954981
env:
955982
BRANCH: ${{ github.head_ref || github.ref_name }}
956983
BUILD_VERSION: ${{ needs.setup_release.outputs.release_tag }}
@@ -971,7 +998,6 @@ jobs:
971998
ninja -C build
972999
9731000
- name: Package Windows
974-
shell: msys2 {0}
9751001
run: |
9761002
mkdir -p artifacts
9771003
cd build
@@ -981,12 +1007,11 @@ jobs:
9811007
cpack -G ZIP
9821008
9831009
# move
984-
mv ./cpack_artifacts/Sunshine.exe ../artifacts/sunshine-windows-installer.exe
985-
mv ./cpack_artifacts/Sunshine.zip ../artifacts/sunshine-windows-portable.zip
1010+
mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.os }}-installer.exe
1011+
mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.os }}-portable.zip
9861012
9871013
- name: Run tests
9881014
id: test
989-
shell: msys2 {0}
9901015
working-directory: build/tests
9911016
run: |
9921017
./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
@@ -995,7 +1020,6 @@ jobs:
9951020
id: test_report
9961021
# any except canceled or skipped
9971022
if: always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
998-
shell: msys2 {0}
9991023
working-directory: build
10001024
run: |
10011025
${{ steps.python-path.outputs.python-path }} -m pip install gcovr
@@ -1039,6 +1063,7 @@ jobs:
10391063
verbose: true
10401064

10411065
- name: Package Windows Debug Info
1066+
shell: pwsh
10421067
working-directory: build
10431068
run: |
10441069
# use .dbg file extension for binaries to avoid confusion with real packages

third-party/build-deps

Submodule build-deps updated 328 files

0 commit comments

Comments
 (0)