Skip to content

Commit f5f8ad8

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 1243676 commit f5f8ad8

File tree

1 file changed

+90
-48
lines changed

1 file changed

+90
-48
lines changed

.github/workflows/CI.yml

Lines changed: 90 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-2022
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-2022
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,80 @@ 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}-miniupnpc"
899+
"mingw-w64-${TOOLCHAIN}-nlohmann-json"
900+
"mingw-w64-${TOOLCHAIN}-nodejs"
901+
"mingw-w64-${TOOLCHAIN}-onevpl"
902+
"mingw-w64-${TOOLCHAIN}-openssl"
903+
"mingw-w64-${TOOLCHAIN}-opus"
904+
"mingw-w64-${TOOLCHAIN}-toolchain"
873905
)
874906
907+
if [[ ${MSYSTEM} == "ucrt64" ]]; then
908+
dependencies+=(
909+
"mingw-w64-${TOOLCHAIN}-MinHook"
910+
"mingw-w64-${TOOLCHAIN}-nsis" # TODO: how to create an arm64 installer?
911+
)
912+
fi
913+
914+
# do not modify below this line
915+
916+
ignore_packages=()
875917
tarballs=""
876-
for dep in "${broken_deps[@]}"; do
877-
tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
918+
for pkg in "${!pinned_deps[@]}"; do
919+
ignore_packages+=("${pkg}")
920+
version="${pinned_deps[$pkg]}"
921+
tarball="${pkg}-${version}-any.pkg.tar.zst"
878922
879923
# download and install working version
880-
wget https://repo.msys2.org/mingw/ucrt64/${tarball}
924+
wget "https://repo.msys2.org/mingw/${MSYSTEM}/${tarball}"
881925
882926
tarballs="${tarballs} ${tarball}"
883927
done
884928
885-
# install broken dependencies
929+
# Create the ignore string for pacman
930+
ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
931+
932+
# install pinned dependencies
886933
if [ -n "$tarballs" ]; then
887934
pacman -U --noconfirm ${tarballs}
888935
fi
889936
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[@]}"
937+
# Only add --ignore if we have packages to ignore
938+
if [ -n "$ignore_list" ]; then
939+
pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
940+
else
941+
pacman -Syu --noconfirm "${dependencies[@]}"
942+
fi
909943
910944
- name: Install Doxygen
911945
# GCC compiled doxygen has issues when running graphviz
912946
env:
913947
DOXYGEN_VERSION: "1.11.0"
948+
shell: pwsh
914949
run: |
915950
# Set version variables
916951
$doxy_ver = $env:DOXYGEN_VERSION
@@ -940,7 +975,6 @@ jobs:
940975

941976
- name: Python Path
942977
id: python-path
943-
shell: msys2 {0}
944978
run: |
945979
# replace backslashes with double backslashes
946980
python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
@@ -950,7 +984,6 @@ jobs:
950984
echo "python-path=${python_path}" >> $GITHUB_OUTPUT
951985
952986
- name: Build Windows
953-
shell: msys2 {0}
954987
env:
955988
BRANCH: ${{ github.head_ref || github.ref_name }}
956989
BUILD_VERSION: ${{ needs.setup_release.outputs.release_tag }}
@@ -962,40 +995,48 @@ jobs:
962995
-B build \
963996
-G Ninja \
964997
-S . \
965-
-DBUILD_WERROR=ON \
966998
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
967999
-DSUNSHINE_ASSETS_DIR=assets \
9681000
-DSUNSHINE_PUBLISHER_NAME='${{ github.repository_owner }}' \
9691001
-DSUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev' \
9701002
-DSUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support'
9711003
ninja -C build
9721004
973-
- name: Package Windows
974-
shell: msys2 {0}
1005+
- name: Package Windows (Prepare)
9751006
run: |
9761007
mkdir -p artifacts
1008+
1009+
- name: Package Windows (Installer)
1010+
if: runner.arch == 'X86' || runner.arch == 'X64'
1011+
run: |
9771012
cd build
9781013
9791014
# package
9801015
cpack -G NSIS
1016+
1017+
# move
1018+
mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.os }}-installer.exe
1019+
1020+
- name: Package Windows (Portable)
1021+
run: |
1022+
cd build
1023+
1024+
# package
9811025
cpack -G ZIP
9821026
9831027
# move
984-
mv ./cpack_artifacts/Sunshine.exe ../artifacts/sunshine-windows-installer.exe
985-
mv ./cpack_artifacts/Sunshine.zip ../artifacts/sunshine-windows-portable.zip
1028+
mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.os }}-portable.zip
9861029
9871030
- name: Run tests
9881031
id: test
989-
shell: msys2 {0}
9901032
working-directory: build/tests
9911033
run: |
9921034
./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
9931035
9941036
- name: Generate gcov report
9951037
id: test_report
9961038
# any except canceled or skipped
997-
if: always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
998-
shell: msys2 {0}
1039+
if: always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure') && runner.arch == 'X86' || runner.arch == 'X64'
9991040
working-directory: build
10001041
run: |
10011042
${{ steps.python-path.outputs.python-path }} -m pip install gcovr
@@ -1018,7 +1059,7 @@ jobs:
10181059
disable_search: true
10191060
fail_ci_if_error: true
10201061
files: ./build/tests/test_results.xml
1021-
flags: ${{ runner.os }}
1062+
flags: ${{ matrix.name }}
10221063
handle_no_reports_found: true
10231064
token: ${{ secrets.CODECOV_TOKEN }}
10241065
verbose: true
@@ -1034,11 +1075,12 @@ jobs:
10341075
disable_search: true
10351076
fail_ci_if_error: true
10361077
files: ./build/coverage.xml
1037-
flags: ${{ runner.os }}
1078+
flags: ${{ matrix.name }}
10381079
token: ${{ secrets.CODECOV_TOKEN }}
10391080
verbose: true
10401081

10411082
- name: Package Windows Debug Info
1083+
shell: pwsh
10421084
working-directory: build
10431085
run: |
10441086
# use .dbg file extension for binaries to avoid confusion with real packages
@@ -1049,12 +1091,12 @@ jobs:
10491091
7z -r `
10501092
"-xr!CMakeFiles" `
10511093
"-xr!cpack_artifacts" `
1052-
a "../artifacts/sunshine-win32-debuginfo.7z" "*.dbg"
1094+
a "../artifacts/${{ matrix.name }}-debuginfo.7z" "*.dbg"
10531095
10541096
- name: Upload Artifacts
10551097
uses: actions/upload-artifact@v4
10561098
with:
1057-
name: sunshine-windows
1099+
name: Sunshine-${{ matrix.name }}
10581100
path: artifacts/
10591101
if-no-files-found: error
10601102

0 commit comments

Comments
 (0)