summary refs log tree commit diff
path: root/pkgs/tools/X11/xpra
diff options
context:
space:
mode:
authorZhaofeng Li <hello@zhaofeng.li>2021-05-24 22:07:52 -0700
committerZhaofeng Li <hello@zhaofeng.li>2021-05-28 17:43:20 -0700
commit80e86f8871e3d4e328f5185e98cefa44269fc474 (patch)
tree6ea121a897d1918bf7bc7ff56a37ee6aebf0a2d7 /pkgs/tools/X11/xpra
parent13f114593bb7796010fccaffbdb0686852a1de27 (diff)
downloadnixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.tar
nixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.tar.gz
nixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.tar.bz2
nixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.tar.lz
nixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.tar.xz
nixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.tar.zst
nixpkgs-80e86f8871e3d4e328f5185e98cefa44269fc474.zip
xpra: Add NVENC support
Diffstat (limited to 'pkgs/tools/X11/xpra')
-rw-r--r--pkgs/tools/X11/xpra/default.nix22
-rw-r--r--pkgs/tools/X11/xpra/nvenc.pc11
2 files changed, 28 insertions, 5 deletions
diff --git a/pkgs/tools/X11/xpra/default.nix b/pkgs/tools/X11/xpra/default.nix
index 8fd0cf016bf..c3cea1ed061 100644
--- a/pkgs/tools/X11/xpra/default.nix
+++ b/pkgs/tools/X11/xpra/default.nix
@@ -1,12 +1,13 @@
 { lib
 , fetchurl
 , fetchpatch
-, substituteAll, python3, pkg-config, writeText
+, substituteAll, python3, pkg-config, runCommand, writeText
 , xorg, gtk3, glib, pango, cairo, gdk-pixbuf, atk, pandoc
 , wrapGAppsHook, xorgserver, getopt, xauth, util-linux, which
 , ffmpeg, x264, libvpx, libwebp, x265, librsvg
 , libfakeXinerama
 , gst_all_1, pulseaudio, gobject-introspection
+, withNvenc ? false, cudatoolkit, nv-codec-headers-10, nvidia_x11 ? null
 , pam }:
 
 with lib;
@@ -34,6 +35,13 @@ let
     EndSection
   '';
 
+  nvencHeaders = runCommand "nvenc-headers" {
+    inherit nvidia_x11;
+  } ''
+    mkdir -p $out/include $out/lib/pkgconfig
+    cp ${nv-codec-headers-10}/include/ffnvcodec/nvEncodeAPI.h $out/include
+    substituteAll ${./nvenc.pc} $out/lib/pkgconfig/nvenc.pc
+  '';
 in buildPythonApplication rec {
   pname = "xpra";
   version = "4.2";
@@ -60,7 +68,8 @@ in buildPythonApplication rec {
     substituteInPlace setup.py --replace '/usr/include/security' '${pam}/include/security'
   '';
 
-  nativeBuildInputs = [ pkg-config wrapGAppsHook pandoc ];
+  nativeBuildInputs = [ pkg-config wrapGAppsHook pandoc ]
+    ++ lib.optional withNvenc cudatoolkit;
   buildInputs = with xorg; [
     libX11 xorgproto libXrender libXi
     libXtst libXfixes libXcomposite libXdamage
@@ -81,13 +90,13 @@ in buildPythonApplication rec {
 
     pam
     gobject-introspection
-  ];
+  ] ++ lib.optional withNvenc nvencHeaders;
   propagatedBuildInputs = with python3.pkgs; [
     pillow rencode pycrypto cryptography pycups lz4 dbus-python
     netifaces numpy pygobject3 pycairo gst-python pam
     pyopengl paramiko opencv4 python-uinput pyxdg
     ipaddress idna pyinotify
-  ];
+  ] ++ lib.optionals withNvenc (with python3.pkgs; [pynvml pycuda]);
 
     # error: 'import_cairo' defined but not used
   NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
@@ -100,7 +109,7 @@ in buildPythonApplication rec {
     # Override these, setup.py checks for headers in /usr/* paths
     "--with-pam"
     "--with-vsock"
-  ];
+  ] ++ lib.optional withNvenc "--with-nvenc";
 
   dontWrapGApps = true;
   preFixup = ''
@@ -111,6 +120,9 @@ in buildPythonApplication rec {
       --set XPRA_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb"
       --prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib
       --prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux pulseaudio ]}
+  '' + lib.optionalString withNvenc ''
+      --prefix LD_LIBRARY_PATH : ${nvidia_x11}/lib
+  '' + ''
     )
   '';
 
diff --git a/pkgs/tools/X11/xpra/nvenc.pc b/pkgs/tools/X11/xpra/nvenc.pc
new file mode 100644
index 00000000000..6d8d916a025
--- /dev/null
+++ b/pkgs/tools/X11/xpra/nvenc.pc
@@ -0,0 +1,11 @@
+prefix=@out@
+includedir=${prefix}/include
+libdir=@nvidia_x11@/lib
+
+Name: nvenc
+Description: NVENC
+Version: 10
+Requires:
+Conflicts:
+Libs: -L${libdir} -lnvidia-encode
+Cflags: -I${includedir}