foundationdb: move to pkgs/by-name (#396805)

This commit is contained in:
Jonas Heinrich 2025-04-26 00:34:53 +02:00 committed by GitHub
commit f3ddc7475d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 180 additions and 241 deletions

View file

@ -0,0 +1,175 @@
{
stdenv,
fetchFromGitHub,
lib,
fetchpatch,
cmake,
ninja,
python3,
openjdk,
mono,
openssl,
boost186,
pkg-config,
msgpack-cxx,
toml11,
jemalloc,
doctest,
}:
let
boost = boost186;
# Only even numbered versions compile on aarch64; odd numbered versions have avx enabled.
avxEnabled =
version:
let
isOdd = n: lib.trivial.mod n 2 != 0;
patch = lib.toInt (lib.versions.patch version);
in
isOdd patch;
in
stdenv.mkDerivation rec {
name = "foundationdb";
version = "7.3.42";
src = fetchFromGitHub {
owner = "apple";
repo = "foundationdb";
tag = version;
hash = "sha256-jQcm+HLai5da2pZZ7iLdN6fpQZxf5+/kkfv9OSXQ57c=";
};
patches = [
./disable-flowbench.patch
./don-t-use-static-boost-libs.patch
# GetMsgpack: add 4+ versions of upstream
# https://github.com/apple/foundationdb/pull/10935
(fetchpatch {
url = "https://github.com/apple/foundationdb/commit/c35a23d3f6b65698c3b888d76de2d93a725bff9c.patch";
hash = "sha256-bneRoZvCzJp0Hp/G0SzAyUyuDrWErSpzv+ickZQJR5w=";
})
# Add a dependency that prevents bindingtester to run before the python bindings are generated
# https://github.com/apple/foundationdb/pull/11859
(fetchpatch {
url = "https://github.com/apple/foundationdb/commit/8d04c97a74c6b83dd8aa6ff5af67587044c2a572.patch";
hash = "sha256-ZLIcmcfirm1+96DtTIr53HfM5z38uTLZrRNHAmZL6rc=";
})
];
hardeningDisable = [ "fortify" ];
postPatch = ''
# allow using any msgpack-cxx version
substituteInPlace cmake/GetMsgpack.cmake \
--replace-warn 'find_package(msgpack-cxx 6 QUIET CONFIG)' 'find_package(msgpack-cxx QUIET CONFIG)'
# Use our doctest package
substituteInPlace bindings/c/test/unit/third_party/CMakeLists.txt \
--replace-fail '/opt/doctest_proj_2.4.8' '${doctest}/include'
# Upstream upgraded to Boost 1.86 with no code changes; see:
# <https://github.com/apple/foundationdb/pull/11788>
substituteInPlace cmake/CompileBoost.cmake \
--replace-fail 'find_package(Boost 1.78.0 EXACT ' 'find_package(Boost '
'';
buildInputs = [
boost
jemalloc
msgpack-cxx
openssl
toml11
];
checkInputs = [ doctest ];
nativeBuildInputs = [
cmake
mono
ninja
openjdk
pkg-config
python3
];
separateDebugInfo = true;
dontFixCmake = true;
cmakeFlags = [
"-DFDB_RELEASE=TRUE"
# Disable CMake warnings for project developers.
"-Wno-dev"
# CMake Error at fdbserver/CMakeLists.txt:332 (find_library):
# > Could not find lz4_STATIC_LIBRARIES using the following names: liblz4.a
"-DSSD_ROCKSDB_EXPERIMENTAL=FALSE"
"-DBUILD_DOCUMENTATION=FALSE"
# LTO brings up overall build time, but results in much smaller
# binaries for all users and the cache.
"-DUSE_LTO=ON"
# Gold helps alleviate the link time, especially when LTO is
# enabled. But even then, it still takes a majority of the time.
"-DUSE_LD=GOLD"
# FIXME: why can't openssl be found automatically?
"-DOPENSSL_USE_STATIC_LIBS=FALSE"
"-DOPENSSL_CRYPTO_LIBRARY=${openssl.out}/lib/libcrypto.so"
"-DOPENSSL_SSL_LIBRARY=${openssl.out}/lib/libssl.so"
];
# the install phase for cmake is pretty wonky right now since it's not designed to
# coherently install packages as most linux distros expect -- it's designed to build
# packaged artifacts that are shipped in RPMs, etc. we need to add some extra code to
# cmake upstream to fix this, and if we do, i think most of this can go away.
postInstall = ''
mv $out/sbin/fdbmonitor $out/bin/fdbmonitor
mkdir $out/libexec && mv $out/usr/lib/foundationdb/backup_agent/backup_agent $out/libexec/backup_agent
mv $out/sbin/fdbserver $out/bin/fdbserver
rm -rf $out/etc $out/lib/foundationdb $out/lib/systemd $out/log $out/sbin $out/usr $out/var
# move results into multi outputs
mkdir -p $dev $lib
mv $out/include $dev/include
mv $out/lib $lib/lib
# python bindings
# NB: use the original setup.py.in, so we can substitute VERSION correctly
cp ../LICENSE ./bindings/python
substitute ../bindings/python/setup.py.in ./bindings/python/setup.py \
--replace 'VERSION' "${version}"
rm -f ./bindings/python/setup.py.* ./bindings/python/CMakeLists.txt
rm -f ./bindings/python/fdb/*.pth # remove useless files
rm -f ./bindings/python/*.rst ./bindings/python/*.mk
cp -R ./bindings/python/ tmp-pythonsrc/
tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/
# java bindings
mkdir -p $lib/share/java
mv lib/fdb-java-*.jar $lib/share/java/fdb-java.jar
'';
outputs = [
"out"
"dev"
"lib"
"pythonsrc"
];
meta = {
description = "Open source, distributed, transactional key-value store";
homepage = "https://www.foundationdb.org";
license = lib.licenses.asl20;
platforms = [ "x86_64-linux" ] ++ lib.optionals (!(avxEnabled version)) [ "aarch64-linux" ];
# Fails when cross-compiling with "/bin/sh: gcc-ar: not found"
broken = stdenv.buildPlatform != stdenv.hostPlatform;
maintainers = with lib.maintainers; [
thoughtpolice
lostnet
];
};
}

View file

@ -18,10 +18,10 @@ buildPythonPackage {
doCheck = false;
meta = with lib; {
meta = {
description = "Python bindings for FoundationDB";
homepage = "https://www.foundationdb.org";
license = with licenses; [ asl20 ];
maintainers = with maintainers; [ thoughtpolice ];
license = with lib.licenses; [ asl20 ];
maintainers = with lib.maintainers; [ thoughtpolice ];
};
}

View file

@ -1,178 +0,0 @@
# This builder is for FoundationDB CMake build system.
{
lib,
fetchFromGitHub,
cmake,
ninja,
python3,
openjdk,
mono,
pkg-config,
msgpack-cxx,
toml11,
jemalloc,
doctest,
gccStdenv,
llvmPackages,
useClang ? false,
...
}:
let
stdenv = if useClang then llvmPackages.libcxxStdenv else gccStdenv;
# Only even numbered versions compile on aarch64; odd numbered versions have avx enabled.
avxEnabled =
version:
let
isOdd = n: lib.trivial.mod n 2 != 0;
patch = lib.toInt (lib.versions.patch version);
in
isOdd patch;
makeFdb =
{
version,
hash,
rev ? "refs/tags/${version}",
officialRelease ? true,
patches ? [ ],
boost,
ssl,
}:
stdenv.mkDerivation {
pname = "foundationdb";
inherit version;
src = fetchFromGitHub {
owner = "apple";
repo = "foundationdb";
inherit rev hash;
};
buildInputs = [
ssl
boost
msgpack-cxx
toml11
jemalloc
];
checkInputs = [ doctest ];
nativeBuildInputs = [
pkg-config
cmake
ninja
python3
openjdk
mono
] ++ lib.optionals useClang [ llvmPackages.lld ];
separateDebugInfo = true;
dontFixCmake = true;
cmakeFlags = [
(lib.optionalString officialRelease "-DFDB_RELEASE=TRUE")
# Disable CMake warnings for project developers.
"-Wno-dev"
# CMake Error at fdbserver/CMakeLists.txt:332 (find_library):
# > Could not find lz4_STATIC_LIBRARIES using the following names: liblz4.a
"-DSSD_ROCKSDB_EXPERIMENTAL=FALSE"
"-DBUILD_DOCUMENTATION=FALSE"
# LTO brings up overall build time, but results in much smaller
# binaries for all users and the cache.
(lib.optionalString (!useClang) "-DUSE_LTO=ON")
# Gold helps alleviate the link time, especially when LTO is
# enabled. But even then, it still takes a majority of the time.
# Same with LLD when Clang is available.
(lib.optionalString useClang "-DUSE_LD=LLD")
(lib.optionalString (!useClang) "-DUSE_LD=GOLD")
# FIXME: why can't openssl be found automatically?
"-DOPENSSL_USE_STATIC_LIBS=FALSE"
"-DOPENSSL_CRYPTO_LIBRARY=${ssl.out}/lib/libcrypto.so"
"-DOPENSSL_SSL_LIBRARY=${ssl.out}/lib/libssl.so"
];
hardeningDisable = [ "fortify" ];
inherit patches;
postPatch = ''
# allow using any msgpack-cxx version
substituteInPlace cmake/GetMsgpack.cmake \
--replace-warn 'find_package(msgpack-cxx 6 QUIET CONFIG)' 'find_package(msgpack-cxx QUIET CONFIG)'
# Use our doctest package
substituteInPlace bindings/c/test/unit/third_party/CMakeLists.txt \
--replace-fail '/opt/doctest_proj_2.4.8' '${doctest}/include'
# Upstream upgraded to Boost 1.86 with no code changes; see:
# <https://github.com/apple/foundationdb/pull/11788>
substituteInPlace cmake/CompileBoost.cmake \
--replace-fail 'find_package(Boost 1.78.0 EXACT ' 'find_package(Boost '
'';
# the install phase for cmake is pretty wonky right now since it's not designed to
# coherently install packages as most linux distros expect -- it's designed to build
# packaged artifacts that are shipped in RPMs, etc. we need to add some extra code to
# cmake upstream to fix this, and if we do, i think most of this can go away.
postInstall = ''
mv $out/sbin/fdbmonitor $out/bin/fdbmonitor
mkdir $out/libexec && mv $out/usr/lib/foundationdb/backup_agent/backup_agent $out/libexec/backup_agent
mv $out/sbin/fdbserver $out/bin/fdbserver
rm -rf $out/etc $out/lib/foundationdb $out/lib/systemd $out/log $out/sbin $out/usr $out/var
# move results into multi outputs
mkdir -p $dev $lib
mv $out/include $dev/include
mv $out/lib $lib/lib
# python bindings
# NB: use the original setup.py.in, so we can substitute VERSION correctly
cp ../LICENSE ./bindings/python
substitute ../bindings/python/setup.py.in ./bindings/python/setup.py \
--replace 'VERSION' "${version}"
rm -f ./bindings/python/setup.py.* ./bindings/python/CMakeLists.txt
rm -f ./bindings/python/fdb/*.pth # remove useless files
rm -f ./bindings/python/*.rst ./bindings/python/*.mk
cp -R ./bindings/python/ tmp-pythonsrc/
tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/
# java bindings
mkdir -p $lib/share/java
mv lib/fdb-java-*.jar $lib/share/java/fdb-java.jar
'';
outputs = [
"out"
"dev"
"lib"
"pythonsrc"
];
meta = with lib; {
description = "Open source, distributed, transactional key-value store";
homepage = "https://www.foundationdb.org";
license = licenses.asl20;
platforms = [ "x86_64-linux" ] ++ lib.optionals (!(avxEnabled version)) [ "aarch64-linux" ];
# Fails when cross-compiling with "/bin/sh: gcc-ar: not found"
broken = stdenv.buildPlatform != stdenv.hostPlatform;
maintainers = with maintainers; [
thoughtpolice
lostnet
];
};
};
in
makeFdb

View file

@ -1,49 +0,0 @@
{
gccStdenv,
llvmPackages,
lib,
fetchFromGitHub,
fetchpatch,
cmake,
ninja,
python3,
openjdk,
mono,
openssl,
boost186,
pkg-config,
msgpack-cxx,
toml11,
jemalloc,
doctest,
}@args:
let
cmakeBuild = import ./cmake.nix args;
in
{
foundationdb73 = cmakeBuild {
version = "7.3.42";
hash = "sha256-jQcm+HLai5da2pZZ7iLdN6fpQZxf5+/kkfv9OSXQ57c=";
boost = boost186;
ssl = openssl;
patches = [
./patches/disable-flowbench.patch
./patches/don-t-use-static-boost-libs.patch
# GetMsgpack: add 4+ versions of upstream
# https://github.com/apple/foundationdb/pull/10935
(fetchpatch {
url = "https://github.com/apple/foundationdb/commit/c35a23d3f6b65698c3b888d76de2d93a725bff9c.patch";
hash = "sha256-bneRoZvCzJp0Hp/G0SzAyUyuDrWErSpzv+ickZQJR5w=";
})
# Add a dependency that prevents bindingtester to run before the python bindings are generated
# https://github.com/apple/foundationdb/pull/11859
(fetchpatch {
url = "https://github.com/apple/foundationdb/commit/8d04c97a74c6b83dd8aa6ff5af67587044c2a572.patch";
hash = "sha256-ZLIcmcfirm1+96DtTIr53HfM5z38uTLZrRNHAmZL6rc=";
})
];
};
}

View file

@ -3446,14 +3446,6 @@ with pkgs;
fstl = qt5.callPackage ../applications/graphics/fstl { };
fdbPackages = dontRecurseIntoAttrs (callPackage ../servers/foundationdb { });
inherit (fdbPackages)
foundationdb73
;
foundationdb = foundationdb73;
fuse-ext2 = darwin.apple_sdk_11_0.callPackage ../tools/filesystems/fuse-ext2 { };
fwknop = callPackage ../tools/security/fwknop {

View file

@ -13,7 +13,6 @@
inherit (super)
agdaPackages
apacheHttpdPackages
fdbPackages
fusePackages
gns3Packages
haskellPackages

View file

@ -5213,8 +5213,8 @@ self: super: with self; {
fortiosapi = callPackage ../development/python-modules/fortiosapi { };
foundationdb73 = callPackage ../servers/foundationdb/python.nix {
foundationdb = pkgs.foundationdb73;
foundationdb = callPackage ../development/python-modules/foundationdb {
inherit (pkgs) foundationdb;
};
fountains = callPackage ../development/python-modules/fountains { };