about summary refs log tree commit diff
path: root/pkgs/development/libraries/vectorscan/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/vectorscan/default.nix')
-rw-r--r--pkgs/development/libraries/vectorscan/default.nix50
1 files changed, 41 insertions, 9 deletions
diff --git a/pkgs/development/libraries/vectorscan/default.nix b/pkgs/development/libraries/vectorscan/default.nix
index 12fa0735b27f1..e9724ced0c70f 100644
--- a/pkgs/development/libraries/vectorscan/default.nix
+++ b/pkgs/development/libraries/vectorscan/default.nix
@@ -2,39 +2,71 @@
 , stdenv
 , fetchFromGitHub
 , cmake
+, pkg-config
 , ragel
 , util-linux
 , python3
-, boost
+, boost184
+, sqlite
+, pcre
 , enableShared ? !stdenv.hostPlatform.isStatic
 }:
 
 stdenv.mkDerivation rec {
   pname = "vectorscan";
-  version = "5.4.10.1";
+  version = "5.4.11";
 
   src = fetchFromGitHub {
     owner = "VectorCamp";
     repo = "vectorscan";
     rev = "vectorscan/${version}";
-    hash = "sha256-x6FefOrUvpN/A4GXTd+3SGZEAQL6pXt83ufxRIY3Q9k=";
+    hash = "sha256-wz2oIhau/vjnri3LOyPZSCFAWg694FTLVt7+SZYEsL4=";
   };
 
   nativeBuildInputs = [
     cmake
+    pkg-config
     ragel
     python3
   ] ++ lib.optional stdenv.isLinux util-linux;
 
   buildInputs = [
-    boost
+    boost184
+    sqlite
+    pcre
   ];
 
-  cmakeFlags = lib.optional enableShared "-DBUILD_STATIC_AND_SHARED=ON"
-    ++ [ "-DFAT_RUNTIME=${if stdenv.hostPlatform.isLinux then "ON" else "OFF"}" ]
-    ++ lib.optional stdenv.hostPlatform.avx2Support "-DBUILD_AVX2=ON"
-    ++ lib.optional stdenv.hostPlatform.avx512Support "-DBUILD_AVX512=ON"
-  ;
+  # FAT_RUNTIME bundles optimized implementations for different CPU extensions and uses CPUID to
+  # transparently select the fastest for the current hardware.
+  # This feature is only available on linux for x86, x86_64, and aarch64.
+  #
+  # If FAT_RUNTIME is not available, we fall back to building for a single extension based
+  # on stdenv.hostPlatform.
+  #
+  # For generic builds (e.g. x86_64) this can mean using an implementation not optimized for the
+  # potentially available more modern hardware extensions (e.g. x86_64 with AVX512).
+  cmakeFlags = [ (if enableShared then "-DBUILD_SHARED_LIBS=ON" else "BUILD_STATIC_LIBS=ON") ]
+    ++
+    (if lib.elem stdenv.hostPlatform.system [ "x86_64-linux" "i686-linux" ] then
+      [ "-DBUILD_AVX2=ON" "-DBUILD_AVX512=ON" "-DBUILD_AVX512VBMI=ON" "-DFAT_RUNTIME=ON" ]
+    else
+      (if (stdenv.isLinux && stdenv.isAarch64) then
+        [ "-DBUILD_SVE=ON" "-DBUILD_SVE2=ON" "-DBUILD_SVE2_BITPERM=ON" "-DFAT_RUNTIME=ON" ]
+      else
+        [ "-DFAT_RUNTIME=OFF" ]
+          ++ lib.optional stdenv.hostPlatform.avx2Support "-DBUILD_AVX2=ON"
+          ++ lib.optional stdenv.hostPlatform.avx512Support "-DBUILD_AVX512=ON"
+      )
+    );
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    ./bin/unit-hyperscan
+
+    runHook postCheck
+  '';
 
   meta = with lib; {
     description = "A portable fork of the high-performance regular expression matching library";