1
0
Fork 0
forked from mirror/grapevine

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 fixes dynamically-linked jemalloc builds, for the reasons described
in <https://github.com/girlbossceo/conduwuit/pull/400#issue-2316700200>.
This commit is contained in:
Benjamin Lee 2024-05-23 13:32:43 -07:00
parent b6fc9b0feb
commit ee43c2ff4c
No known key found for this signature in database
GPG key ID: FB9624E2885D55A4
2 changed files with 22 additions and 2 deletions

View file

@ -6,6 +6,7 @@
, pkgsBuildHost
, rocksdb
, rust
, rust-jemalloc-sys
, stdenv
# Options (keep sorted)
@ -15,10 +16,23 @@
}:
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;
});
buildDepsOnlyEnv =
let
rocksdb' = rocksdb.override {
enableJemalloc = builtins.elem "jemalloc" features;
jemalloc = rust-jemalloc-sys';
enableJemalloc = featureEnabled "jemalloc";
};
in
{
@ -60,6 +74,8 @@ let
];
};
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

View file

@ -30,5 +30,9 @@ mkShell {
toolchain
]
++
default.nativeBuildInputs;
default.nativeBuildInputs
++
default.propagatedBuildInputs
++
default.buildInputs;
}