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
|
# Needed for building with io_uring
|
||||||
pkgsHost.liburing
|
pkgsHost.liburing
|
||||||
] else [])
|
] else [])
|
||||||
++
|
++ scopeHost.main.propagatedBuildInputs
|
||||||
scopeHost.main.nativeBuildInputs;
|
++ scopeHost.main.nativeBuildInputs;
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
, pkgsBuildHost
|
, pkgsBuildHost
|
||||||
, rocksdb
|
, rocksdb
|
||||||
, rust
|
, rust
|
||||||
|
, rust-jemalloc-sys
|
||||||
, stdenv
|
, stdenv
|
||||||
|
|
||||||
# Options (keep sorted)
|
# Options (keep sorted)
|
||||||
|
@ -15,10 +16,27 @@
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
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 =
|
buildDepsOnlyEnv =
|
||||||
let
|
let
|
||||||
rocksdb' = rocksdb.override {
|
rocksdb' = rocksdb.override {
|
||||||
enableJemalloc = builtins.elem "jemalloc" features;
|
jemalloc = rust-jemalloc-sys';
|
||||||
|
enableJemalloc = featureEnabled "jemalloc";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
@ -60,6 +78,8 @@ commonAttrs = {
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
buildInputs = lib.optional (featureEnabled "jemalloc") rust-jemalloc-sys';
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
# bindgen needs the build platform's libclang. Apparently due to "splicing
|
# bindgen needs the build platform's libclang. Apparently due to "splicing
|
||||||
# weirdness", pkgs.rustPlatform.bindgenHook on its own doesn't quite do the
|
# weirdness", pkgs.rustPlatform.bindgenHook on its own doesn't quite do the
|
||||||
|
|
Loading…
Add table
Reference in a new issue