diff --git a/pkgs/development/libraries/hnswlib/default.nix b/pkgs/development/libraries/hnswlib/default.nix new file mode 100644 index 000000000000..c3a543972e06 --- /dev/null +++ b/pkgs/development/libraries/hnswlib/default.nix @@ -0,0 +1,66 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, python3 +}: +let + python = python3.withPackages(ps: with ps; [ + numpy + ]); +in + +stdenv.mkDerivation (finalAttrs: { + pname = "hnswlib"; + version = "0.7.0"; + + src = fetchFromGitHub { + owner = "nmslib"; + repo = "hnswlib"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-XXz0NIQ5dCGwcX2HtbK5NFTalP0TjLO6ll6TmH3oflI="; + }; + + # this is a header-only library, so we don't need to build it + # we need `cmake` only to run tests + nativeBuildInputs = lib.optionals finalAttrs.doCheck [ + cmake + python + ]; + + # we only want to run buildPhase when we run tests + dontBuild = !finalAttrs.doCheck; + + installPhase = '' + runHook preInstall + + install -Dm644 $src/hnswlib/*.h -t $out/include/hnswlib + + runHook postInstall + ''; + + doCheck = true; + + preCheck = '' + pushd ../tests/cpp + ${python.interpreter} update_gen_data.py + popd + ''; + + checkPhase = '' + runHook preCheck + + ./test_updates + + runHook postCheck + ''; + + meta = with lib; { + description = "Header-only C++/python library for fast approximate nearest neighbors"; + homepage = "https://github.com/nmslib/hnswlib"; + changelog = "https://github.com/nmslib/hnswlib/releases/tag/${finalAttrs.src.rev}"; + license = licenses.asl20; + maintainers = with maintainers; [ natsukium ]; + platforms = platforms.unix; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d19a2ca33e57..4c48b73f18c0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21273,6 +21273,8 @@ with pkgs; graphinder = callPackage ../tools/security/graphinder { }; + hnswlib = callPackage ../development/libraries/hnswlib { }; + httplib = callPackage ../development/libraries/httplib { }; icon-lang = callPackage ../development/interpreters/icon-lang { };