diff --git a/doc/package-notes.xml b/doc/package-notes.xml
index dfdada3d28c2..169f70283e6d 100644
--- a/doc/package-notes.xml
+++ b/doc/package-notes.xml
@@ -883,6 +883,33 @@ citrix_receiver.override {
On NixOS it can be installed using the following expression:
{ pkgs, ... }: {
fonts.fonts = with pkgs; [ noto-fonts-emoji ];
+}
+
+
+
+
+ DLib
+
+
+ DLib is a modern, C++-based toolkit which
+ provides several machine learning algorithms.
+
+
+
+ Compiling without AVX support
+
+
+ Especially older CPUs don't support
+ AVX
+ (Advanced Vector Extensions) instructions that are used by DLib to
+ optimize their algorithms.
+
+
+
+ On the affected hardware errors like Illegal instruction will occur.
+ In those cases AVX support needs to be disabled:
+self: super: {
+ dlib = super.dlib.override { avxSupport = false; };
}
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 ];
diff --git a/pkgs/development/python-modules/face_recognition/default.nix b/pkgs/development/python-modules/face_recognition/default.nix
index b532c7d19f73..2856eeeab1b9 100644
--- a/pkgs/development/python-modules/face_recognition/default.nix
+++ b/pkgs/development/python-modules/face_recognition/default.nix
@@ -4,13 +4,13 @@
buildPythonPackage rec {
pname = "face_recognition";
- version = "1.2.2";
+ version = "1.2.3";
src = fetchFromGitHub {
repo = pname;
owner = "ageitgey";
- rev = "v${version}";
- sha256 = "17jnyr80j1p74gyvh1jabvwd3zsxvip2y7cjhh2g6gsjv2dpvrjv";
+ rev = "634db2e4309a365cee2503cb65d6f2e88f519d1e";
+ sha256 = "06zw5hq417d5yp17zynhxhb73074lx2qy64fqfzf711rw5vrn2mx";
};
postPatch = ''
@@ -19,6 +19,15 @@ buildPythonPackage rec {
propagatedBuildInputs = [ pillow click dlib numpy face_recognition_models ];
+ # Our dlib is compiled with AVX instructions by default which breaks
+ # with "Illegal instruction" on some builders due to missing hardware features.
+ #
+ # As this makes the build fairly unreliable, it's better to skip the test and to ensure that
+ # the build is working and after each change to the package, manual testing should be done.
+ doCheck = false;
+
+ # Although tests are disabled by default, checkPhase still exists, so
+ # maintainers can check the package's functionality locally before modifying it.
checkInputs = [ flake8 pytest glibcLocales ];
checkPhase = ''
LC_ALL="en_US.UTF-8" py.test