diff options
author | Nikolay Amiantov <ab@fmap.me> | 2017-01-30 00:29:39 +0300 |
---|---|---|
committer | Nikolay Amiantov <ab@fmap.me> | 2017-02-08 16:57:46 +0300 |
commit | 2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079 (patch) | |
tree | 6de8a1be9ead1d441b9cd1a6b84aa75065d9935d /pkgs/tools/X11 | |
parent | 750e7ba0d958a08cdef16a2147263586a55a3e4d (diff) | |
download | nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.tar nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.tar.gz nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.tar.bz2 nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.tar.lz nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.tar.xz nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.tar.zst nixlib-2fd2fcf54d6453a70564bfbf1c8d4fdfb5f9f079.zip |
linuxPackages.nvidia_x11: refactor, build more from source
* Use libglvnd; * Compile nvidia-settings, nvidia-persistenced from source; * Generalize builder.
Diffstat (limited to 'pkgs/tools/X11')
-rw-r--r-- | pkgs/tools/X11/bumblebee/default.nix | 10 | ||||
-rw-r--r-- | pkgs/tools/X11/primus/default.nix | 4 | ||||
-rw-r--r-- | pkgs/tools/X11/primus/lib.nix | 22 |
3 files changed, 25 insertions, 11 deletions
diff --git a/pkgs/tools/X11/bumblebee/default.nix b/pkgs/tools/X11/bumblebee/default.nix index eac44efdf273..7b725bfeb57c 100644 --- a/pkgs/tools/X11/bumblebee/default.nix +++ b/pkgs/tools/X11/bumblebee/default.nix @@ -19,12 +19,13 @@ { stdenv, lib, fetchurl, fetchpatch, pkgconfig, help2man, makeWrapper , glib, libbsd , libX11, libXext, xorgserver, xkbcomp, kmod, xf86videonouveau -, nvidia_x11, virtualgl, primusLib +, nvidia_x11, virtualgl, libglvnd, primusLib , automake111x, autoconf # The below should only be non-null in a x86_64 system. On a i686 # system the above nvidia_x11 and virtualgl will be the i686 packages. # TODO: Confusing. Perhaps use "SubArch" instead of i686? , nvidia_x11_i686 ? null +, libglvnd_i686 ? null , primusLib_i686 ? null , useDisplayDevice ? false , extraNvidiaDeviceOptions ? "" @@ -40,7 +41,10 @@ let primusLibs = lib.makeLibraryPath ([primus] ++ lib.optional (primusLib_i686 != null) primus_i686); - nvidia_x11s = [nvidia_x11] ++ lib.optional (nvidia_x11_i686 != null) nvidia_x11_i686; + nvidia_x11s = [ nvidia_x11 ] + ++ lib.optional nvidia_x11.useGLVND libglvnd + ++ lib.optionals (nvidia_x11_i686 != null) + ([ nvidia_x11_i686 ] ++ lib.optional nvidia_x11_i686.useGLVND libglvnd_i686); nvidiaLibs = lib.makeLibraryPath nvidia_x11s; @@ -120,7 +124,7 @@ in stdenv.mkDerivation rec { #"CONF_PRIMUS_LD_PATH=${primusLibs}" ] ++ lib.optionals useNvidia [ "CONF_LDPATH_NVIDIA=${nvidiaLibs}" - "CONF_MODPATH_NVIDIA=${nvidia_x11}/lib/xorg/modules" + "CONF_MODPATH_NVIDIA=${nvidia_x11.bin}/lib/xorg/modules" ]; CFLAGS = [ diff --git a/pkgs/tools/X11/primus/default.nix b/pkgs/tools/X11/primus/default.nix index 88589a058783..229e228e405c 100644 --- a/pkgs/tools/X11/primus/default.nix +++ b/pkgs/tools/X11/primus/default.nix @@ -5,6 +5,8 @@ # Other distributions do the same. { stdenv , stdenv_i686 +, lib +, bumblebee , primusLib , writeScriptBin , primusLib_i686 ? null @@ -18,7 +20,7 @@ let primus = if useNvidia then primusLib_ else primusLib_.override { nvidia_x11 = null; }; primus_i686 = if useNvidia then primusLib_i686_ else primusLib_i686_.override { nvidia_x11 = null; }; - ldPath = stdenv.lib.makeLibraryPath ([primus] ++ stdenv.lib.optional (primusLib_i686 != null) primus_i686); + ldPath = lib.makeLibraryPath ([ primus primus.glvnd ] ++ lib.optionals (primusLib_i686 != null) [ primus_i686 primus_i686.glvnd ]); in writeScriptBin "primusrun" '' #!${stdenv.shell} diff --git a/pkgs/tools/X11/primus/lib.nix b/pkgs/tools/X11/primus/lib.nix index fccd01eaeadd..d30377d0e18b 100644 --- a/pkgs/tools/X11/primus/lib.nix +++ b/pkgs/tools/X11/primus/lib.nix @@ -1,10 +1,16 @@ { stdenv, fetchFromGitHub -, xlibsWrapper, mesa +, libX11, mesa_noglu , nvidia_x11 ? null -, libX11 +, libglvnd }: -stdenv.mkDerivation { +let + aPackage = + if nvidia_x11 == null then mesa_noglu + else if nvidia_x11.useGLVND then libglvnd + else nvidia_x11; + +in stdenv.mkDerivation { name = "primus-lib-2015-04-28"; src = fetchFromGitHub { @@ -14,18 +20,20 @@ stdenv.mkDerivation { sha256 = "118jm57ccawskb8vjq3a9dpa2gh72nxzvx2zk7zknpy0arrdznj1"; }; - buildInputs = [ libX11 mesa ]; + buildInputs = [ libX11 mesa_noglu ]; makeFlags = [ "LIBDIR=$(out)/lib" - "PRIMUS_libGLa=${if nvidia_x11 == null then mesa else nvidia_x11}/lib/libGL.so" - "PRIMUS_libGLd=${mesa}/lib/libGL.so" - "PRIMUS_LOAD_GLOBAL=${mesa}/lib/libglapi.so" + "PRIMUS_libGLa=${aPackage}/lib/libGL.so" + "PRIMUS_libGLd=${mesa_noglu}/lib/libGL.so" + "PRIMUS_LOAD_GLOBAL=${mesa_noglu}/lib/libglapi.so" ]; installPhase = '' ln -s $out/lib/libGL.so.1 $out/lib/libGL.so ''; + passthru.glvnd = if nvidia_x11 != null && nvidia_x11.useGLVND then nvidia_x11 else null; + meta = with stdenv.lib; { description = "Low-overhead client-side GPU offloading"; homepage = "https://github.com/amonakov/primus"; |