Files
nixpkgs/pkgs/by-name/tu/turingdb/package.nix

153 lines
3.7 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
cmake,
pkg-config,
python3,
gitMinimal,
bison,
flex,
inih,
minio-cpp,
arrow-cpp,
curl,
curlpp,
nlohmann_json,
openssl,
openblas,
pugixml,
faiss,
zlib,
llvmPackages_20,
versionCheckHook,
config,
cudaSupport ? config.cudaSupport,
cudaPackages,
}:
let
turingstdenv =
if stdenv.hostPlatform.isDarwin then
llvmPackages_20.stdenv
else if cudaSupport then
cudaPackages.backendStdenv
else
stdenv;
in
turingstdenv.mkDerivation (finalAttrs: {
pname = "turingdb";
version = "1.33";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "turing-db";
repo = "turingdb";
tag = "v${finalAttrs.version}";
hash = "sha256-osxz5x8lxMZM5/qTc5Xx3YDMMPeGYyN2aO9pX+kERgo=";
fetchSubmodules = true;
leaveDotGit = true;
postFetch = ''
git -C $out log -1 --format=%H > $out/HEAD_COMMIT_HASH
git -C $out log -1 --format=%ct > $out/HEAD_COMMIT_TIMESTAMP
rm -rf $out/.git
'';
};
postPatch = ''
substituteInPlace storage/dump/DumpConfig.h \
--replace-fail HEAD_COMMIT_TIMESTAMP "$(cat $src/HEAD_COMMIT_TIMESTAMP)"
substituteInPlace io/parquet/CMakeLists.txt \
--replace-fail "Parquet::parquet_static" "Parquet::parquet_shared"
substituteInPlace CMakeLists.txt \
--replace-fail 'COMMAND git rev-parse HEAD' 'COMMAND cat HEAD_COMMIT_HASH' \
--replace-fail 'COMMAND git show --no-patch --format=%at' 'COMMAND cat HEAD_COMMIT_TIMESTAMP'
substituteInPlace tools/turingdb/TuringDBTool.cpp \
--replace-fail '"turingdb", "1.0"' '"turingdb", "${finalAttrs.version}"'
for dir in test samples regress fuzz examples; do
substituteInPlace CMakeLists.txt --replace-fail "add_subdirectory($dir)" ""
done
'';
strictDeps = true;
nativeBuildInputs = [
bison
cmake
flex
gitMinimal
pkg-config
python3
]
++ lib.optionals cudaSupport [
# Needed by transitive dependency faiss
cudaPackages.cuda_nvcc
];
buildInputs = [
arrow-cpp
curl
curlpp
faiss
inih
minio-cpp
nlohmann_json
openblas
openssl
pugixml
zlib
]
++ lib.optionals turingstdenv.hostPlatform.isDarwin [ llvmPackages_20.openmp ]
++ lib.optionals stdenv.hostPlatform.isLinux [ stdenv.cc.cc.lib ]
++ lib.optionals cudaSupport [
cudaPackages.cuda_cudart
cudaPackages.libcublas
];
cmakeFlags = [
(lib.cmakeBool "NIX_BUILD" true)
(lib.cmakeFeature "CMAKE_CXX_FLAGS" "-fopenmp")
(lib.cmakeFeature "CMAKE_EXE_LINKER_FLAGS" "-lgomp")
(lib.cmakeFeature "FLEX_INCLUDE_DIR" "${lib.getDev flex}/include")
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
(lib.cmakeFeature "OpenMP_CXX_FLAGS" "-fopenmp")
(lib.cmakeFeature "OpenMP_CXX_LIB_NAMES" "omp")
(lib.cmakeFeature "OpenMP_omp_LIBRARY" "${lib.getLib llvmPackages_20.openmp}/lib/libomp.dylib")
];
nativeInstallCheckInputs = [ versionCheckHook ];
# Upstream tests require running a TuringDB server and performing
# network operations, which are incompatible with the Nix build sandbox.
doCheck = false;
meta = {
description = "High performance in-memory column-oriented graph database engine";
longDescription = ''
TuringDB is a high-performance in-memory column-oriented graph
database engine designed for analytical and read-intensive workloads.
'';
homepage = "https://turingdb.ai";
changelog = "https://github.com/turing-db/turingdb/releases/tag/v${finalAttrs.version}";
license = lib.licenses.bsl11;
platforms = [
"x86_64-linux"
"aarch64-darwin"
];
mainProgram = "turingdb";
maintainers = with lib.maintainers; [
cyrusknopf
drupol
roquess
];
};
})