summary refs log tree commit diff
path: root/pkgs/applications/science
diff options
context:
space:
mode:
authorzimbatm <zimbatm@zimbatm.com>2018-08-16 12:46:51 +0100
committerGitHub <noreply@github.com>2018-08-16 12:46:51 +0100
commitb7e50d52f018d0670614a58851b4fc2c0f93818b (patch)
tree4420738927b268eac5803ab589623cc058adb70a /pkgs/applications/science
parent995d005d842bc9f6d0fd73383cd1643f6b0e18ec (diff)
downloadnixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.tar
nixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.tar.gz
nixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.tar.bz2
nixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.tar.lz
nixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.tar.xz
nixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.tar.zst
nixlib-b7e50d52f018d0670614a58851b4fc2c0f93818b.zip
caffe: add darwin support (#44616)
Diffstat (limited to 'pkgs/applications/science')
-rw-r--r--pkgs/applications/science/math/caffe/darwin.patch47
-rw-r--r--pkgs/applications/science/math/caffe/default.nix51
2 files changed, 89 insertions, 9 deletions
diff --git a/pkgs/applications/science/math/caffe/darwin.patch b/pkgs/applications/science/math/caffe/darwin.patch
new file mode 100644
index 000000000000..e8fa6a683f73
--- /dev/null
+++ b/pkgs/applications/science/math/caffe/darwin.patch
@@ -0,0 +1,47 @@
+diff --git a/Makefile b/Makefile
+index c823f66e..65b90c5e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -32,9 +32,9 @@ SRC_DIRS := $(shell find * -type d -exec bash -c "find {} -maxdepth 1 \
+ LIBRARY_NAME := $(PROJECT)
+ LIB_BUILD_DIR := $(BUILD_DIR)/lib
+ STATIC_NAME := $(LIB_BUILD_DIR)/lib$(LIBRARY_NAME).a
+-DYNAMIC_VERSION_MAJOR 		:= 1
+-DYNAMIC_VERSION_MINOR 		:= 0
+-DYNAMIC_VERSION_REVISION 	:= 0
++DYNAMIC_VERSION_MAJOR		:= 1
++DYNAMIC_VERSION_MINOR		:= 0
++DYNAMIC_VERSION_REVISION	:= 0
+ DYNAMIC_NAME_SHORT := lib$(LIBRARY_NAME).so
+ #DYNAMIC_SONAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR)
+ DYNAMIC_VERSIONED_NAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION)
+diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake
+index c48255c8..cf4c580e 100644
+--- a/cmake/Dependencies.cmake
++++ b/cmake/Dependencies.cmake
+@@ -105,7 +105,6 @@ if(USE_OPENCV)
+ endif()
+ 
+ # ---[ BLAS
+-if(NOT APPLE)
+   set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
+   set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")
+ 
+@@ -123,17 +122,6 @@ if(NOT APPLE)
+     list(APPEND Caffe_LINKER_LIBS PUBLIC ${MKL_LIBRARIES})
+     list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_MKL)
+   endif()
+-elseif(APPLE)
+-  find_package(vecLib REQUIRED)
+-  list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${vecLib_INCLUDE_DIR})
+-  list(APPEND Caffe_LINKER_LIBS PUBLIC ${vecLib_LINKER_LIBS})
+-
+-  if(VECLIB_FOUND)
+-    if(NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*")
+-      list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_ACCELERATE)
+-    endif()
+-  endif()
+-endif()
+ 
+ # ---[ Python
+ if(BUILD_python)
diff --git a/pkgs/applications/science/math/caffe/default.nix b/pkgs/applications/science/math/caffe/default.nix
index d7357c5048d5..e56c63e01bf0 100644
--- a/pkgs/applications/science/math/caffe/default.nix
+++ b/pkgs/applications/science/math/caffe/default.nix
@@ -1,27 +1,39 @@
-{ stdenv, lib
+{ stdenv, lib, runCommand
 , fetchFromGitHub
+, fetchurl
 , cmake
 , boost
 , google-gflags
 , glog
 , hdf5-cpp
-, leveldb
-, lmdb
 , opencv3
 , protobuf
-, snappy
 , doxygen
 , openblas
-, cudaSupport ? true, cudatoolkit
+, Accelerate, CoreGraphics, CoreVideo
+, lmdbSupport ? true, lmdb
+, leveldbSupport ? true, leveldb, snappy
+, cudaSupport ? stdenv.isLinux, cudatoolkit
 , cudnnSupport ? false, cudnn ? null
 , ncclSupport ? false, nccl ? null
 , pythonSupport ? false, python ? null, numpy ? null
 }:
 
+assert leveldbSupport -> (leveldb != null && snappy != null);
 assert cudnnSupport -> cudaSupport;
 assert ncclSupport -> cudaSupport;
 assert pythonSupport -> (python != null && numpy != null);
 
+let
+  toggle = bool: if bool then "ON" else "OFF";
+
+  test_model_weights = fetchurl {
+    url = "http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel";
+    sha256 = "472d4a06035497b180636d8a82667129960371375bd10fcb6df5c6c7631f25e0";
+  };
+
+in
+
 stdenv.mkDerivation rec {
   name = "caffe-${version}";
   version = "1.0";
@@ -44,19 +56,27 @@ stdenv.mkDerivation rec {
            "-DCUDA_ARCH_NAME=All"
            "-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/cc"
          ] else [ "-DCPU_ONLY=ON" ])
-      ++ lib.optional ncclSupport "-DUSE_NCCL=ON";
+      ++ ["-DUSE_NCCL=${toggle ncclSupport}"]
+      ++ ["-DUSE_LEVELDB=${toggle leveldbSupport}"]
+      ++ ["-DUSE_LMDB=${toggle lmdbSupport}"];
 
-  buildInputs = [ boost google-gflags glog protobuf hdf5-cpp lmdb leveldb snappy opencv3 openblas ]
+  buildInputs = [ boost google-gflags glog protobuf hdf5-cpp opencv3 openblas ]
                 ++ lib.optional cudaSupport cudatoolkit
                 ++ lib.optional cudnnSupport cudnn
+                ++ lib.optional lmdbSupport lmdb
                 ++ lib.optional ncclSupport nccl
-                ++ lib.optionals pythonSupport [ python numpy ];
+                ++ lib.optionals leveldbSupport [ leveldb snappy ]
+                ++ lib.optionals pythonSupport [ python numpy ]
+                ++ lib.optionals stdenv.isDarwin [ Accelerate CoreGraphics CoreVideo ]
+                ;
 
   propagatedBuildInputs = lib.optional pythonSupport python.pkgs.protobuf;
 
   outputs = [ "bin" "out"];
   propagatedBuildOutputs = []; # otherwise propagates out -> bin cycle
 
+  patches = [ ./darwin.patch ];
+
   preConfigure = lib.optionalString (cudaSupport && lib.versionAtLeast cudatoolkit.version "9.0") ''
     # CUDA 9.0 doesn't support sm_20
     sed -i 's,20 21(20) ,,' cmake/Cuda.cmake
@@ -71,6 +91,9 @@ stdenv.mkDerivation rec {
     # Internal static library.
     rm $out/lib/libproto.a
 
+    # Install models
+    cp -a ../models $out/share/Caffe/models
+
     moveToOutput "bin" "$bin"
   '' + lib.optionalString pythonSupport ''
     mkdir -p $out/${python.sitePackages}
@@ -78,6 +101,16 @@ stdenv.mkDerivation rec {
     rm -rf $out/python
   '';
 
+  doInstallCheck = false; # build takes more than 30 min otherwise
+  installCheckPhase = ''
+    model=bvlc_reference_caffenet
+    m_path="$out/share/Caffe/models/$model"
+    $bin/bin/caffe test \
+      -model "$m_path/deploy.prototxt" \
+      -solver "$m_path/solver.prototxt" \
+      -weights "${test_model_weights}"
+  '';
+
   meta = with stdenv.lib; {
     description = "Deep learning framework";
     longDescription = ''
@@ -88,6 +121,6 @@ stdenv.mkDerivation rec {
     homepage = http://caffe.berkeleyvision.org/;
     maintainers = with maintainers; [ jb55 ];
     license = licenses.bsd2;
-    platforms = platforms.linux;
+    platforms = platforms.linux ++ platforms.darwin;
   };
 }