Unverified Commit 07bfc8e6 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

Merge pull request #214799 from devusb/sunshine

parents 3d27f7f8 34b27d45
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
{ lib, stdenv, fetchFromGitHub }:

stdenv.mkDerivation rec {
  pname = "amf-headers";
  version = "1.4.29";

  src = fetchFromGitHub {
    owner = "GPUOpen-LibrariesAndSDKs";
    repo = "AMF";
    rev = "v${version}";
    sha256 = "sha256-gu8plGUUVE/De2bRjTUN8JKsmj/0r/IsqhMpln1DZGU=";
  };

  installPhase = ''
    mkdir -p $out/include/AMF
    cp -r amf/public/include/* $out/include/AMF
  '';

  meta = with lib; {
    description = "Headers for The Advanced Media Framework (AMF)";
    homepage = "https://github.com/GPUOpen-LibrariesAndSDKs/AMF";
    license = licenses.mit;
    maintainers = with maintainers; [ devusb ];
    platforms = platforms.unix;
  };
}
+35 −11
Original line number Diff line number Diff line
{ lib
, stdenv
, callPackage
, fetchFromGitHub
, fetchurl
, autoPatchelfHook
, makeWrapper
, buildNpmPackage
, cmake
, avahi
@@ -11,7 +14,7 @@
, libxcb
, openssl
, libopus
, ffmpeg-full
, ffmpeg_5-full
, boost
, pkg-config
, libdrm
@@ -23,19 +26,29 @@
, libva
, libvdpau
, numactl
, amf-headers
, svt-av1
, vulkan-loader
, cudaSupport ? false
, cudaPackages ? {}
}:

let
  libcbs = callPackage ./libcbs.nix { };
  # get cmake file used to find external ffmpeg from previous sunshine version
  findFfmpeg = fetchurl {
    url = "https://raw.githubusercontent.com/LizardByte/Sunshine/6702802829869547708dfec98db5b8cbef39be89/cmake/FindFFMPEG.cmake";
    sha256 = "sha256:1hl3sffv1z8ghdql5y9flk41v74asvh23y6jmaypll84f1s6k1xa";
  };
in
stdenv.mkDerivation rec {
  pname = "sunshine";
  version = "0.16.0";
  version = "0.18.4";

  src = fetchFromGitHub {
    owner = "LizardByte";
    repo = "Sunshine";
    rev = "v${version}";
    sha256 = "sha256-o489IPza1iLoe74Onn2grP5oeNy0ZYdrvBoMEWlbwCE=";
    sha256 = "sha256-nPUWBka/fl1oTB0vTv6qyL7EHh7ptFnxwfV/jYtloTc=";
    fetchSubmodules = true;
  };

@@ -46,8 +59,7 @@ stdenv.mkDerivation rec {
  ui = buildNpmPackage {
    inherit src version;
    pname = "sunshine-ui";
    sourceRoot = "source/src_assets/common/assets/web";
    npmDepsHash = "sha256-fg/turcpPMHUs6GBwSoJl4Pxua/lGfCA1RzT1R5q53M=";
    npmDepsHash = "sha256-k8Vfi/57AbGxYFPYSNh8bv4KqHnZjk3BDp8SJQHzuR8=";

    dontNpmBuild = true;

@@ -66,13 +78,15 @@ stdenv.mkDerivation rec {
    cmake
    pkg-config
    autoPatchelfHook
    makeWrapper
  ] ++ lib.optionals cudaSupport [
    cudaPackages.autoAddOpenGLRunpathHook
  ];

  buildInputs = [
    libcbs
    avahi
    ffmpeg-full
    ffmpeg_5-full
    libevdev
    libpulseaudio
    xorg.libX11
@@ -94,6 +108,8 @@ stdenv.mkDerivation rec {
    libvdpau
    numactl
    mesa
    amf-headers
    svt-av1
  ] ++ lib.optionals cudaSupport [
    cudaPackages.cudatoolkit
  ];
@@ -117,16 +133,24 @@ stdenv.mkDerivation rec {
  ];

  postPatch = ''
    # Don't force the need for a static boost, fix hardcoded libevdev path
    # fix hardcoded libevdev path
    substituteInPlace CMakeLists.txt \
      --replace 'set(Boost_USE_STATIC_LIBS ON)' '# set(Boost_USE_STATIC_LIBS ON)' \
      --replace '/usr/include/libevdev-1.0' '${libevdev}/include/libevdev-1.0'

    # add FindFFMPEG to source tree
    cp ${findFfmpeg} cmake/FindFFMPEG.cmake
  '';

  preBuild = ''
    # copy node_modules where they can be picked up by build
    mkdir -p ../src_assets/common/assets/web/node_modules
    cp -r ${ui}/node_modules/* ../src_assets/common/assets/web/node_modules
    mkdir -p ../node_modules
    cp -r ${ui}/node_modules/* ../node_modules
  '';

  # allow Sunshine to find libvulkan
  postFixup = lib.optionalString cudaSupport ''
    wrapProgram $out/bin/sunshine \
      --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ vulkan-loader ]}
  '';

  meta = with lib; {
+56 −32
Original line number Diff line number Diff line
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fad60ef..64b68ae 100644
index 1842c67..8afd0e9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -212,6 +212,8 @@ else()
@@ -280,6 +280,8 @@ else()
         set(WAYLAND_FOUND OFF)
     endif()
 
@@ -11,23 +11,30 @@ index fad60ef..64b68ae 100644
     if(X11_FOUND)
         add_compile_definitions(SUNSHINE_BUILD_X11)
         include_directories(${X11_INCLUDE_DIR})
@@ -372,35 +374,6 @@ set(SUNSHINE_TARGET_FILES
 
 set_source_files_properties(src/upnp.cpp PROPERTIES COMPILE_FLAGS -Wno-pedantic)
@@ -451,51 +453,12 @@ set_source_files_properties(src/upnp.cpp PROPERTIES COMPILE_FLAGS -Wno-pedantic)
 set_source_files_properties(third-party/nanors/rs.c
         PROPERTIES COMPILE_FLAGS "-include deps/obl/autoshim.h -ftree-vectorize")
 
-# Pre-compiled binaries
-if(WIN32)
-    set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-windows-x86_64")
-	set(FFMPEG_PLATFORM_LIBRARIES mfplat ole32 strmiids mfuuid)
-    set(FFMPEG_PLATFORM_LIBRARIES mfplat ole32 strmiids mfuuid mfx)
-elseif(APPLE)
-    if (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-macos-aarch64")
-    else()
-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-macos-x86_64")
-    endif()
-else()
-    set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
-    if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-aarch64")
-    else()
-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-x86_64")
-        list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
-        set(CPACK_DEB_PLATFORM_PACKAGE_DEPENDS "libmfx1,")
-        set(CPACK_RPM_PLATFORM_PACKAGE_REQUIRES "intel-mediasdk >= 22.3.0,")
-    endif()
-	set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
-endif()
-set(FFMPEG_INCLUDE_DIRS
-        ${FFMPEG_PREPARED_BINARIES}/include)
@@ -38,6 +45,8 @@ index fad60ef..64b68ae 100644
-set(FFMPEG_LIBRARIES
-        ${FFMPEG_PREPARED_BINARIES}/lib/libavcodec.a
-        ${FFMPEG_PREPARED_BINARIES}/lib/libavutil.a
-        ${FFMPEG_PREPARED_BINARIES}/lib/libcbs.a
-        ${FFMPEG_PREPARED_BINARIES}/lib/libSvtAv1Enc.a
-        ${FFMPEG_PREPARED_BINARIES}/lib/libswscale.a
-        ${FFMPEG_PREPARED_BINARIES}/lib/libx264.a
-        ${FFMPEG_PREPARED_BINARIES}/lib/libx265.a
@@ -47,3 +56,18 @@ index fad60ef..64b68ae 100644
 include_directories(
         ${CMAKE_CURRENT_SOURCE_DIR}
         ${CMAKE_CURRENT_SOURCE_DIR}/third-party
         ${CMAKE_CURRENT_SOURCE_DIR}/third-party/moonlight-common-c/enet/include
         ${CMAKE_CURRENT_SOURCE_DIR}/third-party/nanors
         ${CMAKE_CURRENT_SOURCE_DIR}/third-party/nanors/deps/obl
-        ${FFMPEG_INCLUDE_DIRS}
         ${PLATFORM_INCLUDE_DIRS}
 )
 
@@ -529,6 +492,7 @@ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
         ${CMAKE_THREAD_LIBS_INIT}
         enet
         opus
+        cbs
         ${FFMPEG_LIBRARIES}
         ${Boost_LIBRARIES}
         ${OPENSSL_LIBRARIES}
+48 −0
Original line number Diff line number Diff line
{ stdenv
, fetchFromGitHub
, cmake
, nasm
}:
stdenv.mkDerivation {
  pname = "libcbs";
  version = "unstable-2022-02-07";

  src = fetchFromGitHub {
    owner = "LizardByte";
    repo = "build-deps";
    # repo is not versioned -- used latest commit combined with sunshine release
    rev = "d6e889188ca10118d769ee1ee3cddf9cf485642b";
    fetchSubmodules = true;
    sha256 = "sha256-6xQDJey5JrZXyZxS/yhUBvFi6UD5MsQ3uVtUFrG09Vc=";
  };

  nativeBuildInputs = [
    cmake
    nasm
  ];

  # modify paths to allow patches to be applied directly by derivation
  prePatch = ''
    substituteInPlace ffmpeg_patches/cbs/* \
      --replace 'a/libavcodec' 'a/ffmpeg_sources/ffmpeg/libavcodec' \
      --replace 'b/libavcodec' 'b/ffmpeg_sources/ffmpeg/libavcodec' \
      --replace 'a/libavutil' 'a/ffmpeg_sources/ffmpeg/libavutil' \
      --replace 'b/libavutil' 'b/ffmpeg_sources/ffmpeg/libavutil'

    substituteInPlace cmake/ffmpeg_cbs.cmake \
      --replace '--enable-static' '--enable-shared --enable-pic' \
      --replace 'add_library(cbs' 'add_library(cbs SHARED' \
      --replace 'libcbs.a' 'libcbs.so'
  '';

  patches = [
    "ffmpeg_patches/cbs/01-explicit-intmath.patch"
    "ffmpeg_patches/cbs/02-include-cbs-config.patch"
    "ffmpeg_patches/cbs/03-remove-register.patch"
    "ffmpeg_patches/cbs/04-size-specifier.patch"
  ];

  CFLAGS = [
    "-Wno-format-security"
  ];
}
+26 −20
Original line number Diff line number Diff line
{
  "name": "web",
  "name": "Sunshine",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {
    "": {
      "dependencies": {
        "@fortawesome/fontawesome-free": "6.2.0",
        "bootstrap": "5.0.0",
        "@fortawesome/fontawesome-free": "6.2.1",
        "bootstrap": "5.2.3",
        "vue": "2.6.12"
      }
    },
    "node_modules/@fortawesome/fontawesome-free": {
      "version": "6.2.0",
      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.0.tgz",
      "integrity": "sha512-CNR7qRIfCwWHNN7FnKUniva94edPdyQzil/zCwk3v6k4R6rR2Fr8i4s3PM7n/lyfPA6Zfko9z5WDzFxG9SW1uQ==",
      "version": "6.2.1",
      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz",
      "integrity": "sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A==",
      "hasInstallScript": true,
      "engines": {
        "node": ">=6"
@@ -30,15 +30,21 @@
      }
    },
    "node_modules/bootstrap": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0.tgz",
      "integrity": "sha512-tmhPET9B9qCl8dCofvHeiIhi49iBt0EehmIsziZib65k1erBW1rHhj2s/2JsuQh5Pq+xz2E9bEbzp9B7xHG+VA==",
      "funding": {
      "version": "5.2.3",
      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
      "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/twbs"
        },
        {
          "type": "opencollective",
          "url": "https://opencollective.com/bootstrap"
      },
        }
      ],
      "peerDependencies": {
        "@popperjs/core": "^2.9.2"
        "@popperjs/core": "^2.11.6"
      }
    },
    "node_modules/vue": {
@@ -49,9 +55,9 @@
  },
  "dependencies": {
    "@fortawesome/fontawesome-free": {
      "version": "6.2.0",
      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.0.tgz",
      "integrity": "sha512-CNR7qRIfCwWHNN7FnKUniva94edPdyQzil/zCwk3v6k4R6rR2Fr8i4s3PM7n/lyfPA6Zfko9z5WDzFxG9SW1uQ=="
      "version": "6.2.1",
      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz",
      "integrity": "sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A=="
    },
    "@popperjs/core": {
      "version": "2.11.6",
@@ -60,9 +66,9 @@
      "peer": true
    },
    "bootstrap": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0.tgz",
      "integrity": "sha512-tmhPET9B9qCl8dCofvHeiIhi49iBt0EehmIsziZib65k1erBW1rHhj2s/2JsuQh5Pq+xz2E9bEbzp9B7xHG+VA==",
      "version": "5.2.3",
      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
      "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
      "requires": {}
    },
    "vue": {
Loading