summary refs log tree commit diff
path: root/pkgs/development/libraries/mesa/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/mesa/default.nix')
-rw-r--r--pkgs/development/libraries/mesa/default.nix108
1 files changed, 63 insertions, 45 deletions
diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix
index 1458aedc0b1..39a65886585 100644
--- a/pkgs/development/libraries/mesa/default.nix
+++ b/pkgs/development/libraries/mesa/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, pkgconfig, intltool, flex, bison, autoreconfHook, substituteAll
-, python, libxml2Python, file, expat, makedepend
-, libdrm, xorg, wayland, udev, llvm, libffi
-, libvdpau, libelf
+{ stdenv, fetchurl, fetchpatch, pkgconfig, intltool, flex, bison, autoreconfHook, substituteAll
+, python, libxml2Python, file, expat, makedepend, pythonPackages
+, libdrm, xorg, wayland, udev, llvmPackages, libffi, libomxil-bellagio
+, libvdpau, libelf, libva, libclc
 , grsecEnabled
 , enableTextureFloats ? false # Texture floats are patented, see docs/patents.txt
 , enableExtraFeatures ? false # not maintained
@@ -15,18 +15,18 @@ else
   - The basic mesa ($out) contains headers and libraries (GLU is in mesa_glu now).
     This or the mesa attribute (which also contains GLU) are small (~ 2 MB, mostly headers)
     and are designed to be the buildInput of other packages.
-  - DRI and EGL drivers are compiled into $drivers output,
-    which is much bigger and depends on LLVM.
-    These should be searched at runtime in "/run/opengl-driver{,-32}/lib/*"
-    and so are kind-of impure (given by NixOS).
+  - DRI drivers are compiled into $drivers output, which is much bigger and
+    depends on LLVM. These should be searched at runtime in
+    "/run/opengl-driver{,-32}/lib/*" and so are kind-of impure (given by NixOS).
     (I suppose on non-NixOS one would create the appropriate symlinks from there.)
   - libOSMesa is in $osmesa (~4 MB)
 */
 
 let
-  version = "10.2.6";
+  version = "10.5.3";
   # this is the default search path for DRI drivers
   driverLink = "/run/opengl-driver" + stdenv.lib.optionalString stdenv.isi686 "-32";
+  clang = if llvmPackages ? clang-unwrapped then llvmPackages.clang-unwrapped else llvmPackages.clang;
 in
 with { inherit (stdenv.lib) optional optionals optionalString; };
 
@@ -34,14 +34,16 @@ stdenv.mkDerivation {
   name = "mesa-noglu-${version}";
 
   src =  fetchurl {
-    url = "ftp://ftp.freedesktop.org/pub/mesa/${version}/MesaLib-${version}.tar.bz2";
-    sha256 = "01n8ib190s12m8hiiyi4wfm9jhkbqjd769npjwvf965smp918cqr";
+    urls = [
+      "https://launchpad.net/mesa/trunk/${version}/+download/mesa-${version}.tar.xz"
+      "ftp://ftp.freedesktop.org/pub/mesa/${version}/mesa-${version}.tar.xz"
+    ];
+    sha256 = "18ibj4c8zmg738md8phmq3va40ycsjdilg76ylw35h7mwhdyw0c7";
   };
 
   prePatch = "patchShebangs .";
 
   patches = [
-    ./static-gallium.patch
     ./glx_ro_text_segm.patch # fix for grsecurity/PaX
    # TODO: revive ./dricore-gallium.patch when it gets ported (from Ubuntu),
    #  as it saved ~35 MB in $drivers; watch https://launchpad.net/ubuntu/+source/mesa/+changelog
@@ -51,59 +53,75 @@ stdenv.mkDerivation {
         inherit udev;
       });
 
-  # Change the search path for EGL drivers from $drivers/* to driverLink
   postPatch = ''
-    sed '/D_EGL_DRIVER_SEARCH_DIR=/s,EGL_DRIVER_INSTALL_DIR,${driverLink}/lib/egl,' \
-      -i src/egl/main/Makefile.am
-  '' + /* work around RTTI LLVM problems */ ''
-    patch -R -p1 < ${./rtti.patch}
+    substituteInPlace src/egl/main/egldriver.c \
+      --replace _EGL_DRIVER_SEARCH_DIR '"${driverLink}"'
   '';
 
   outputs = [ "dev" "out" "drivers" "osmesa" ];
 
   configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-clang-libdir=${clang}/lib"
     "--with-dri-driverdir=$(drivers)/lib/dri"
-    "--with-egl-driver-dir=$(drivers)/lib/egl"
     "--with-dri-searchpath=${driverLink}/lib/dri"
 
+    "--enable-gles1"
+    "--enable-gles2"
     "--enable-dri"
-    "--enable-glx-tls"
-    "--enable-shared-glapi" "--enable-shared-gallium"
-    "--enable-driglx-direct" # seems enabled anyway
-    "--enable-gallium-llvm" "--enable-llvm-shared-libs"
+  ] ++ optional stdenv.isLinux "--enable-dri3"
+    ++ [
+    "--enable-glx"
+    "--enable-gallium-osmesa" # used by wine
+    "--enable-egl"
     "--enable-xa" # used in vmware driver
-    "--enable-gles1" "--enable-gles2"
+    "--enable-gbm"
+  ] ++ optional stdenv.isLinux "--enable-nine" # Direct3D in Wine
+    ++ [
+    "--enable-xvmc"
     "--enable-vdpau"
-    "--enable-osmesa" # used by wine
-
-    "--with-dri-drivers=i965,r200,radeon"
-    "--with-gallium-drivers=i915,nouveau,r300,r600,svga,swrast,radeonsi"
-    "--with-egl-platforms=x11,wayland,drm" "--enable-gbm"
-  ]
-    ++ optional enableTextureFloats "--enable-texture-float"
-    ++ optionals enableExtraFeatures [
-      "--enable-openvg" "--enable-gallium-egl" # not needed for EGL in Gallium, but OpenVG might be useful
-      #"--enable-xvmc" # tests segfault with 9.1.{1,2,3}
-      #"--enable-opencl" # ToDo: opencl seems to need libclc for clover
-    ]
+    "--enable-omx"
+    "--enable-va"
+
+    # TODO: Figure out how to enable opencl without having a runtime dependency on clang
+    "--disable-opencl"
+    #"--enable-opencl"
+    #"--enable-opencl-icd"
+
+    "--with-gallium-drivers=svga,i915,ilo,r300,r600,radeonsi,nouveau,freedreno,swrast"
+    "--enable-shared-glapi"
+    "--enable-sysfs"
+    "--enable-driglx-direct" # seems enabled anyway
+    "--enable-glx-tls"
+    "--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast"
+    "--with-egl-platforms=x11,wayland,drm"
+
+    "--enable-gallium-llvm"
+    "--enable-llvm-shared-libs"
+  ] ++ optional enableTextureFloats "--enable-texture-float"
     ++ optional grsecEnabled "--enable-glx-rts"; # slight performance degradation, enable only for grsec
 
-  nativeBuildInputs = [ pkgconfig python makedepend file flex bison ];
+  nativeBuildInputs = [ pkgconfig python makedepend file flex bison pythonPackages.Mako ];
 
   propagatedBuildInputs = with xorg; [ libXdamage libXxf86vm ]
-    ++ optionals stdenv.isLinux [libdrm]
-    ;
+    ++ optionals stdenv.isLinux [ libdrm ];
+
   buildInputs = with xorg; [
-    autoreconfHook intltool expat libxml2Python llvm
+    autoreconfHook intltool expat libxml2Python llvmPackages.llvm
     glproto dri2proto dri3proto presentproto
     libX11 libXext libxcb libXt libXfixes libxshmfence
-    libffi wayland libvdpau libelf
-  ] ++ optionals enableExtraFeatures [ /*libXvMC*/ ]
-    ++ optional stdenv.isLinux udev
-    ;
+    libffi wayland libvdpau libelf libXvMC libomxil-bellagio libva
+    libclc clang
+  ] ++ optional stdenv.isLinux udev;
 
   enableParallelBuilding = true;
-  #doCheck = true; # https://bugs.freedesktop.org/show_bug.cgi?id=67672
+  doCheck = false;
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
 
   # move gallium-related stuff to $drivers, so $out doesn't depend on LLVM;
   #   also move libOSMesa to $osmesa, as it's relatively big
@@ -169,6 +187,6 @@ stdenv.mkDerivation {
     homepage = http://www.mesa3d.org/;
     license = "bsd";
     platforms = stdenv.lib.platforms.mesaPlatforms;
-    maintainers = with stdenv.lib.maintainers; [ simons vcunat ];
+    maintainers = with stdenv.lib.maintainers; [ eduarrrd simons vcunat ];
   };
 }