only link to one jemalloc build
Without setting JEMALLOC_OVERRIDE, we end up linking to two different jemalloc builds. Once dynamically, as a transitive dependency through rocksdb, and a second time to the static jemalloc that tikv-jemalloc-sys builds.
This commit is contained in:
parent
eb8dd9cb44
commit
a7fe434086
2 changed files with 23 additions and 3 deletions
|
@ -184,8 +184,8 @@
|
|||
# Needed for building with io_uring
|
||||
pkgsHost.liburing
|
||||
] else [])
|
||||
++
|
||||
scopeHost.main.nativeBuildInputs;
|
||||
++ scopeHost.main.propagatedBuildInputs
|
||||
++ scopeHost.main.nativeBuildInputs;
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
, pkgsBuildHost
|
||||
, rocksdb
|
||||
, rust
|
||||
, rust-jemalloc-sys
|
||||
, stdenv
|
||||
|
||||
# Options (keep sorted)
|
||||
|
@ -15,10 +16,27 @@
|
|||
}:
|
||||
|
||||
let
|
||||
featureEnabled = feature : builtins.elem feature features;
|
||||
|
||||
# This derivation will set the JEMALLOC_OVERRIDE variable, causing the
|
||||
# tikv-jemalloc-sys crate to use the nixpkgs jemalloc instead of building it's
|
||||
# own. In order for this to work, we need to set flags on the build that match
|
||||
# whatever flags tikv-jemalloc-sys was going to use. These are dependent on
|
||||
# which features we enable in tikv-jemalloc-sys.
|
||||
rust-jemalloc-sys' = (rust-jemalloc-sys.override {
|
||||
# tikv-jemalloc-sys/unprefixed_malloc_on_supported_platforms feature
|
||||
unprefixed = true;
|
||||
}).overrideAttrs (old: {
|
||||
configureFlags = old.configureFlags ++
|
||||
# tikv-jemalloc-sys/profiling feature
|
||||
lib.optional (featureEnabled "jemalloc_prof") "--enable-prof";
|
||||
});
|
||||
|
||||
buildDepsOnlyEnv =
|
||||
let
|
||||
rocksdb' = rocksdb.override {
|
||||
enableJemalloc = builtins.elem "jemalloc" features;
|
||||
jemalloc = rust-jemalloc-sys';
|
||||
enableJemalloc = featureEnabled "jemalloc";
|
||||
};
|
||||
in
|
||||
{
|
||||
|
@ -60,6 +78,8 @@ commonAttrs = {
|
|||
];
|
||||
};
|
||||
|
||||
buildInputs = lib.optional (featureEnabled "jemalloc") rust-jemalloc-sys';
|
||||
|
||||
nativeBuildInputs = [
|
||||
# bindgen needs the build platform's libclang. Apparently due to "splicing
|
||||
# weirdness", pkgs.rustPlatform.bindgenHook on its own doesn't quite do the
|
||||
|
|
Loading…
Add table
Reference in a new issue