Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmake/compile_definitions/linux.cmake
Original file line numberDiff line numberDiff line change
Expand Up@@ -223,6 +223,11 @@ if (${SUNSHINE_TRAY} EQUAL 0 AND SUNSHINE_REQUIRE_TRAY)
message(FATAL_ERROR "Tray icon is required")
endif()

pkg_check_modules(EVDEV libevdev REQUIRED)
include_directories(SYSTEM ${EVDEV_INCLUDE_DIRS})
link_directories(${EVDEV_LIBRARY_DIRS})
list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${EVDEV_LIBRARIES})

list(APPEND PLATFORM_TARGET_FILES
src/platform/linux/publish.cpp
src/platform/linux/graphics.h
Expand All@@ -241,13 +246,11 @@ list(APPEND PLATFORM_TARGET_FILES
list(APPEND PLATFORM_LIBRARIES
Boost::dynamic_linking
dl
evdev
numa
pulse
pulse-simple)

include_directories(
SYSTEM
/usr/include/libevdev-1.0
third-party/nv-codec-headers/include
third-party/glad/include)
164 changes: 164 additions & 0 deletions docker/fedora-39-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=fedora
ARG TAG=39
FROM ${BASE}:${TAG} AS sunshine-base

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=aarch64
ARG TUPLE=${TARGETARCH}-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# install build dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
dnf -y update
dnf -y install \
cmake-3.27.* \
gcc-"${TARGETARCH}"-linux-gnu-13.2.* \
gcc-c++-"${TARGETARCH}"-linux-gnu-13.2.* \
git-core \
nodejs \
pkgconf-pkg-config \
rpm-build \
wayland-devel \
wget \
which
dnf clean all
_DEPS

# install host dependencies
# hadolint ignore=DL3041
RUN <<_DEPS
#!/bin/bash
set -e
DNF=( dnf -y --installroot /mnt/cross --releasever "${TAG}" --forcearch "${TARGETARCH}" )
"${DNF[@]}" install \
filesystem
"${DNF[@]}" --setopt=tsflags=noscripts install \
$([[ "${TARGETARCH}" == x86_64 ]] && echo intel-mediasdk-devel) \
boost-devel-1.81.0* \
glibc-devel \
libappindicator-gtk3-devel \
libcap-devel \
libcurl-devel \
libdrm-devel \
libevdev-devel \
libnotify-devel \
libstdc++-devel \
libva-devel \
libvdpau-devel \
libX11-devel \
libxcb-devel \
libXcursor-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libXrandr-devel \
libXtst-devel \
mesa-libGL-devel \
miniupnpc-devel \
numactl-devel \
openssl-devel \
opus-devel \
pulseaudio-libs-devel \
wayland-devel
"${DNF[@]}" clean all
_DEPS

# todo - enable cuda once it's supported for gcc 13 and fedora 39
## install cuda
#WORKDIR /build/cuda
## versions: https://developer.nvidia.com/cuda-toolkit-archive
#ENV CUDA_VERSION="12.0.0"
#ENV CUDA_BUILD="525.60.13"
## hadolint ignore=SC3010
#RUN <<_INSTALL_CUDA
##!/bin/bash
#set -e
#cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
#cuda_suffix=""
#if [[ "${TARGETARCH}" == aarch64 ]]; then
# cuda_suffix="_sbsa"
#fi
#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 -q --show-progress -O ./cuda.run
#chmod a+x ./cuda.run
#./cuda.run --silent --toolkit --toolkitpath=/build/cuda --no-opengl-libs --no-man-page --no-drm
#rm ./cuda.run
#_INSTALL_CUDA

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# todo - add cmake argument back in for cuda support "-DCMAKE_CUDA_COMPILER:PATH=/build/cuda/bin/nvcc \"
# todo - re-enable "DSUNSHINE_ENABLE_CUDA"
RUN <<_MAKE
#!/bin/bash
set -e

cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${TARGETARCH}")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSROOT "/mnt/cross")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
CXXFLAGS="-isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/) -isystem $(echo /mnt/cross/usr/include/c++/[0-9]*/${TUPLE%%-*}-*/)" \
LDFLAGS="-L$(echo /mnt/cross/usr/lib/gcc/${TUPLE%%-*}-*/[0-9]*/)" \
PKG_CONFIG_LIBDIR=/mnt/cross/usr/lib64/pkgconfig:/mnt/cross/usr/share/pkgconfig \
PKG_CONFIG_SYSROOT_DIR=/mnt/cross \
PKG_CONFIG_SYSTEM_INCLUDE_PATH=/mnt/cross/usr/include \
PKG_CONFIG_SYSTEM_LIBRARY_PATH=/mnt/cross/usr/lib64

cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_RPM_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=OFF \
/build/sunshine
make -j "$(nproc)"
cpack -G RPM
_MAKE
161 changes: 161 additions & 0 deletions docker/ubuntu-22.04-cross.dockerfile
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1.4
# artifacts: true
# platforms: linux/amd64,linux/arm64/v8
# platforms_pr: linux/amd64
# no-cache-filters: sunshine-base,artifacts,sunshine
ARG BASE=ubuntu
ARG TAG=22.04
FROM ${BASE}:${TAG} AS sunshine-base

ENV DEBIAN_FRONTEND=noninteractive

FROM sunshine-base as sunshine-build

ARG TAG
ARG TARGETARCH=arm64
ARG TUPLE=aarch64-linux-gnu

ENV TAG=${TAG}
ENV TARGETARCH=${TARGETARCH}
ENV TUPLE=${TUPLE}

ARG BRANCH
ARG BUILD_VERSION
ARG COMMIT
# note: BUILD_VERSION may be blank

ENV BRANCH=${BRANCH}
ENV BUILD_VERSION=${BUILD_VERSION}
ENV COMMIT=${COMMIT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# install dependencies
RUN --mount=type=cache,target=/var/cache/apt/archives,mode=0755,id=ubuntu-22.04-apt <<_DEPS
#!/bin/bash
set -e

# Keep downloaded archives in the cache.
rm /etc/apt/apt.conf.d/docker-clean

source /etc/lsb-release
dpkg --add-architecture "${TARGETARCH}"
sed -i "s/^deb /deb [arch=$(dpkg --print-architecture)] /" /etc/apt/sources.list

cat > /etc/apt/sources.list.d/ports.list <<_SOURCES
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME} main restricted universe multiverse
deb [arch=${TARGETARCH}] http://ports.ubuntu.com/ ${DISTRIB_CODENAME}-updates main restricted universe multiverse
_SOURCES

apt-get update -y
apt-get install -y --no-install-recommends \
ca-certificates \
cmake=3.22.* \
gcc-"${TUPLE}" \
g++-"${TUPLE}" \
git \
libwayland-bin \
nvidia-cuda-toolkit \
pkgconf \
wget \
$([[ "${TARGETARCH}" == amd64 ]] && echo libmfx-dev:"${TARGETARCH}") \
libayatana-appindicator3-dev:"${TARGETARCH}" \
libavdevice-dev:"${TARGETARCH}" \
libboost-filesystem-dev:"${TARGETARCH}"=1.74.* \
libboost-locale-dev:"${TARGETARCH}"=1.74.* \
libboost-log-dev:"${TARGETARCH}"=1.74.* \
libboost-program-options-dev:"${TARGETARCH}"=1.74.* \
libcap-dev:"${TARGETARCH}" \
libcurl4-openssl-dev:"${TARGETARCH}" \
libdrm-dev:"${TARGETARCH}" \
libevdev-dev:"${TARGETARCH}" \
libminiupnpc-dev:"${TARGETARCH}" \
libnotify-dev:"${TARGETARCH}" \
libnuma-dev:"${TARGETARCH}" \
libopus-dev:"${TARGETARCH}" \
libpulse-dev:"${TARGETARCH}" \
libssl-dev:"${TARGETARCH}" \
libva-dev:"${TARGETARCH}" \
libvdpau-dev:"${TARGETARCH}" \
libwayland-dev:"${TARGETARCH}" \
libx11-dev:"${TARGETARCH}" \
libxcb-shm0-dev:"${TARGETARCH}" \
libxcb-xfixes0-dev:"${TARGETARCH}" \
libxcb1-dev:"${TARGETARCH}" \
libxfixes-dev:"${TARGETARCH}" \
libxrandr-dev:"${TARGETARCH}" \
libxtst-dev:"${TARGETARCH}" \
nvidia-cuda-dev:"${TARGETARCH}"

rm -rf /var/lib/apt/lists/*
_DEPS

#Install Node
# hadolint ignore=SC1091
RUN <<_INSTALL_NODE
#!/bin/bash
set -e
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source "$HOME/.nvm/nvm.sh"
nvm install 20.9.0
nvm use 20.9.0
_INSTALL_NODE

# copy repository
WORKDIR /build/sunshine/
COPY --link .. .

# setup build directory
WORKDIR /build/sunshine/build

# cmake and cpack
# hadolint ignore=SC1091
RUN <<_MAKE
#!/bin/bash
set -e

# Set Node version
source "$HOME/.nvm/nvm.sh"
nvm use 20.9.0

# Configure build
cat > toolchain.cmake <<_TOOLCHAIN
set(CMAKE_ASM_COMPILER "${TUPLE}-gcc")
set(CMAKE_ASM-ATT_COMPILER "${TUPLE}-gcc")
set(CMAKE_C_COMPILER "${TUPLE}-gcc")
set(CMAKE_CXX_COMPILER "${TUPLE}-g++")
set(CMAKE_AR "${TUPLE}-gcc-ar" CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB "${TUPLE}-gcc-ranlib" CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "$(case ${TARGETARCH} in
armhf) echo armv7l ;;
arm64) echo aarch64 ;;
ppc64el) echo ppc64le ;;
x86_64) echo amd64 ;;
*) echo ${TARGETARCH} ;;
esac)")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_TOOLCHAIN

export \
PKG_CONFIG_LIBDIR=/usr/lib/"${TUPLE}"/pkgconfig:/usr/share/pkgconfig

# Actually build
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_CUDA_COMPILER:PATH=/usr/bin/nvcc \
-DCMAKE_CUDA_HOST_COMPILER:PATH="${TUPLE}-g++" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE="${TARGETARCH}" \
-DSUNSHINE_ASSETS_DIR=share/sunshine \
-DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \
-DSUNSHINE_ENABLE_WAYLAND=ON \
-DSUNSHINE_ENABLE_X11=ON \
-DSUNSHINE_ENABLE_DRM=ON \
-DSUNSHINE_ENABLE_CUDA=ON \
/build/sunshine
make -j "$(nproc)"
cpack -G DEB
_MAKE