Skip to content

Commit 33f5510

Browse files
build(linux): enable fedora 42
Co-Authored-By: Johnny Arcitec <[email protected]>
1 parent 39916a7 commit 33f5510

File tree

3 files changed

+128
-34
lines changed

3 files changed

+128
-34
lines changed

packaging/linux/fedora/Sunshine.spec

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ Source0: tarball.tar.gz
1717

1818
# BuildRequires: boost-devel >= 1.86.0
1919
BuildRequires: cmake >= 3.25.0
20-
BuildRequires: gcc
21-
BuildRequires: gcc-c++
2220
BuildRequires: libayatana-appindicator3-devel
2321
BuildRequires: libcap-devel
2422
BuildRequires: libcurl-devel
@@ -54,11 +52,24 @@ BuildRequires: which
5452
BuildRequires: xorg-x11-server-Xvfb
5553

5654
# Conditional BuildRequires for cuda-gcc based on Fedora version
57-
%if 0%{?fedora} >= 40
58-
# this package conflicts with gcc on f39
59-
BuildRequires: cuda-gcc-c++
55+
%if 0%{?fedora} >= 40 && 0%{?fedora} <= 41
56+
# this package conflicts with gcc on f39, and doesn't work on f42
57+
# BuildRequires: cuda-gcc-c++
58+
BuildRequires: gcc13
59+
BuildRequires: gcc13-c++
60+
%global gcc_version 13
61+
%global cuda_version 12.6.3
62+
%global cuda_build 560.35.05
63+
%elif %{?fedora} >= 42
64+
BuildRequires: gcc14
65+
BuildRequires: gcc14-c++
66+
%global gcc_version 14
67+
%global cuda_version 12.8.1
68+
%global cuda_build 570.124.06
6069
%endif
6170

71+
%global cuda_dir %{_builddir}/cuda
72+
6273
Requires: libcap >= 2.22
6374
Requires: libcurl >= 7.0
6475
Requires: libdrm > 2.4.97
@@ -88,20 +99,14 @@ ls -a %{_builddir}/Sunshine
8899
%autopatch -p1
89100

90101
%build
102+
# exit on error
103+
set -e
104+
91105
# Detect the architecture and Fedora version
92106
architecture=$(uname -m)
93-
fedora_version=%{fedora}
94107

95108
cuda_supported_architectures=("x86_64" "aarch64")
96109

97-
# set cuda_version based on Fedora version
98-
case "$fedora_version" in
99-
*)
100-
cuda_version="12.6.3"
101-
cuda_build="560.35.05"
102-
;;
103-
esac
104-
105110
# prepare CMAKE args
106111
cmake_args=(
107112
"-B=%{_builddir}/Sunshine/build"
@@ -121,27 +126,23 @@ cmake_args=(
121126
"-DSUNSHINE_PUBLISHER_ISSUE_URL=https://app.lizardbyte.dev/support"
122127
)
123128

129+
export CC=gcc-%{gcc_version}
130+
export CXX=g++-%{gcc_version}
131+
124132
function install_cuda() {
125133
# check if we need to install cuda
126-
if [ -f "%{_builddir}/cuda/bin/nvcc" ]; then
134+
if [ -f "%{cuda_dir}/bin/nvcc" ]; then
127135
echo "cuda already installed"
128136
return
129137
fi
130138

131-
if [ "$fedora_version" -ge 40 ]; then
132-
# update environment variables for CUDA, necessary when using cuda-gcc-c++
133-
export NVCC_PREPEND_FLAGS='-ccbin /usr/bin/g++-13'
134-
export PATH=/usr/bin/cuda:"%{_builddir}/cuda/bin:${PATH}"
135-
export LD_LIBRARY_PATH="%{_builddir}/cuda/lib64:${LD_LIBRARY_PATH}"
136-
fi
137-
138139
local cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
139140
local cuda_suffix=""
140141
if [ "$architecture" == "aarch64" ]; then
141142
local cuda_suffix="_sbsa"
142143
fi
143144

144-
local url="${cuda_prefix}${cuda_version}/local_installers/cuda_${cuda_version}_${cuda_build}_linux${cuda_suffix}.run"
145+
local url="${cuda_prefix}%{cuda_version}/local_installers/cuda_%{cuda_version}_%{cuda_build}_linux${cuda_suffix}.run"
145146
echo "cuda url: ${url}"
146147
wget \
147148
"$url" \
@@ -157,23 +158,38 @@ function install_cuda() {
157158
--override \
158159
--silent \
159160
--toolkit \
160-
--toolkitpath="%{_builddir}/cuda"
161+
--toolkitpath="%{cuda_dir}"
161162
rm "%{_builddir}/cuda.run"
163+
164+
# we need to patch math_functions.h on fedora 42
165+
# see https://forums.developer.nvidia.com/t/error-exception-specification-is-incompatible-for-cospi-sinpi-cospif-sinpif-with-glibc-2-41/323591/3
166+
if [ "%{?fedora}" -eq 42 ]; then
167+
echo "Original math_functions.h:"
168+
find "%{cuda_dir}" -name math_functions.h -exec cat {} \;
169+
170+
# Apply the patch
171+
patch -p2 \
172+
--backup \
173+
--directory="%{cuda_dir}" \
174+
--verbose \
175+
< "%{_builddir}/Sunshine/packaging/linux/fedora/patches/f42/${architecture}/01-math_functions.patch"
176+
fi
162177
}
163178

164-
# we need to clear these flags to avoid linkage errors with cuda-gcc-c++
165-
export CFLAGS=""
166-
export CXXFLAGS=""
167-
export FFLAGS=""
168-
export FCFLAGS=""
169-
export LDFLAGS=""
170-
export CC=gcc-13
171-
export CXX=g++-13
179+
if [ -n "%{cuda_version}" ] && [[ " ${cuda_supported_architectures[@]} " =~ " ${architecture} " ]]; then
180+
# we need to clear these flags to avoid linkage errors with cuda-gcc-c++
181+
export CFLAGS=""
182+
export CXXFLAGS=""
183+
export FFLAGS=""
184+
export FCFLAGS=""
185+
export LDFLAGS=""
172186

173-
if [ -n "$cuda_version" ] && [[ " ${cuda_supported_architectures[@]} " =~ " ${architecture} " ]]; then
174187
install_cuda
175188
cmake_args+=("-DSUNSHINE_ENABLE_CUDA=ON")
176-
cmake_args+=("-DCMAKE_CUDA_COMPILER:PATH=%{_builddir}/cuda/bin/nvcc")
189+
cmake_args+=("-DCMAKE_CUDA_COMPILER:PATH=%{cuda_dir}/bin/nvcc")
190+
cmake_args+=("-DCMAKE_CUDA_HOST_COMPILER=gcc-%{gcc_version}")
191+
else
192+
cmake_args+=("-DSUNSHINE_ENABLE_CUDA=OFF")
177193
fi
178194

179195
# setup the version
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
diff '--color=auto' -ur a/cuda/targets/sbsa-linux/include/crt/math_functions.h b/cuda/targets/sbsa-linux/include/crt/math_functions.h
2+
--- a/cuda/targets/sbsa-linux/include/crt/math_functions.h 2024-08-23 00:25:39.000000000 +0200
3+
+++ b/cuda/targets/sbsa-linux/include/crt/math_functions.h 2025-02-17 01:19:44.270292640 +0100
4+
@@ -2553,7 +2553,7 @@
5+
*
6+
* \note_accuracy_double
7+
*/
8+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double sinpi(double x);
9+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double sinpi(double x) noexcept (true);
10+
/**
11+
* \ingroup CUDA_MATH_SINGLE
12+
* \brief Calculate the sine of the input argument
13+
@@ -2576,7 +2576,7 @@
14+
*
15+
* \note_accuracy_single
16+
*/
17+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float sinpif(float x);
18+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float sinpif(float x) noexcept (true);
19+
/**
20+
* \ingroup CUDA_MATH_DOUBLE
21+
* \brief Calculate the cosine of the input argument
22+
@@ -2598,7 +2598,7 @@
23+
*
24+
* \note_accuracy_double
25+
*/
26+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double cospi(double x);
27+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double cospi(double x) noexcept (true);
28+
/**
29+
* \ingroup CUDA_MATH_SINGLE
30+
* \brief Calculate the cosine of the input argument
31+
@@ -2620,7 +2620,7 @@
32+
*
33+
* \note_accuracy_single
34+
*/
35+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float cospif(float x);
36+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float cospif(float x) noexcept (true);
37+
/**
38+
* \ingroup CUDA_MATH_DOUBLE
39+
* \brief Calculate the sine and cosine of the first input argument
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
diff '--color=auto' -ur a/cuda/targets/x86_64-linux/include/crt/math_functions.h b/cuda/targets/x86_64-linux/include/crt/math_functions.h
2+
--- a/cuda/targets/x86_64-linux/include/crt/math_functions.h 2024-08-23 00:25:39.000000000 +0200
3+
+++ b/cuda/targets/x86_64-linux/include/crt/math_functions.h 2025-02-17 01:19:44.270292640 +0100
4+
@@ -2553,7 +2553,7 @@
5+
*
6+
* \note_accuracy_double
7+
*/
8+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double sinpi(double x);
9+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double sinpi(double x) noexcept (true);
10+
/**
11+
* \ingroup CUDA_MATH_SINGLE
12+
* \brief Calculate the sine of the input argument
13+
@@ -2576,7 +2576,7 @@
14+
*
15+
* \note_accuracy_single
16+
*/
17+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float sinpif(float x);
18+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float sinpif(float x) noexcept (true);
19+
/**
20+
* \ingroup CUDA_MATH_DOUBLE
21+
* \brief Calculate the cosine of the input argument
22+
@@ -2598,7 +2598,7 @@
23+
*
24+
* \note_accuracy_double
25+
*/
26+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double cospi(double x);
27+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double cospi(double x) noexcept (true);
28+
/**
29+
* \ingroup CUDA_MATH_SINGLE
30+
* \brief Calculate the cosine of the input argument
31+
@@ -2620,7 +2620,7 @@
32+
*
33+
* \note_accuracy_single
34+
*/
35+
-extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float cospif(float x);
36+
+extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float cospif(float x) noexcept (true);
37+
/**
38+
* \ingroup CUDA_MATH_DOUBLE
39+
* \brief Calculate the sine and cosine of the first input argument

0 commit comments

Comments
 (0)