about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/libdrm
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-01-07 02:18:36 +0000
committerAlyssa Ross <hi@alyssa.is>2019-01-07 02:18:47 +0000
commit36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch)
treeb3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/pkgs/development/libraries/libdrm
parent4e31070265257dc67d120c27e0f75c2344fdfa9a (diff)
parentabf060725d7614bd3b9f96764262dfbc2f9c2199 (diff)
downloadnixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.gz
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.bz2
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.lz
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.xz
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.zst
nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.zip
Add 'nixpkgs/' from commit 'abf060725d7614bd3b9f96764262dfbc2f9c2199'
git-subtree-dir: nixpkgs
git-subtree-mainline: 4e31070265257dc67d120c27e0f75c2344fdfa9a
git-subtree-split: abf060725d7614bd3b9f96764262dfbc2f9c2199
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libdrm')
-rw-r--r--nixpkgs/pkgs/development/libraries/libdrm/default.nix41
-rw-r--r--nixpkgs/pkgs/development/libraries/libdrm/libdrm-apple.patch88
2 files changed, 129 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libdrm/default.nix b/nixpkgs/pkgs/development/libraries/libdrm/default.nix
new file mode 100644
index 000000000000..3d236ab5851a
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libdrm/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, libpthreadstubs, libpciaccess, valgrind-light }:
+
+stdenv.mkDerivation rec {
+  name = "libdrm-2.4.96";
+
+  src = fetchurl {
+    url = "https://dri.freedesktop.org/libdrm/${name}.tar.bz2";
+    sha256 = "14xkip83qgljjaahzq40qgl60j54q7k00la1hbf5kk5lgg7ilmhd";
+  };
+
+  outputs = [ "out" "dev" "bin" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpthreadstubs libpciaccess valgrind-light ];
+    # libdrm as of 2.4.70 does not actually do anything with udev.
+
+  patches = stdenv.lib.optional stdenv.isDarwin ./libdrm-apple.patch;
+
+  postPatch = ''
+    for a in */*-symbol-check ; do
+      patchShebangs $a
+    done
+  '';
+
+  preConfigure = stdenv.lib.optionalString stdenv.isDarwin
+    "echo : \\\${ac_cv_func_clock_gettime=\'yes\'} > config.cache";
+
+  configureFlags = [ "--enable-install-test-programs" ]
+    ++ stdenv.lib.optionals (stdenv.isAarch32 || stdenv.isAarch64)
+      [ "--enable-tegra-experimental-api" "--enable-etnaviv-experimental-api" ]
+    ++ stdenv.lib.optional stdenv.isDarwin "-C"
+    ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "--disable-intel"
+    ;
+
+  meta = {
+    homepage = https://dri.freedesktop.org/libdrm/;
+    description = "Library for accessing the kernel's Direct Rendering Manager";
+    license = "bsd";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/libdrm/libdrm-apple.patch b/nixpkgs/pkgs/development/libraries/libdrm/libdrm-apple.patch
new file mode 100644
index 000000000000..17b447789c2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libdrm/libdrm-apple.patch
@@ -0,0 +1,88 @@
+diff -Naur libdrm-2.4.26-orig/intel/intel_bufmgr_gem.c libdrm-2.4.26/intel/intel_bufmgr_gem.c
+--- libdrm-2.4.26-orig/intel/intel_bufmgr_gem.c	2011-04-01 10:30:51.000000000 -0400
++++ libdrm-2.4.26/intel/intel_bufmgr_gem.c	2011-08-29 02:17:20.000000000 -0400
+@@ -51,6 +51,7 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <stdbool.h>
++#include <sys/time.h>
+ 
+ #include "errno.h"
+ #include "libdrm_lists.h"
+@@ -987,9 +988,9 @@
+ 	if (atomic_dec_and_test(&bo_gem->refcount)) {
+ 		drm_intel_bufmgr_gem *bufmgr_gem =
+ 		    (drm_intel_bufmgr_gem *) bo->bufmgr;
+-		struct timespec time;
++		struct timeval time;
+ 
+-		clock_gettime(CLOCK_MONOTONIC, &time);
++		gettimeofday(&time, NULL);
+ 
+ 		pthread_mutex_lock(&bufmgr_gem->lock);
+ 		drm_intel_gem_bo_unreference_final(bo, time.tv_sec);
+diff -Naur libdrm-2.4.26-orig/xf86drm.c libdrm-2.4.26/xf86drm.c
+--- libdrm-2.4.26-orig/xf86drm.c	2011-03-21 09:39:24.000000000 -0400
++++ libdrm-2.4.26/xf86drm.c	2011-08-29 02:17:49.000000000 -0400
+@@ -51,6 +51,9 @@
+ #include <sys/mman.h>
+ #include <sys/time.h>
+ #include <stdarg.h>
++#if defined(__APPLE__) && defined(__MACH__)
++#include <mach/mach_time.h>
++#endif
+ 
+ /* Not all systems have MAP_FAILED defined */
+ #ifndef MAP_FAILED
+@@ -1941,20 +1944,43 @@
+  */
+ int drmWaitVBlank(int fd, drmVBlankPtr vbl)
+ {
++#if defined(__APPLE__) && defined(__MACH__)
++    uint64_t start, end, elapsed, elapsedNano;
++    static const uint64_t maxElapsed = 2000000000;
++    static mach_timebase_info_data_t timebaseInfo;
++    if ( timebaseInfo.denom == 0 ) {
++	(void) mach_timebase_info(&timebaseInfo);
++    }
++#else
+     struct timespec timeout, cur;
++#endif
+     int ret;
+ 
++#if defined(__APPLE__) && defined(__MACH__)
++    start = mach_absolute_time();
++#else
+     ret = clock_gettime(CLOCK_MONOTONIC, &timeout);
+     if (ret < 0) {
+ 	fprintf(stderr, "clock_gettime failed: %s\n", strerror(ret));
+ 	goto out;
+     }
+     timeout.tv_sec++;
++#endif
+ 
+     do {
+        ret = ioctl(fd, DRM_IOCTL_WAIT_VBLANK, vbl);
+        vbl->request.type &= ~DRM_VBLANK_RELATIVE;
+        if (ret && errno == EINTR) {
++#if defined(__APPLE__) && defined(__MACH__)
++	       end = mach_absolute_time();
++	       elapsed = end - start;
++	       elapsedNano = elapsed * timebaseInfo.numer / timebaseInfo.denom;
++	       if (elapsedNano > maxElapsed) {
++		   errno = EBUSY;
++		   ret = -1;
++		   break;
++	       }
++#else
+ 	       clock_gettime(CLOCK_MONOTONIC, &cur);
+ 	       /* Timeout after 1s */
+ 	       if (cur.tv_sec > timeout.tv_sec + 1 ||
+@@ -1964,6 +1990,7 @@
+ 		       ret = -1;
+ 		       break;
+ 	       }
++#endif
+        }
+     } while (ret && errno == EINTR);
+