treewide: refactor to use libglvnd

* Implement libGL as a symlink package which uses libraries from libglvnd and
  headers from Mesa (since ones from libglvnd are outdated).
* Use libGL_driver.driverLink treewide; add FHS paths where possible.
This commit is contained in:
Nikolay Amiantov 2018-03-17 18:47:55 +03:00
parent 803e87aa1e
commit 6bf1421f13
13 changed files with 78 additions and 58 deletions

View File

@ -1,5 +1,5 @@
{ stdenv, lib, fetchurl, libX11, pkgconfig, libXext, libdrm, libXfixes, wayland, libffi
, mesa_noglu
, libGL, libGL_driver
, minimal ? true, libva
}:
@ -17,11 +17,12 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ libdrm ]
++ lib.optionals (!minimal) [ libva libX11 libXext libXfixes wayland libffi mesa_noglu ];
++ lib.optionals (!minimal) [ libva libX11 libXext libXfixes wayland libffi libGL ];
# TODO: share libs between minimal and !minimal - perhaps just symlink them
configureFlags =
[ "--with-drivers-path=${mesa_noglu.driverLink}/lib/dri" ] ++
# Add FHS paths for non-NixOS applications.
[ "--with-drivers-path=${libGL_driver.driverLink}/lib/dri:/usr/lib/dri:/usr/lib32/dri" ] ++
lib.optionals (!minimal) [ "--enable-glx" ];
installFlags = [ "dummy_drv_video_ladir=$(out)/lib/dri" ];

View File

@ -1,6 +1,6 @@
{ stdenv, lib, fetchFromGitHub, autoreconfHook, pkgconfig
, libXext, libdrm, libXfixes, wayland, libffi, libX11
, libGL
, libGL, libGL_driver
, minimal ? true, libva
}:
@ -27,7 +27,8 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true;
configureFlags = [
"--with-drivers-path=${libGL.driverLink}/lib/dri"
# Add FHS paths for non-NixOS applications.
"--with-drivers-path=${libGL_driver.driverLink}/lib/dri:/usr/lib/dri:/usr/lib32/dri"
] ++ lib.optionals (!minimal) [ "--enable-glx" ];
installFlags = [

View File

@ -1,7 +1,8 @@
{ stdenv, fetchurl, pkgconfig, xorg, libGL }:
{ stdenv, fetchurl, pkgconfig, xorg, libGL_driver }:
stdenv.mkDerivation rec {
name = "libvdpau-1.1.1";
name = "libvdpau-${version}";
version = "1.1.1";
src = fetchurl {
url = "https://people.freedesktop.org/~aplattner/vdpau/${name}.tar.bz2";
@ -16,7 +17,7 @@ stdenv.mkDerivation rec {
propagatedBuildInputs = [ xorg.libX11 ];
configureFlags = stdenv.lib.optional stdenv.isLinux
"--with-module-dir=${libGL.driverLink}/lib/vdpau";
"--with-module-dir=${libGL_driver.driverLink}/lib/vdpau";
installFlags = [ "moduledir=$(out)/lib/vdpau" ];

View File

@ -1,7 +1,8 @@
{ stdenv, fetchurl, pkgconfig, mesa_noglu }:
{ stdenv, fetchurl, pkgconfig, libGL }:
stdenv.mkDerivation rec {
name = "glu-9.0.0";
name = "glu-${version}";
version = "9.0.0";
src = fetchurl {
url = "ftp://ftp.freedesktop.org/pub/mesa/glu/${name}.tar.bz2";
@ -12,7 +13,7 @@ stdenv.mkDerivation rec {
'';
nativeBuildInputs = [ pkgconfig ];
propagatedBuildInputs = [ mesa_noglu ];
propagatedBuildInputs = [ libGL ];
outputs = [ "out" "dev" ];

View File

@ -71,7 +71,7 @@ let
branch = head (splitString "." version);
in
stdenv.mkDerivation {
let self = stdenv.mkDerivation {
name = "mesa-noglu-${version}";
src = fetchurl {
@ -227,6 +227,37 @@ stdenv.mkDerivation {
passthru = {
inherit libdrm version;
inherit (libglvnd) driverLink;
stubs = stdenv.mkDerivation {
name = "libGL-${libglvnd.version}";
outputs = [ "out" "dev" ];
# Use stub libraries from libglvnd and headers from Mesa.
buildCommand = ''
ln -s ${libglvnd.out} $out
mkdir -p $dev/{,lib/pkgconfig,nix-support}
echo "$out" > $dev/nix-support/propagated-build-inputs
ln -s ${self.dev}/include $dev/include
genPkgConfig() {
local name="$1"
local lib="$2"
cat <<EOF >$dev/lib/pkgconfig/$name.pc
Name: $name
Description: $lib library
Version: ${self.version}
Libs: -L${libglvnd.out}/lib -l$lib
Cflags: -I${self.dev}/include
EOF
}
genPkgConfig gl GL
genPkgConfig egl EGL
genPkgConfig glesv1_cm GLESv1_CM
genPkgConfig glesv2 GLESv2
'';
};
};
meta = with stdenv.lib; {
@ -236,4 +267,5 @@ stdenv.mkDerivation {
platforms = platforms.linux;
maintainers = with maintainers; [ eduarrrd vcunat ];
};
}
};
in self

View File

@ -1,4 +1,4 @@
{stdenv, fetchurl, ruby, opencl-headers, libGL }:
{stdenv, fetchurl, ruby, opencl-headers, libGL_driver }:
stdenv.mkDerivation rec {
name = "ocl-icd-${version}";
@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
buildInputs = [ opencl-headers ];
postPatch = ''
sed -i 's,"/etc/OpenCL/vendors","${libGL.driverLink}/etc/OpenCL/vendors",g' ocl_icd_loader.c
sed -i 's,"/etc/OpenCL/vendors","${libGL_driver.driverLink}/etc/OpenCL/vendors",g' ocl_icd_loader.c
'';
meta = with stdenv.lib; {

View File

@ -76,7 +76,6 @@ stdenv.mkDerivation rec {
icu = icu.out;
libXfixes = libXfixes.out;
glibc = stdenv.cc.libc.out;
openglDriver = if libGLSupported then libGL.driverLink else "/no-such-path";
})
(fetchpatch {
name = "fix-medium-font.patch";

View File

@ -1,6 +1,6 @@
{ stdenv, fetchgit, fetchFromGitHub, cmake, pkgconfig, git, python3,
python3Packages, glslang, spirv-tools, x11, libxcb, libXrandr,
libXext, wayland, libGL, makeWrapper }:
libXext, wayland, libGL_driver, makeWrapper }:
let
version = "1.0.61.1";
@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
cmakeFlags = [
"-DBUILD_WSI_MIR_SUPPORT=OFF"
"-DFALLBACK_DATA_DIRS=${libGL.driverLink}/share:/usr/local/share:/usr/share"
"-DFALLBACK_DATA_DIRS=${libGL_driver.driverLink}/share:/usr/local/share:/usr/share"
];
outputs = [ "out" "dev" "demos" ];

View File

@ -5,9 +5,9 @@
let
packages = [
stdenv.cc.cc zlib glib xorg.libX11 libxkbcommon libXmu libXi libXext
stdenv.cc.cc zlib glib xorg.libX11 libxkbcommon libXmu libXi libXext libGL
];
libPath = "${stdenv.lib.makeLibraryPath packages}:${libGL.driverLink}/lib";
libPath = "${stdenv.lib.makeLibraryPath packages}";
in
stdenv.mkDerivation rec {
name = "genymotion-${version}";

View File

@ -1,4 +1,4 @@
{ stdenv, fetchFromGitHub, libpng, pkgconfig, SDL, freetype, zlib, mesa }:
{ stdenv, fetchFromGitHub, libpng, pkgconfig, SDL, freetype, zlib }:
stdenv.mkDerivation rec {

View File

@ -53,7 +53,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (! isNull buildScript) {
++ lib.optionals openclSupport [ pkgs.opencl-headers pkgs.ocl-icd ]
++ lib.optionals xmlSupport [ pkgs.libxml2 pkgs.libxslt ]
++ lib.optionals tlsSupport [ pkgs.openssl pkgs.gnutls ]
++ lib.optionals openglSupport [ pkgs.libGLU_combined pkgs.libGL.osmesa pkgs.libdrm ]
++ lib.optionals openglSupport [ pkgs.libGLU_combined pkgs.mesa_noglu.osmesa pkgs.libdrm ]
++ (with pkgs.xorg; [
libX11 libXi libXcursor libXrandr libXrender libXxf86vm libXcomposite libXext
])));

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, elfutils, libGL
{ stdenv, fetchurl, elfutils
, xorg, patchelf, openssl, libdrm, libudev
, libxcb, libxshmfence, epoxy, perl, zlib
, fetchFromGitHub, ncurses
@ -13,8 +13,6 @@ let
kernelDir = if libsOnly then null else kernel.dev;
inherit (libGL) driverLink;
bitness = if stdenv.is64bit then "64" else "32";
libArch =

View File

@ -10498,60 +10498,47 @@ with pkgs;
## libGL/libGLU/Mesa stuff
# Default libGL implementation, should provide headers and libGL.so/libEGL.so/... to link agains them
# Default implementation is `mesa`, but can be eventually replaced with `libglvnd`,
# or other runtime dispatcher
libGL = mesa_noglu;
libGL = libGLDarwinOr mesa_noglu.stubs;
# Default libGLU
libGLU = mesa_glu;
libGLU = libGLDarwinOr mesa_glu;
# Combined derivation, contains both libGL and libGLU
# Please, avoid using this attribute. It was meant as transitional hack
# for packages that assume that libGLU and libGL live in the same prefix.
# libGLU_combined propagates both libGL and libGLU
libGLU_combined = mesa;
libGLU_combined = libGLDarwinOr (buildEnv {
name = "libGLU-combined";
paths = [ libGL libGLU ];
extraOutputsToInstall = [ "dev" ];
});
# Default derivation with libGL.so.1 to link into /run/opengl-drivers (if need)
libGL_driver = mesa_drivers;
libGL_driver = libGLDarwinOr mesa_drivers;
libGLSupported = lib.elem system lib.platforms.mesaPlatforms;
libGLDarwinOr = alternative: if stdenv.isDarwin
then callPackage ../development/libraries/mesa-darwin {
inherit (darwin.apple_sdk.frameworks) OpenGL;
inherit (darwin.apple_sdk.libs) Xplugin;
inherit (darwin) apple_sdk;
}
else alternative;
libGLDarwin = callPackage ../development/libraries/mesa-darwin {
inherit (darwin.apple_sdk.frameworks) OpenGL;
inherit (darwin.apple_sdk.libs) Xplugin;
inherit (darwin) apple_sdk;
};
# FIXME: should be `libGL = libGLDarwinOr mesa_nonglu` but this change cause mass rebuild,
# until all packages will refer to libGL/GLU/GLU combined
mesa_noglu = libGLDarwinOr (callPackage ../development/libraries/mesa {
libGLDarwinOr = alternative: if stdenv.isDarwin then libGLDarwin else alternative;
mesa_noglu = callPackage ../development/libraries/mesa {
# makes it slower, but during runtime we link against just mesa_drivers
# through /run/opengl-driver*, which is overriden according to config.grsecurity
# grsecEnabled = true; # no more support in nixpkgs ATM
});
};
mesa_glu = libGLDarwinOr (callPackage ../development/libraries/mesa-glu { });
mesa_drivers = libGLDarwinOr (
mesa_glu = callPackage ../development/libraries/mesa-glu { };
mesa_drivers =
let mo = mesa_noglu.override {
grsecEnabled = config.grsecurity or false;
enableTextureFloats = true;
};
in mo.drivers
);
# Please, avoid using this attribute. It was meant as transitional hack
# for packages that assume that libGLU and libGL live in the same prefix.
# Otherwise it's better to use mesa_glu or mesa_noglu, depending on whether
# you need libGLU or not (_glu propagates _noglu).
mesa = libGLDarwinOr (buildEnv {
name = "mesa-${mesa_noglu.version}";
paths = [ mesa_noglu.dev mesa_noglu.out mesa_glu mesa_glu.dev ];
meta = {
platforms = lib.platforms.unix;
};
});
in mo.drivers;
## End libGL/libGLU/Mesa stuff