Merge pull request #23451 from ttuegel/mesa-drivers

mesa: allow overriding driver compilation
This commit is contained in:
Thomas Tuegel 2017-03-04 15:05:30 -06:00 committed by GitHub
commit ff8f2b87e8

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, fetchpatch { stdenv, fetchurl, fetchpatch, lib
, pkgconfig, intltool, autoreconfHook, substituteAll , pkgconfig, intltool, autoreconfHook, substituteAll
, file, expat, libdrm, xorg, wayland, openssl , file, expat, libdrm, xorg, wayland, openssl
, llvmPackages, libffi, libomxil-bellagio, libva , llvmPackages, libffi, libomxil-bellagio, libva
@ -6,9 +6,11 @@
, grsecEnabled ? false , grsecEnabled ? false
, enableRadv ? false , enableRadv ? false
, enableTextureFloats ? false # Texture floats are patented, see docs/patents.txt , enableTextureFloats ? false # Texture floats are patented, see docs/patents.txt
, galliumDrivers ? null
, driDrivers ? null
, vulkanDrivers ? null
}: }:
/** Packaging design: /** Packaging design:
- The basic mesa ($out) contains headers and libraries (GLU is in mesa_glu now). - 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) This or the mesa attribute (which also contains GLU) are small (~ 2 MB, mostly headers)
@ -26,6 +28,40 @@ if ! lists.elem stdenv.system platforms.mesaPlatforms then
throw "unsupported platform for Mesa" throw "unsupported platform for Mesa"
else else
let
defaultGalliumDrivers =
if (stdenv.isArm || stdenv.isAarch64)
then ["nouveau" "freedreno" "vc4" "etnaviv"]
else ["i915" "ilo" "r300" "r600" "radeonsi" "nouveau"];
defaultDriDrivers =
if (stdenv.isArm || stdenv.isAarch64)
then ["nouveau"]
else ["i915" "i965" "nouveau" "radeon" "r200"];
defaultVulkanDrivers =
if (stdenv.isArm || stdenv.isAarch64)
then []
else ["intel"] ++ lib.optional enableRadv "radeon";
in
let gallium_ = galliumDrivers; dri_ = driDrivers; vulkan_ = vulkanDrivers; in
let
galliumDrivers =
["svga"]
++ (if gallium_ == null
then defaultGalliumDrivers
else gallium_)
++ ["swrast"];
driDrivers =
(if dri_ == null
then defaultDriDrivers
else dri_) ++ ["swrast"];
vulkanDrivers =
if vulkan_ == null
then defaultVulkanDrivers
else vulkan_;
in
let let
version = "17.0.0"; version = "17.0.0";
branch = head (splitString "." version); branch = head (splitString "." version);
@ -63,14 +99,17 @@ stdenv.mkDerivation {
"--with-dri-driverdir=$(drivers)/lib/dri" "--with-dri-driverdir=$(drivers)/lib/dri"
"--with-dri-searchpath=${driverLink}/lib/dri" "--with-dri-searchpath=${driverLink}/lib/dri"
"--with-egl-platforms=x11,wayland,drm" "--with-egl-platforms=x11,wayland,drm"
] ++ (if stdenv.isArm || stdenv.isAarch64 then [ ]
"--with-gallium-drivers=nouveau,freedreno,vc4,etnaviv,swrast" ++ (optional (galliumDrivers != [])
"--with-dri-drivers=nouveau,swrast" ("--with-gallium-drivers=" +
] else [ builtins.concatStringsSep "," galliumDrivers))
"--with-gallium-drivers=svga,i915,ilo,r300,r600,radeonsi,nouveau,swrast" ++ (optional (driDrivers != [])
"--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast" ("--with-dri-drivers=" +
("--with-vulkan-drivers=intel" + optionalString enableRadv ",radeon") builtins.concatStringsSep "," driDrivers))
]) ++ [ ++ (optional (vulkanDrivers != [])
("--with-vulkan-drivers=" +
builtins.concatStringsSep "," vulkanDrivers))
++ [
(enableFeature enableTextureFloats "texture-float") (enableFeature enableTextureFloats "texture-float")
(enableFeature grsecEnabled "glx-rts") (enableFeature grsecEnabled "glx-rts")
(enableFeature stdenv.isLinux "dri3") (enableFeature stdenv.isLinux "dri3")
@ -143,7 +182,7 @@ stdenv.mkDerivation {
# set the default search path for DRI drivers; used e.g. by X server # set the default search path for DRI drivers; used e.g. by X server
substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace '$(drivers)' "${driverLink}" substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace '$(drivers)' "${driverLink}"
'' + optionalString (!(stdenv.isArm || stdenv.isAarch64)) '' '' + optionalString (builtins.elem "intel" vulkanDrivers) ''
# move share/vulkan/icd.d/ # move share/vulkan/icd.d/
mv $out/share/ $drivers/ mv $out/share/ $drivers/
# Update search path used by Vulkan (it's pointing to $out but # Update search path used by Vulkan (it's pointing to $out but