Skip to content

Commit 0ccee19

Browse files
rbqvqReenigneArcher
andcommitted
ci(build/windows): add support for arm64
nsis does not support arm64, so we cannot create an installer at this time Signed-off-by: Coia Prant <[email protected]> Co-authored-by: ReenigneArcher <[email protected]>
1 parent e62be72 commit 0ccee19

File tree

1 file changed

+95
-48
lines changed

1 file changed

+95
-48
lines changed

.github/workflows/CI.yml

Lines changed: 95 additions & 48 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,63 +872,85 @@ 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+
"libxml2-devel"
895+
"mingw-w64-${TOOLCHAIN}-cmake"
896+
"mingw-w64-${TOOLCHAIN}-cppwinrt"
897+
"mingw-w64-${TOOLCHAIN}-curl-winssl"
898+
"mingw-w64-${TOOLCHAIN}-graphviz"
899+
"mingw-w64-${TOOLCHAIN}-miniupnpc"
900+
"mingw-w64-${TOOLCHAIN}-nlohmann-json"
901+
"mingw-w64-${TOOLCHAIN}-nodejs"
902+
"mingw-w64-${TOOLCHAIN}-onevpl"
903+
"mingw-w64-${TOOLCHAIN}-openssl"
904+
"mingw-w64-${TOOLCHAIN}-opus"
905+
"mingw-w64-${TOOLCHAIN}-toolchain"
873906
)
874907
908+
if [[ ${MSYSTEM} == "ucrt64" ]]; then
909+
dependencies+=(
910+
"mingw-w64-${TOOLCHAIN}-MinHook"
911+
"mingw-w64-${TOOLCHAIN}-nsis" # TODO: how to create an arm64 installer?
912+
)
913+
elif [[ ${MSYSTEM} == "clangarm64" ]]; then
914+
dependencies+=(
915+
"mingw-w64-${TOOLCHAIN}-gcc"
916+
)
917+
fi
918+
919+
# do not modify below this line
920+
921+
ignore_packages=()
875922
tarballs=""
876-
for dep in "${broken_deps[@]}"; do
877-
tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
923+
for pkg in "${!pinned_deps[@]}"; do
924+
ignore_packages+=("${pkg}")
925+
version="${pinned_deps[$pkg]}"
926+
tarball="${pkg}-${version}-any.pkg.tar.zst"
878927
879928
# download and install working version
880-
wget https://repo.msys2.org/mingw/ucrt64/${tarball}
929+
wget "https://repo.msys2.org/mingw/${MSYSTEM}/${tarball}"
881930
882931
tarballs="${tarballs} ${tarball}"
883932
done
884933
885-
# install broken dependencies
934+
# Create the ignore string for pacman
935+
ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
936+
937+
# install pinned dependencies
886938
if [ -n "$tarballs" ]; then
887939
pacman -U --noconfirm ${tarballs}
888940
fi
889941
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[@]}"
942+
# Only add --ignore if we have packages to ignore
943+
if [ -n "$ignore_list" ]; then
944+
pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
945+
else
946+
pacman -Syu --noconfirm "${dependencies[@]}"
947+
fi
909948
910949
- name: Install Doxygen
911950
# GCC compiled doxygen has issues when running graphviz
912951
env:
913952
DOXYGEN_VERSION: "1.11.0"
953+
shell: pwsh
914954
run: |
915955
# Set version variables
916956
$doxy_ver = $env:DOXYGEN_VERSION
@@ -940,7 +980,6 @@ jobs:
940980

941981
- name: Python Path
942982
id: python-path
943-
shell: msys2 {0}
944983
run: |
945984
# replace backslashes with double backslashes
946985
python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
@@ -950,7 +989,6 @@ jobs:
950989
echo "python-path=${python_path}" >> $GITHUB_OUTPUT
951990
952991
- name: Build Windows
953-
shell: msys2 {0}
954992
env:
955993
BRANCH: ${{ github.head_ref || github.ref_name }}
956994
BUILD_VERSION: ${{ needs.setup_release.outputs.release_tag }}
@@ -962,31 +1000,40 @@ jobs:
9621000
-B build \
9631001
-G Ninja \
9641002
-S . \
965-
-DBUILD_WERROR=ON \
9661003
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
9671004
-DSUNSHINE_ASSETS_DIR=assets \
9681005
-DSUNSHINE_PUBLISHER_NAME='${{ github.repository_owner }}' \
9691006
-DSUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev' \
9701007
-DSUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support'
9711008
ninja -C build
9721009
973-
- name: Package Windows
974-
shell: msys2 {0}
1010+
- name: Package Windows (Prepare)
9751011
run: |
9761012
mkdir -p artifacts
1013+
1014+
- name: Package Windows (Installer)
1015+
if: runner.arch == 'X86' || runner.arch == 'X64'
1016+
run: |
9771017
cd build
9781018
9791019
# package
9801020
cpack -G NSIS
1021+
1022+
# move
1023+
mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.os }}-installer.exe
1024+
1025+
- name: Package Windows (Portable)
1026+
run: |
1027+
cd build
1028+
1029+
# package
9811030
cpack -G ZIP
9821031
9831032
# move
984-
mv ./cpack_artifacts/Sunshine.exe ../artifacts/sunshine-windows-installer.exe
985-
mv ./cpack_artifacts/Sunshine.zip ../artifacts/sunshine-windows-portable.zip
1033+
mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.os }}-portable.zip
9861034
9871035
- name: Run tests
9881036
id: test
989-
shell: msys2 {0}
9901037
working-directory: build/tests
9911038
run: |
9921039
./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
@@ -995,7 +1042,6 @@ jobs:
9951042
id: test_report
9961043
# any except canceled or skipped
9971044
if: always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
998-
shell: msys2 {0}
9991045
working-directory: build
10001046
run: |
10011047
${{ steps.python-path.outputs.python-path }} -m pip install gcovr
@@ -1018,7 +1064,7 @@ jobs:
10181064
disable_search: true
10191065
fail_ci_if_error: true
10201066
files: ./build/tests/test_results.xml
1021-
flags: ${{ runner.os }}
1067+
flags: ${{ matrix.name }}
10221068
handle_no_reports_found: true
10231069
token: ${{ secrets.CODECOV_TOKEN }}
10241070
verbose: true
@@ -1034,11 +1080,12 @@ jobs:
10341080
disable_search: true
10351081
fail_ci_if_error: true
10361082
files: ./build/coverage.xml
1037-
flags: ${{ runner.os }}
1083+
flags: ${{ matrix.name }}
10381084
token: ${{ secrets.CODECOV_TOKEN }}
10391085
verbose: true
10401086

10411087
- name: Package Windows Debug Info
1088+
shell: pwsh
10421089
working-directory: build
10431090
run: |
10441091
# use .dbg file extension for binaries to avoid confusion with real packages
@@ -1049,12 +1096,12 @@ jobs:
10491096
7z -r `
10501097
"-xr!CMakeFiles" `
10511098
"-xr!cpack_artifacts" `
1052-
a "../artifacts/sunshine-win32-debuginfo.7z" "*.dbg"
1099+
a "../artifacts/${{ matrix.name }}-debuginfo.7z" "*.dbg"
10531100
10541101
- name: Upload Artifacts
10551102
uses: actions/upload-artifact@v4
10561103
with:
1057-
name: sunshine-windows
1104+
name: Sunshine-${{ matrix.name }}
10581105
path: artifacts/
10591106
if-no-files-found: error
10601107

@@ -1068,4 +1115,4 @@ jobs:
10681115
name: ${{ needs.setup_release.outputs.release_tag }}
10691116
prerelease: true
10701117
tag: ${{ needs.setup_release.outputs.release_tag }}
1071-
token: ${{ secrets.GH_BOT_TOKEN }}
1118+
token: ${{ secrets.GH_BOT_TOKEN }}

0 commit comments

Comments
 (0)