Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a5ebf4a
commit f8c4890
Showing
3 changed files
with
202 additions
and
0 deletions.
There are no files selected for viewing
140 changes: 140 additions & 0 deletions
140
pkgs/development/libraries/science/math/caffe2/default.nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
{ stdenv, lib, config, fetchFromGitHub | ||
, cmake | ||
, glog, google-gflags, gtest | ||
, protobuf, snappy | ||
, python, future, six, python-protobuf, numpy, pydot | ||
, eigen3 | ||
, doxygen | ||
, useCuda ? (config.cudaSupport or false), cudatoolkit ? null | ||
, useCudnn ? (config.cudnnSupport or false), cudnn ? null | ||
, useOpenmp ? false, openmp ? null | ||
, useOpencv3 ? true, opencv3 ? null | ||
, useLeveldb ? false, leveldb ? null | ||
, useLmdb ? true, lmdb ? null | ||
, useRocksdb ? false, rocksdb ? null | ||
, useZeromq ? false, zeromq ? null | ||
, useMpi ? false, mpi ? null | ||
# TODO: distributed computations | ||
#, useGloo ? false | ||
#, useNccl ? false | ||
#, useNnpack ? false | ||
}: | ||
|
||
assert useCuda -> cudatoolkit != null; | ||
assert useCudnn -> (useCuda && cudnn != null); | ||
assert useOpencv3 -> opencv3 != null; | ||
assert useLeveldb -> leveldb != null; | ||
assert useLmdb -> lmdb != null; | ||
assert useRocksdb -> rocksdb != null; | ||
assert useZeromq -> zeromq != null; | ||
assert useMpi -> mpi != null; | ||
|
||
let | ||
# Third party modules that caffe2 holds as git submodules. | ||
# Download them and create symlinks from caffe2/third_party. | ||
installExtraSrc = extra: '' | ||
rmdir "third_party/${extra.dst}" | ||
ln -s "${extra.src}" "third_party/${extra.dst}" | ||
''; | ||
|
||
cub = { | ||
src = fetchFromGitHub rec { | ||
owner = "NVlabs"; | ||
repo = "cub"; | ||
rev = "v1.7.4"; | ||
sha256 = "0ksd5n1lxqhm5l5cd2lps4cszhjkf6gmzahaycs7nxb06qci8c66"; | ||
}; | ||
dst = "cub"; | ||
}; | ||
|
||
pybind11 = { | ||
src = fetchFromGitHub { | ||
owner = "pybind"; | ||
repo = "pybind11"; | ||
rev = "86e2ad4f77442c3350f9a2476650da6bee253c52"; | ||
sha256 = "05gi58dirvc8fgm0avpydvidzsbh2zrzgfaq671ym09f6dz0bcgz"; | ||
}; | ||
dst = "pybind11"; | ||
}; | ||
in | ||
|
||
stdenv.mkDerivation rec { | ||
name = "caffe2-${version}"; | ||
version = "0.8.1"; | ||
src = fetchFromGitHub { | ||
owner = "caffe2"; | ||
repo = "caffe2"; | ||
rev = "v${version}"; | ||
sha256 = "18y7zjc69j6n5642l9caddl641b0djf3pjn4wacdsc1wk1jiyqk8"; | ||
}; | ||
|
||
nativeBuildInputs = [ cmake doxygen gtest ]; | ||
outputs = [ "bin" "out" ]; | ||
propagatedBuildOutputs = [ ]; # otherwise propagates out -> bin cycle | ||
|
||
buildInputs = [ glog google-gflags protobuf snappy eigen3 ] | ||
++ lib.optional useCuda cudatoolkit | ||
++ lib.optional useCudnn cudnn | ||
++ lib.optional useOpenmp openmp | ||
++ lib.optional useOpencv3 opencv3 | ||
++ lib.optional useLeveldb leveldb | ||
++ lib.optional useLmdb lmdb | ||
++ lib.optional useRocksdb rocksdb | ||
++ lib.optional useZeromq zeromq | ||
; | ||
propagatedBuildInputs = [ numpy future six python-protobuf pydot ]; | ||
|
||
patches = lib.optional stdenv.cc.isClang [ ./update_clang_cvtsh_bugfix.patch ]; | ||
|
||
cmakeFlags = [ ''-DBUILD_TEST=OFF'' | ||
''-DBUILD_PYTHON=ON'' | ||
''-DUSE_CUDA=${if useCuda then ''ON''else ''OFF''}'' | ||
''-DUSE_OPENMP=${if useOpenmp then ''ON''else ''OFF''}'' | ||
''-DUSE_OPENCV=${if useOpencv3 then ''ON''else ''OFF''}'' | ||
''-DUSE_MPI=${if useMpi then ''ON''else ''OFF''}'' | ||
''-DUSE_LEVELDB=${if useLeveldb then ''ON''else ''OFF''}'' | ||
''-DUSE_LMDB=${if useLmdb then ''ON''else ''OFF''}'' | ||
''-DUSE_ROCKSDB=${if useRocksdb then ''ON''else ''OFF''}'' | ||
''-DUSE_ZMQ=${if useZeromq then ''ON''else ''OFF''}'' | ||
''-DUSE_GLOO=OFF'' | ||
''-DUSE_NNPACK=OFF'' | ||
''-DUSE_NCCL=OFF'' | ||
''-DUSE_REDIS=OFF'' | ||
''-DUSE_FFMPEG=OFF'' | ||
] | ||
++ lib.optional useCuda [ | ||
''-DCUDA_TOOLKIT_ROOT_DIR=${cudatoolkit}'' | ||
''-DCUDA_FAST_MATH=ON'' | ||
''-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/gcc'' | ||
]; | ||
|
||
preConfigure = '' | ||
${installExtraSrc cub} | ||
${installExtraSrc pybind11} | ||
# XXX hack | ||
export NIX_CFLAGS_COMPILE="-I ${eigen3}/include/eigen3/ $NIX_CFLAGS_COMPILE" | ||
''; | ||
|
||
postInstall = '' | ||
moveToOutput "bin" "$bin" | ||
mkdir -p $out/lib/${python.libPrefix} | ||
ln -s $out/ $out/${python.sitePackages} | ||
''; | ||
|
||
doCheck = false; | ||
enableParallelBuilding = true; | ||
|
||
meta = { | ||
homepage = https://caffe2.ai/; | ||
description = "A new lightweight, modular, and scalable deep learning framework"; | ||
longDescription = '' | ||
Caffe2 aims to provide an easy and straightforward way for you to experiment | ||
with deep learning and leverage community contributions of new models and | ||
algorithms. You can bring your creations to scale using the power of GPUs in the | ||
cloud or to the masses on mobile with Caffe2's cross-platform libraries. | ||
''; | ||
platforms = with stdenv.lib.platforms; linux ++ darwin; | ||
license = stdenv.lib.licenses.asl20; | ||
maintainers = with stdenv.lib.maintainers; [ yuriaisaka ]; | ||
}; | ||
} |
55 changes: 55 additions & 0 deletions
55
pkgs/development/libraries/science/math/caffe2/update_clang_cvtsh_bugfix.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
diff --git a/caffe2/perfkernels/cvtsh_ss_bugfix.h b/caffe2/perfkernels/cvtsh_ss_bugfix.h | ||
index bd06681..00172b7 100644 | ||
--- a/caffe2/perfkernels/cvtsh_ss_bugfix.h | ||
+++ b/caffe2/perfkernels/cvtsh_ss_bugfix.h | ||
@@ -1,10 +1,36 @@ | ||
+/** | ||
+ * Copyright (c) 2016-present, Facebook, Inc. | ||
+ * | ||
+ * Licensed under the Apache License, Version 2.0 (the "License"); | ||
+ * you may not use this file except in compliance with the License. | ||
+ * You may obtain a copy of the License at | ||
+ * | ||
+ * http://www.apache.org/licenses/LICENSE-2.0 | ||
+ * | ||
+ * Unless required by applicable law or agreed to in writing, software | ||
+ * distributed under the License is distributed on an "AS IS" BASIS, | ||
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
+ * See the License for the specific language governing permissions and | ||
+ * limitations under the License. | ||
+ */ | ||
+ | ||
#pragma once | ||
|
||
-#if defined(__APPLE__) && (__clang_major__ < 8) | ||
+// Apple clang was fixed in 8.1 | ||
+#if defined(__apple_build_version__) && ((__clang_major__ < 8) || ((__clang_major__ == 8) && (__clang_minor__ < 1))) | ||
+#define __APPLE_NEED_FIX 1 | ||
+#endif | ||
+ | ||
+// Regular clang was fixed in 3.9 | ||
+#if defined(__clang__) && (__clang_major__ < 4) && (__clang_minor__ < 9) | ||
+#define __CLANG_NEED_FIX 1 | ||
+#endif | ||
+ | ||
+#if __APPLE_NEED_FIX || __CLANG_NEED_FIX | ||
|
||
#include <emmintrin.h> | ||
|
||
-// This version of apple clang has a bug that _cvtsh_ss is not defined, see | ||
+// This version of clang has a bug that _cvtsh_ss is not defined, see | ||
// https://reviews.llvm.org/D16177 | ||
static __inline float | ||
__attribute__((__always_inline__, __nodebug__, __target__("f16c"))) | ||
@@ -15,7 +41,10 @@ _cvtsh_ss(unsigned short a) | ||
return r[0]; | ||
} | ||
|
||
-#endif // defined(__APPLE__) && (__clang_major__ < 8) | ||
+#endif // __APPLE_NEED_FIX || __CLANG_NEED_FIX | ||
+ | ||
+#undef __APPLE_NEED_FIX | ||
+#undef __CLANG_NEED_FIX | ||
|
||
#ifdef _MSC_VER | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters