From ee43c2ff4caf117e8a2bc2cf2f699ec9c61ecfde Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 23 May 2024 13:32:43 -0700 Subject: [PATCH] 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 . --- nix/pkgs/default/default.nix | 18 +++++++++++++++++- nix/shell.nix | 6 +++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/nix/pkgs/default/default.nix b/nix/pkgs/default/default.nix index d5accf32..0a7ef92f 100644 --- a/nix/pkgs/default/default.nix +++ b/nix/pkgs/default/default.nix @@ -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 diff --git a/nix/shell.nix b/nix/shell.nix index e9d7f493..ebfe1dc6 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -30,5 +30,9 @@ mkShell { toolchain ] ++ - default.nativeBuildInputs; + default.nativeBuildInputs + ++ + default.propagatedBuildInputs + ++ + default.buildInputs; }