From db81ffb4eae864303c371abf3c238a3e9615f0d9 Mon Sep 17 00:00:00 2001 From: strawberry Date: Wed, 1 May 2024 12:37:03 -0400 Subject: [PATCH] nix: only set `CONDUIT_VERSION_EXTRA` for final build + slight cleanup Signed-off-by: strawberry --- nix/pkgs/main/default.nix | 114 ++++++++++++++++++++++---------------- 1 file changed, 67 insertions(+), 47 deletions(-) diff --git a/nix/pkgs/main/default.nix b/nix/pkgs/main/default.nix index 0c6c7baa..9ac91039 100644 --- a/nix/pkgs/main/default.nix +++ b/nix/pkgs/main/default.nix @@ -1,7 +1,6 @@ -{ inputs - -# Dependencies -, craneLib +# Dependencies (keep sorted) +{ craneLib +, inputs , lib , libiconv , pkgsBuildHost @@ -9,54 +8,72 @@ , rust , stdenv -# Options +# Options (keep sorted) , default_features ? true , features ? [] , profile ? "release" }: -craneLib.buildPackage rec { - src = inputs.nix-filter { - root = inputs.self; - include = [ - "src" - "hot_lib" - "Cargo.toml" - "Cargo.lock" - ]; - }; +let +buildDepsOnlyEnv = + let + rocksdb' = rocksdb.override { + enableJemalloc = builtins.elem "jemalloc" features; + }; + in + { + CARGO_PROFILE = profile; + ROCKSDB_INCLUDE_DIR = "${rocksdb'}/include"; + ROCKSDB_LIB_DIR = "${rocksdb'}/lib"; + } + // + (import ./cross-compilation-env.nix { + # Keep sorted + inherit + lib + pkgsBuildHost + rust + stdenv; + }); - # This is redundant with CI - doCheck = false; +buildPackageEnv = { + CONDUIT_VERSION_EXTRA = inputs.self.shortRev or inputs.self.dirtyShortRev; +} // buildDepsOnlyEnv; - env = - let - rocksdb' = rocksdb.override { - enableJemalloc = builtins.elem "jemalloc" features; - }; - in - { - CARGO_PROFILE = profile; - CONDUIT_VERSION_EXTRA = inputs.self.shortRev or inputs.self.dirtyShortRev; - ROCKSDB_INCLUDE_DIR = "${rocksdb'}/include"; - ROCKSDB_LIB_DIR = "${rocksdb'}/lib"; - } - // - (import ./cross-compilation-env.nix { - inherit - lib - pkgsBuildHost - rust - stdenv; - }); +commonAttrs = { + inherit + (craneLib.crateNameFromCargoToml { + cargoToml = "${inputs.self}/Cargo.toml"; + }) + pname + version; - nativeBuildInputs = [ - # bindgen needs the build platform's libclang. Apparently due to "splicing - # weirdness", pkgs.rustPlatform.bindgenHook on its own doesn't quite do the - # right thing here. - pkgsBuildHost.rustPlatform.bindgenHook + src = let filter = inputs.nix-filter.lib; in filter { + root = inputs.self; + + # Keep sorted + include = [ + "Cargo.lock" + "Cargo.toml" + "hot_lib" + "src" + ]; + }; + + nativeBuildInputs = [ + # bindgen needs the build platform's libclang. Apparently due to "splicing + # weirdness", pkgs.rustPlatform.bindgenHook on its own doesn't quite do the + # right thing here. + pkgsBuildHost.rustPlatform.bindgenHook ] ++ lib.optionals stdenv.isDarwin [ libiconv ]; + }; +in + +craneLib.buildPackage ( commonAttrs // { + cargoArtifacts = craneLib.buildDepsOnly (commonAttrs // { + env = buildDepsOnlyEnv; + }); cargoExtraArgs = "" + lib.optionalString @@ -66,11 +83,14 @@ craneLib.buildPackage rec { (features != []) "--features " + (builtins.concatStringsSep "," features); - meta.mainProgram = (craneLib.crateNameFromCargoToml { - cargoToml = "${inputs.self}/Cargo.toml"; - }).pname; + # This is redundant with CI + doCheck = false; + + env = buildPackageEnv; passthru = { - inherit env; + env = buildPackageEnv; }; -} + + meta.mainProgram = commonAttrs.pname; +})