diff options
author | Maximilian Bosch <maximilian@mbosch.me> | 2019-03-03 14:21:04 +0100 |
---|---|---|
committer | Maximilian Bosch <maximilian@mbosch.me> | 2019-03-03 15:35:58 +0100 |
commit | 9732c44225910d5726ff95a7ab8c9a4684dfec4d (patch) | |
tree | 45db82d442400acf5ad543b4ed5e1bd6f8e72a9b | |
parent | 77edcf88dca0de15a2bcf34f8d94f02d1fbd4eab (diff) | |
download | nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.tar nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.tar.gz nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.tar.bz2 nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.tar.lz nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.tar.xz nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.tar.zst nixlib-9732c44225910d5726ff95a7ab8c9a4684dfec4d.zip |
dlib: add flag to disable AVX support
Especially older hardware doesn't support AVX instructions. DLib is still functional there, but significantly slower[1]. By setting `avxInstructions` to false, DLib will be compiled without this feature. [1] http://dlib.net/compile.html
-rw-r--r-- | doc/package-notes.xml | 27 | ||||
-rw-r--r-- | pkgs/development/libraries/dlib/default.nix | 5 | ||||
-rw-r--r-- | pkgs/development/python-modules/dlib/default.nix | 7 |
3 files changed, 38 insertions, 1 deletions
diff --git a/doc/package-notes.xml b/doc/package-notes.xml index e23593107d8d..c93f99d256b9 100644 --- a/doc/package-notes.xml +++ b/doc/package-notes.xml @@ -886,4 +886,31 @@ citrix_receiver.override { </para> </section> </section> + <section xml:id="dlib"> + <title>DLib</title> + + <para> + <link xlink:href="http://dlib.net/">DLib</link> is a modern, C++-based toolkit which + provides several machine learning algorithms. + </para> + + <section xml:id="compiling-without-avx-support"> + <title>Compiling without AVX support</title> + + <para> + Especially older CPUs don't support + <link xlink:href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">AVX</link> + (<abbrev>Advanced Vector Extensions</abbrev>) instructions that are used by DLib to + optimize their algorithms. + </para> + + <para> + On the affected hardware errors like <literal>Illegal instruction</literal> will occur. + In those cases AVX support needs to be disabled: +<programlisting>self: super: { + dlib = super.dlib.override { avxSupport = false; }; +}</programlisting> + </para> + </section> + </section> </chapter> diff --git a/pkgs/development/libraries/dlib/default.nix b/pkgs/development/libraries/dlib/default.nix index a88b3f1b9b68..67a56855bb79 100644 --- a/pkgs/development/libraries/dlib/default.nix +++ b/pkgs/development/libraries/dlib/default.nix @@ -1,5 +1,8 @@ { stdenv, lib, fetchFromGitHub, cmake, pkgconfig, libpng, libjpeg , guiSupport ? false, libX11 + + # see http://dlib.net/compile.html +, avxSupport ? true }: stdenv.mkDerivation rec { @@ -17,6 +20,8 @@ stdenv.mkDerivation rec { rm -rf dlib/external ''; + cmakeFlags = [ "-DUSE_AVX_INSTRUCTIONS=${if avxSupport then "yes" else "no"}" ]; + enableParallelBuilding = true; nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ libpng libjpeg ] ++ lib.optional guiSupport libX11; diff --git a/pkgs/development/python-modules/dlib/default.nix b/pkgs/development/python-modules/dlib/default.nix index 90e2c526789f..c200b6959b64 100644 --- a/pkgs/development/python-modules/dlib/default.nix +++ b/pkgs/development/python-modules/dlib/default.nix @@ -1,12 +1,17 @@ -{ buildPythonPackage, dlib, python, pytest }: +{ buildPythonPackage, dlib, python, pytest, avxSupport ? true }: buildPythonPackage { inherit (dlib) name src nativeBuildInputs buildInputs meta; + # although AVX can be enabled, we never test with it. Some Hydra machines + # fail because of this, however their build results are probably used on hardware + # with AVX support. checkPhase = '' ${python.interpreter} nix_run_setup test --no USE_AVX_INSTRUCTIONS ''; + setupPyBuildFlags = [ "--${if avxSupport then "yes" else "no"} USE_AVX_INSTRUCTIONS" ]; + patches = [ ./build-cores.patch ]; checkInputs = [ pytest ]; |