%global build_timestamp %(date +"%Y%m%d") # use sed to replace these values %global build_version 0 %global branch master %global commit 4f3d50a2ba5871520e2904eb91d9dc9c5b7db790 %undefine _hardened_build Name: Sunshine Version: %{build_version} Release: 1%{?dist} Summary: Self-hosted game stream host for Moonlight. License: GPLv3-only URL: https://github.com/LizardByte/Sunshine Source0: tarball.tar.gz # BuildRequires: boost-devel >= 1.86.0 BuildRequires: cmake >= 3.25.0 BuildRequires: libayatana-appindicator3-devel BuildRequires: libcap-devel BuildRequires: libcurl-devel BuildRequires: libdrm-devel BuildRequires: libevdev-devel BuildRequires: libgudev BuildRequires: libnotify-devel BuildRequires: libva-devel BuildRequires: libX11-devel BuildRequires: libxcb-devel BuildRequires: libXcursor-devel BuildRequires: libXfixes-devel BuildRequires: libXi-devel BuildRequires: libXinerama-devel BuildRequires: libXrandr-devel BuildRequires: libXtst-devel BuildRequires: git BuildRequires: mesa-libGL-devel BuildRequires: miniupnpc-devel BuildRequires: npm BuildRequires: numactl-devel BuildRequires: openssl-devel BuildRequires: opus-devel BuildRequires: pulseaudio-libs-devel BuildRequires: rpm-build BuildRequires: systemd-udev BuildRequires: systemd-rpm-macros %{?sysusers_requires_compat} BuildRequires: wget BuildRequires: which # for unit tests BuildRequires: xorg-x11-server-Xvfb # Conditional BuildRequires for cuda-gcc based on Fedora version %if 0%{?fedora} >= 40 && 0%{?fedora} <= 41 BuildRequires: gcc13 BuildRequires: gcc13-c++ %global gcc_version 13 %global cuda_version 12.6.3 %global cuda_build 560.35.05 %elif %{?fedora} >= 42 BuildRequires: gcc14 BuildRequires: gcc14-c++ %global gcc_version 14 %global cuda_version 12.8.1 %global cuda_build 570.124.06 %endif %global cuda_dir %{_builddir}/cuda Requires: libcap >= 2.22 Requires: libcurl >= 7.0 Requires: libdrm > 2.4.97 Requires: libevdev >= 1.5.6 Requires: libopusenc >= 0.2.1 Requires: libva >= 2.14.0 Requires: libwayland-client >= 1.20.0 Requires: libX11 >= 1.7.3.1 Requires: miniupnpc >= 2.2.4 Requires: numactl-libs >= 2.0.14 Requires: openssl >= 3.0.2 Requires: pulseaudio-libs >= 10.0 Requires: libayatana-appindicator3 >= 0.5.3 %description Self-hosted game stream host for Moonlight. %prep # extract tarball to current directory mkdir -p %{_builddir}/Sunshine tar -xzf %{SOURCE0} -C %{_builddir}/Sunshine # list directory ls -a %{_builddir}/Sunshine # patches %autopatch -p1 %build # exit on error set -e # Detect the architecture and Fedora version architecture=$(uname -m) cuda_supported_architectures=("x86_64" "aarch64") # prepare CMAKE args cmake_args=( "-B=%{_builddir}/Sunshine/build" "-G=Unix Makefiles" "-S=." "-DBUILD_DOCS=OFF" "-DBUILD_WERROR=OFF" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=%{_prefix}" "-DSUNSHINE_ASSETS_DIR=%{_datadir}/sunshine" "-DSUNSHINE_EXECUTABLE_PATH=%{_bindir}/sunshine" "-DSUNSHINE_ENABLE_WAYLAND=ON" "-DSUNSHINE_ENABLE_X11=ON" "-DSUNSHINE_ENABLE_DRM=ON" "-DSUNSHINE_PUBLISHER_NAME=LizardByte" "-DSUNSHINE_PUBLISHER_WEBSITE=https://app.lizardbyte.dev" "-DSUNSHINE_PUBLISHER_ISSUE_URL=https://app.lizardbyte.dev/support" ) export CC=gcc-%{gcc_version} export CXX=g++-%{gcc_version} function install_cuda() { # check if we need to install cuda if [ -f "%{cuda_dir}/bin/nvcc" ]; then echo "cuda already installed" return fi local cuda_prefix="https://developer.download.nvidia.com/compute/cuda/" local cuda_suffix="" if [ "$architecture" == "aarch64" ]; then local cuda_suffix="_sbsa" fi local url="${cuda_prefix}%{cuda_version}/local_installers/cuda_%{cuda_version}_%{cuda_build}_linux${cuda_suffix}.run" echo "cuda url: ${url}" wget \ "$url" \ --progress=bar:force:noscroll \ --retry-connrefused \ --tries=3 \ -q -O "%{_builddir}/cuda.run" chmod a+x "%{_builddir}/cuda.run" "%{_builddir}/cuda.run" \ --no-drm \ --no-man-page \ --no-opengl-libs \ --override \ --silent \ --toolkit \ --toolkitpath="%{cuda_dir}" rm "%{_builddir}/cuda.run" # we need to patch math_functions.h on fedora 42 # see https://forums.developer.nvidia.com/t/error-exception-specification-is-incompatible-for-cospi-sinpi-cospif-sinpif-with-glibc-2-41/323591/3 if [ "%{?fedora}" -eq 42 ]; then echo "Original math_functions.h:" find "%{cuda_dir}" -name math_functions.h -exec cat {} \; # Apply the patch patch -p2 \ --backup \ --directory="%{cuda_dir}" \ --verbose \ < "%{_builddir}/Sunshine/packaging/linux/fedora/patches/f42/${architecture}/01-math_functions.patch" fi } if [ -n "%{cuda_version}" ] && [[ " ${cuda_supported_architectures[@]} " =~ " ${architecture} " ]]; then install_cuda cmake_args+=("-DSUNSHINE_ENABLE_CUDA=ON") cmake_args+=("-DCMAKE_CUDA_COMPILER:PATH=%{cuda_dir}/bin/nvcc") cmake_args+=("-DCMAKE_CUDA_HOST_COMPILER=gcc-%{gcc_version}") else cmake_args+=("-DSUNSHINE_ENABLE_CUDA=OFF") fi # setup the version export BRANCH=%{branch} export BUILD_VERSION=v%{build_version} export COMMIT=%{commit} # cmake cd %{_builddir}/Sunshine echo "cmake args:" echo "${cmake_args[@]}" cmake "${cmake_args[@]}" make -j$(nproc) -C "%{_builddir}/Sunshine/build" %check # run tests cd %{_builddir}/Sunshine/build xvfb-run ./tests/test_sunshine %install cd %{_builddir}/Sunshine/build %make_install # Add modules-load configuration # load the uhid module in initramfs even if it doesn't detect the module as being used during dracut # which must be run every time a new kernel is installed install -D -m 0644 /dev/stdin %{buildroot}/usr/lib/modules-load.d/uhid.conf <