Skip to content
Permalink
Browse files

Merge pull request #61009 from thoughtpolice/nixpkgs/fdb-61-fixes

foundationdb: add fdb 6.1 with cmake build
  • Loading branch information...
thoughtpolice committed May 15, 2019
2 parents b71c308 + 2525b88 commit dba7af031d9052e70dcb864cb423f0ca4fba47c5
@@ -35,6 +35,7 @@ let
${optionalString (cfg.class != null) "class = ${cfg.class}"}
memory = ${cfg.memory}
storage_memory = ${cfg.storageMemory}
trace_format = ${cfg.traceFormat}
${optionalString (cfg.tls != null) ''
tls_plugin = ${pkg}/libexec/plugins/FDBLibTLS.so
@@ -317,6 +318,12 @@ in
default = "/run/foundationdb.pid";
description = "Path to pidfile for fdbmonitor.";
};

traceFormat = mkOption {
type = types.enum [ "xml" "json" ];
default = "xml";
description = "Trace logging format.";
};
};

config = mkIf cfg.enable {
@@ -382,7 +389,7 @@ in
chown -R ${cfg.user}:${cfg.group} ${cfg.pidfile}
for x in "${cfg.logDir}" "${cfg.dataDir}"; do
[ ! -d "$x" ] && mkdir -m 0700 -vp "$x";
[ ! -d "$x" ] && mkdir -m 0770 -vp "$x";
chown -R ${cfg.user}:${cfg.group} "$x";
done
@@ -404,7 +411,7 @@ in

postStart = ''
if [ -e "${cfg.dataDir}/.first_startup" ]; then
fdbcli --exec "configure new single memory"
fdbcli --exec "configure new single ssd"
rm -f "${cfg.dataDir}/.first_startup";
fi
'';
@@ -0,0 +1,129 @@
# This builder is for FoundationDB CMake build system.

{ lib, fetchurl, fetchpatch, fetchFromGitHub
, cmake, ninja, boost, python3, openjdk, mono, libressl

, gccStdenv, llvmPackages
, useClang ? true
, ...
}:

let
stdenv = if useClang then llvmPackages.libcxxStdenv else gccStdenv;

tests = with builtins;
builtins.replaceStrings [ "\n" ] [ " " ] (lib.fileContents ./test-list.txt);

makeFdb =
{ version
, branch
, sha256
, rev ? "refs/tags/${version}"
, officialRelease ? true
, patches ? []
}: stdenv.mkDerivation rec {
name = "foundationdb-${version}";
inherit version;

src = fetchFromGitHub {
owner = "apple";
repo = "foundationdb";
inherit rev sha256;
};

buildInputs = [ libressl boost ];
nativeBuildInputs = [ cmake ninja python3 openjdk mono ]
++ lib.optional useClang [ llvmPackages.lld ];

separateDebugInfo = true;
enableParallelBuilding = true;
dontFixCmake = true;

cmakeFlags =
[ "-DCMAKE_BUILD_TYPE=Release"
"-DLIBRESSL_USE_STATIC_LIBS=FALSE"

# CMake can't find these easily for some reason?
"-DLIBRESSL_INCLUDE_DIR=${libressl.dev}"
"-DLIBRESSL_CRYPTO_LIBRARY=${libressl.out}/lib/libcrypto.so"
"-DLIBRESSL_SSL_LIBRARY=${libressl.out}/lib/libssl.so"
"-DLIBRESSL_TLS_LIBRARY=${libressl.out}/lib/libtls.so"

# LTO brings up overall build time, but results in much smaller
# binaries for all users and the cache.
#
# TODO FIXME: bugs :(
(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")
]
++ lib.optional officialRelease [ "FDB_RELEASE=1" ];

inherit patches;
postPatch = ''
for x in bindings/c/CMakeLists.txt fdbserver/CMakeLists.txt fdbmonitor/CMakeLists.txt fdbbackup/CMakeLists.txt fdbcli/CMakeLists.txt; do
substituteInPlace $x --replace 'fdb_install' 'install'
done
'';

# 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/fdbserver $out/bin/fdbserver
rm -rf \
$out/lib/systemd $out/Library $out/usr $out/sbin \
$out/var $out/log $out/etc
mv $out/fdbmonitor/fdbmonitor $out/bin/fdbmonitor && rm -rf $out/fdbmonitor
rm -rf $out/lib/foundationdb/
mkdir $out/libexec && ln -sfv $out/bin/fdbbackup $out/libexec/backup_agent
mkdir $out/include/foundationdb && \
mv $out/include/*.h $out/include/*.options $out/include/foundationdb
# 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
# include the tests
mkdir -p $out/share/test
(cd ../tests && for x in ${tests}; do
cp --parents $x $out/share/test
done)
'';

outputs = [ "out" "dev" "lib" "pythonsrc" ];

meta = with stdenv.lib; {
description = "Open source, distributed, transactional key-value store";
homepage = https://www.foundationdb.org;
license = licenses.asl20;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ thoughtpolice ];
};
};
in makeFdb
Oops, something went wrong.

0 comments on commit dba7af0

Please sign in to comment.
You can’t perform that action at this time.