diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:36 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:47 +0000 |
commit | 36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch) | |
tree | b3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/pkgs/development/libraries/libdrm | |
parent | 4e31070265257dc67d120c27e0f75c2344fdfa9a (diff) | |
parent | abf060725d7614bd3b9f96764262dfbc2f9c2199 (diff) | |
download | nixlib-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.nix | 41 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/libraries/libdrm/libdrm-apple.patch | 88 |
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); + |