about summary refs log tree commit diff
path: root/nixpkgs/pkgs/os-specific/linux/ati-drivers/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/ati-drivers/default.nix')
-rw-r--r--nixpkgs/pkgs/os-specific/linux/ati-drivers/default.nix140
1 files changed, 140 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/ati-drivers/default.nix b/nixpkgs/pkgs/os-specific/linux/ati-drivers/default.nix
new file mode 100644
index 000000000000..bc35d14321b4
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/ati-drivers/default.nix
@@ -0,0 +1,140 @@
+{ stdenv, lib, fetchurl, kernel ? null, which
+, xorg, makeWrapper, glibc, patchelf, unzip
+, fontconfig, freetype, libGLU_combined # for fgl_glxgears
+, # Whether to build the libraries only (i.e. not the kernel module or
+  # driver utils). Used to support 32-bit binaries on 64-bit
+  # Linux.
+  libsOnly ? false
+}:
+
+assert (!libsOnly) -> kernel != null;
+
+with stdenv.lib;
+
+# This derivation requires a maximum of gcc49, Linux kernel 4.1 and xorg.xserver 1.17
+# and will not build or run using versions newer
+
+# If you want to use a different Xorg version probably
+# DIR_DEPENDING_ON_XORG_VERSION in builder.sh has to be adopted (?)
+# make sure libglx.so of ati is used. xorg.xorgserver does provide it as well
+# which is a problem because it doesn't contain the xorgserver patch supporting
+# the XORG_DRI_DRIVER_PATH env var.
+# See https://marc.info/?l=nix-dev&m=139641585515351 for a
+# workaround (TODO)
+
+# The gentoo ebuild contains much more "magic" and is usually a great resource to
+# find patches XD
+
+# http://wiki.cchtml.com/index.php/Main_Page
+
+# /usr/lib/dri/fglrx_dri.so must point to /run/opengl-driver/lib/fglrx_dri.so
+# This is done in the builder script.
+
+stdenv.mkDerivation rec {
+
+  version = "15.12";
+  pname = "ati-drivers";
+  build = "15.302";
+
+  linuxonly =
+    if stdenv.hostPlatform.system == "i686-linux" then
+      true
+    else if stdenv.hostPlatform.system == "x86_64-linux" then
+      true
+    else throw "ati-drivers are Linux only. Sorry. The build was stopped.";
+
+  name = pname + "-" + version + (optionalString (!libsOnly) "-${kernelDir.version}");
+
+  builder = ./builder.sh;
+  gcc = stdenv.cc.cc;
+  libXinerama = xorg.libXinerama;
+  libXrandr = xorg.libXrandr;
+  libXrender = xorg.libXrender;
+  libXxf86vm = xorg.libXxf86vm;
+  xf86vidmodeproto = xorg.xf86vidmodeproto;
+  libSM = xorg.libSM;
+  libICE = xorg.libICE;
+  libfreetype = freetype;
+  libfontconfig = fontconfig;
+  libStdCxx = stdenv.cc.cc.lib;
+
+  src = fetchurl {
+    url =
+    "https://www2.ati.com/drivers/linux/radeon-crimson-15.12-15.302-151217a-297685e.zip";
+    sha256 = "704f2dfc14681f76dae3b4120c87b1ded33cf43d5a1d800b6de5ca292bb61e58";
+    curlOpts = "--referer https://www.amd.com/en/support";
+  };
+
+  hardeningDisable = [ "pic" "format" ];
+
+  patchPhaseSamples = "patch -p2 < ${./patches/patch-samples.patch}";
+  patches = [
+    ./patches/15.12-xstate-fp.patch
+    ./patches/15.9-kcl_str.patch
+    ./patches/15.9-mtrr.patch
+    ./patches/15.9-preempt.patch
+    ./patches/15.9-sep_printf.patch ]
+  ++ optionals ( kernel != null &&
+                 (lib.versionAtLeast kernel.version "4.6") )
+               [ ./patches/kernel-4.6-get_user_pages.patch
+                 ./patches/kernel-4.6-page_cache_release-put_page.patch ]
+  ++ optionals ( kernel != null &&
+                 (lib.versionAtLeast kernel.version "4.7") )
+               [ ./patches/4.7-arch-cpu_has_pge-v2.patch ]
+  ++ optionals ( kernel != null &&
+                 (lib.versionAtLeast kernel.version "4.9") )
+               [ ./patches/4.9-get_user_pages.patch ];
+
+  buildInputs =
+    [ xorg.libXrender xorg.libXext xorg.libX11 xorg.libXinerama xorg.libSM
+      xorg.libXrandr xorg.libXxf86vm xorg.xf86vidmodeproto xorg.imake xorg.libICE
+      patchelf
+      unzip
+      libGLU_combined
+      fontconfig
+      freetype
+      makeWrapper
+      which
+    ];
+
+  inherit libsOnly;
+
+  kernelDir = if libsOnly then null else kernel.dev;
+
+  # glibc only used for setting the binaries interpreter
+  glibcDir = glibc.out;
+
+  # outputs TODO: probably many fixes are needed;
+  LD_LIBRARY_PATH = makeLibraryPath
+    [ xorg.libXrender xorg.libXext xorg.libX11 xorg.libXinerama xorg.libSM
+      xorg.libXrandr xorg.libXxf86vm xorg.xf86vidmodeproto xorg.imake xorg.libICE
+      libGLU_combined
+      fontconfig
+      freetype
+      stdenv.cc.cc
+    ];
+
+  # without this some applications like blender don't start, but they start
+  # with nvidia. This causes them to be symlinked to $out/lib so that they
+  # appear in /run/opengl-driver/lib which get's added to LD_LIBRARY_PATH
+
+  extraDRIlibs = [ xorg.libXrandr.out xorg.libXrender.out xorg.libXext.out
+                   xorg.libX11.out xorg.libXinerama.out xorg.libSM.out
+                   xorg.libICE.out ];
+
+  inherit libGLU_combined; # only required to build the examples
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "ATI Catalyst display drivers";
+    homepage = http://support.amd.com/us/gpudownload/Pages/index.aspx;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ marcweber offline jgeerds jerith666 ];
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+    # Copied from the nvidia default.nix to prevent a store collision.
+    priority = 4;
+  };
+
+}