From 5490ca3a56796e27154f258d7b798cdf3b381fa3 Mon Sep 17 00:00:00 2001 From: Andrew Moore Date: Sun, 14 Sep 2025 12:11:32 +0930 Subject: [PATCH] fix(packaging/Arch): make cuda and unit tests optional (#4254) --- docker/archlinux.dockerfile | 5 ++ packaging/linux/Arch/PKGBUILD | 96 +++++++++++++++++++++------ packaging/linux/Arch/sunshine.install | 3 +- 3 files changed, 81 insertions(+), 23 deletions(-) diff --git a/docker/archlinux.dockerfile b/docker/archlinux.dockerfile index 63a9be63..d06c2ea5 100644 --- a/docker/archlinux.dockerfile +++ b/docker/archlinux.dockerfile @@ -30,6 +30,11 @@ ENV BUILD_VERSION=${BUILD_VERSION} ENV COMMIT=${COMMIT} ENV CLONE_URL=${CLONE_URL} +# PKGBUILD options +ENV _use_cuda=true +ENV _run_unit_tests=true +ENV _support_headless_testing=true + SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN <<_SETUP diff --git a/packaging/linux/Arch/PKGBUILD b/packaging/linux/Arch/PKGBUILD index 4197c2a5..3fa2fe0e 100644 --- a/packaging/linux/Arch/PKGBUILD +++ b/packaging/linux/Arch/PKGBUILD @@ -1,6 +1,13 @@ # Edit on github: https://github.com/LizardByte/Sunshine/blob/master/packaging/linux/Arch/PKGBUILD # Reference: https://wiki.archlinux.org/title/PKGBUILD +## options +: "${_run_unit_tests:=false}" # if set to true; unit tests will be executed post build; useful in CI +: "${_support_headless_testing:=false}" +: "${_use_cuda:=detect}" # nvenc + +: "${_commit:=@GITHUB_COMMIT@}" + pkgname='sunshine' pkgver=@PROJECT_VERSION@@SUNSHINE_SUB_VERSION@ pkgrel=1 @@ -41,7 +48,6 @@ makedepends=( 'appstream-glib' 'cmake' 'desktop-file-utils' - 'cuda' "gcc${_gcc_version}" 'git' 'make' @@ -50,17 +56,46 @@ makedepends=( ) optdepends=( - 'cuda: Nvidia GPU encoding support' 'libva-mesa-driver: AMD GPU encoding support' - 'xorg-server-xvfb: Virtual X server for headless testing' ) provides=() conflicts=() -source=("$pkgname::git+@GITHUB_CLONE_URL@#commit=@GITHUB_COMMIT@") +source=("$pkgname::git+@GITHUB_CLONE_URL@#commit=${_commit}") sha256sums=('SKIP') +# Options Handling +if [[ "${_use_cuda::1}" == "d" ]] && pacman -Qi cuda &> /dev/null; then + _use_cuda=true +fi + +if [[ "${_use_cuda::1}" == "t" ]]; then + makedepends+=('cuda') + optdepends+=( + 'cuda: Nvidia GPU encoding support' + ) +fi + +if [[ "${_support_headless_testing::1}" == "t" ]]; then + optdepends+=( + 'xorg-server-xvfb: Virtual X server for headless testing' + ) +fi + +# Ensure makedepends, checkdepends, optdepends are sorted +if [ -n "${makedepends+x}" ]; then + mapfile -t tmp_array < <(printf '%s\n' "${makedepends[@]}" | sort) + makedepends=("${tmp_array[@]}") + unset tmp_array +fi + +if [ -n "${optdepends+x}" ]; then + mapfile -t tmp_array < <(printf '%s\n' "${optdepends[@]}" | sort) + optdepends=("${tmp_array[@]}") + unset tmp_array +fi + prepare() { cd "$pkgname" git submodule update --recursive --init @@ -69,7 +104,7 @@ prepare() { build() { export BRANCH="@GITHUB_BRANCH@" export BUILD_VERSION="@BUILD_VERSION@" - export COMMIT="@GITHUB_COMMIT@" + export COMMIT="${_commit}" export CC="gcc-${_gcc_version}" export CXX="g++-${_gcc_version}" @@ -77,18 +112,31 @@ build() { export CFLAGS="${CFLAGS/-Werror=format-security/}" export CXXFLAGS="${CXXFLAGS/-Werror=format-security/}" - cmake \ - -S "$pkgname" \ - -B build \ - -Wno-dev \ - -D BUILD_DOCS=OFF \ - -D BUILD_WERROR=ON \ - -D CMAKE_INSTALL_PREFIX=/usr \ - -D SUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \ - -D SUNSHINE_ASSETS_DIR="share/sunshine" \ - -D SUNSHINE_PUBLISHER_NAME='LizardByte' \ - -D SUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev' \ - -D SUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support' + export MAKEFLAGS="${MAKEFLAGS:--j$(nproc)}" + + local _cmake_options=( + -S "$pkgname" + -B build + -Wno-dev + -D BUILD_DOCS=OFF + -D BUILD_WERROR=ON + -D CMAKE_INSTALL_PREFIX=/usr + -D SUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine + -D SUNSHINE_ASSETS_DIR="share/sunshine" + -D SUNSHINE_PUBLISHER_NAME='LizardByte' + -D SUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev' + -D SUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support' + ) + + if [[ "${_use_cuda::1}" != "t" ]]; then + _cmake_options+=(-DSUNSHINE_ENABLE_CUDA=OFF -DCUDA_FAIL_ON_MISSING=OFF) + fi + + if [[ "${_run_unit_tests::1}" != "t" ]]; then + _cmake_options+=(-DBUILD_TESTS=OFF) + fi + + cmake "${_cmake_options[@]}" appstreamcli validate "build/dev.lizardbyte.app.Sunshine.metainfo.xml" appstream-util validate "build/dev.lizardbyte.app.Sunshine.metainfo.xml" @@ -99,13 +147,19 @@ build() { } check() { - export CC="gcc-${_gcc_version}" - export CXX="g++-${_gcc_version}" + cd "${srcdir}/build" + ./sunshine --version - cd "${srcdir}/build/tests" - ./test_sunshine --gtest_color=yes + if [[ "${_run_unit_tests::1}" == "t" ]]; then + export CC="gcc-${_gcc_version}" + export CXX="g++-${_gcc_version}" + + cd "${srcdir}/build/tests" + ./test_sunshine --gtest_color=yes + fi } package() { + export MAKEFLAGS="${MAKEFLAGS:--j$(nproc)}" make -C build install DESTDIR="$pkgdir" } diff --git a/packaging/linux/Arch/sunshine.install b/packaging/linux/Arch/sunshine.install index 6b274cdf..008f75d3 100644 --- a/packaging/linux/Arch/sunshine.install +++ b/packaging/linux/Arch/sunshine.install @@ -1,5 +1,5 @@ do_setcap() { - setcap cap_sys_admin+p $(readlink -f $(which sunshine)) + setcap cap_sys_admin+p $(readlink -f usr/bin/sunshine) } do_udev_reload() { @@ -19,4 +19,3 @@ post_upgrade() { do_setcap do_udev_reload } -