summary refs log tree commit diff
diff options
context:
space:
mode:
authorDan Peebles <pumpkin@me.com>2018-01-20 00:04:02 -0500
committerDan Peebles <pumpkin@me.com>2018-01-20 00:05:26 -0500
commitb81c65ce0a4c671db405890bcefd7f17dcb3eb9c (patch)
tree1842267f858322667427442f685e1f3ece429b7b
parentdb56407a976d61e86d246e3221f852ed104b65e9 (diff)
downloadnixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.tar
nixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.tar.gz
nixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.tar.bz2
nixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.tar.lz
nixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.tar.xz
nixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.tar.zst
nixlib-b81c65ce0a4c671db405890bcefd7f17dcb3eb9c.zip
libsnark: init at 9e6b19ff
-rw-r--r--pkgs/development/libraries/libsnark/darwin-fix-clock-gettime.patch41
-rw-r--r--pkgs/development/libraries/libsnark/default.nix32
-rw-r--r--pkgs/top-level/all-packages.nix2
3 files changed, 75 insertions, 0 deletions
diff --git a/pkgs/development/libraries/libsnark/darwin-fix-clock-gettime.patch b/pkgs/development/libraries/libsnark/darwin-fix-clock-gettime.patch
new file mode 100644
index 000000000000..2eee84d1c4b8
--- /dev/null
+++ b/pkgs/development/libraries/libsnark/darwin-fix-clock-gettime.patch
@@ -0,0 +1,41 @@
+Adapted from https://github.com/zcash/libsnark/pull/10
+
+diff --git a/depends/libff/libff/common/profiling.cpp b/depends/libff/libff/common/profiling.cpp
+index f2a1985..319149c 100755
+--- a/depends/libff/libff/common/profiling.cpp
++++ b/depends/libff/libff/common/profiling.cpp
+@@ -27,6 +27,13 @@
+ #include <proc/readproc.h>
+ #endif
+ 
++#ifdef __MACH__
++#include <time.h>
++#include <sys/time.h>
++#include <mach/clock.h>
++#include <mach/mach.h>
++#endif
++
+ namespace libff {
+ 
+ long long get_nsec_time()
+@@ -42,10 +49,20 @@ long long get_nsec_cpu_time()
+ 	return 0;
+ #else
+     ::timespec ts;
++#ifdef __MACH__
++    clock_serv_t cclock;
++    mach_timespec_t mts;
++    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
++    clock_get_time(cclock, &mts);
++    mach_port_deallocate(mach_task_self(), cclock);
++    ts.tv_sec = mts.tv_sec;
++    ts.tv_nsec = mts.tv_nsec;
++#else
+     if ( ::clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) )
+         throw ::std::runtime_error("clock_gettime(CLOCK_PROCESS_CPUTIME_ID) failed");
+         // If we expected this to work, don't silently ignore failures, because that would hide the problem and incur an unnecessarily system-call overhead. So if we ever observe this exception, we should probably add a suitable #ifdef .
+         //TODO: clock_gettime(CLOCK_PROCESS_CPUTIME_ID) is not supported by native Windows. What about Cygwin? Should we #ifdef on CLOCK_PROCESS_CPUTIME_ID or on __linux__?
++#endif
+     return ts.tv_sec * 1000000000ll + ts.tv_nsec;
+ #endif
+ }
diff --git a/pkgs/development/libraries/libsnark/default.nix b/pkgs/development/libraries/libsnark/default.nix
new file mode 100644
index 000000000000..578053bbb427
--- /dev/null
+++ b/pkgs/development/libraries/libsnark/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, openssl, boost, gmp, procps, fetchpatch, patchutils }:
+
+let
+  rev = "9e6b19ff15bc19fba5da1707ba18e7f160e5ed07";
+  inherit (stdenv) lib;
+in stdenv.mkDerivation rec {
+  name = "libsnark-pre${version}";
+  version = stdenv.lib.substring 0 8 rev;
+
+  buildInputs = [ cmake pkgconfig openssl boost gmp ] ++ lib.optional stdenv.hostPlatform.isLinux procps;
+
+  cmakeFlags = lib.optionals stdenv.hostPlatform.isDarwin [ "-DWITH_PROCPS=OFF" "-DWITH_SUPERCOP=OFF" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner           = "scipr-lab";
+    repo            = "libsnark";
+    sha256          = "13f02qp2fmfhvxlp4xi69m0l8r5nq913l2f0zwdk7hl46lprfdca";
+    fetchSubmodules = true;
+  };
+
+  patches = [ ./darwin-fix-clock-gettime.patch ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "C++ library for zkSNARKs";
+    homepage = https://github.com/scipr-lab/libsnark;
+    license = licenses.mit;
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index a7dedb007179..00f8d4014820 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -9869,6 +9869,8 @@ with pkgs;
     inherit (darwin.apple_sdk.frameworks) Carbon AudioToolbox;
   };
 
+  libsnark = callPackage ../development/libraries/libsnark { };
+
   libsodium = callPackage ../development/libraries/libsodium { };
 
   libsoup = callPackage ../development/libraries/libsoup { };