nix: Cache deps with crane (#27411)
It turns out that on linux crane's `buildDepsOnly` was working fine, so I'm re-enabling it and will worry about why it's failing on darwin later. This should significantly improve the amount of artifact-reuse for the linux nix builds, which will hopefully bring build times low enough that we're ok putting it in CI. Release Notes: - N/A
This commit is contained in:
parent
42f01cc903
commit
fca7ce9a14
1 changed files with 17 additions and 28 deletions
|
@ -133,7 +133,7 @@ let
|
||||||
(darwinMinVersionHook "10.15")
|
(darwinMinVersionHook "10.15")
|
||||||
];
|
];
|
||||||
|
|
||||||
cargoExtraArgs = "--package=zed --package=cli --features=gpui/runtime_shaders";
|
cargoExtraArgs = "-p zed -p cli --locked --features=gpui/runtime_shaders";
|
||||||
|
|
||||||
env = {
|
env = {
|
||||||
ZSTD_SYS_USE_PKG_CONFIG = true;
|
ZSTD_SYS_USE_PKG_CONFIG = true;
|
||||||
|
@ -146,21 +146,28 @@ let
|
||||||
ZED_UPDATE_EXPLANATION = "Zed has been installed using Nix. Auto-updates have thus been disabled.";
|
ZED_UPDATE_EXPLANATION = "Zed has been installed using Nix. Auto-updates have thus been disabled.";
|
||||||
RELEASE_VERSION = version;
|
RELEASE_VERSION = version;
|
||||||
RUSTFLAGS = if withGLES then "--cfg gles" else "";
|
RUSTFLAGS = if withGLES then "--cfg gles" else "";
|
||||||
# these libraries are used with dlopen so putting them in buildInputs isn't enough
|
LK_CUSTOM_WEBRTC = livekit-libwebrtc;
|
||||||
NIX_LDFLAGS = "-rpath ${
|
|
||||||
|
CARGO_PROFILE = profile;
|
||||||
|
# need to handle some profiles specially https://github.com/rust-lang/cargo/issues/11053
|
||||||
|
TARGET_DIR = "target/" + (if profile == "dev" then "debug" else profile);
|
||||||
|
|
||||||
|
# for some reason these deps being in buildInputs isn't enough, the only thing
|
||||||
|
# about them that's special is that they're manually dlopened at runtime
|
||||||
|
NIX_LDFLAGS = lib.optionalString stdenv.hostPlatform.isLinux "-rpath ${
|
||||||
lib.makeLibraryPath [
|
lib.makeLibraryPath [
|
||||||
gpu-lib
|
gpu-lib
|
||||||
wayland
|
wayland
|
||||||
]
|
]
|
||||||
}";
|
}";
|
||||||
LK_CUSTOM_WEBRTC = livekit-libwebrtc;
|
|
||||||
CARGO_PROFILE = profile;
|
|
||||||
# need to handle some profiles specially https://github.com/rust-lang/cargo/issues/11053
|
|
||||||
TARGET_DIR = "target/" + (if profile == "dev" then "debug" else profile);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# prevent nix from removing the "unused" wayland/gpu-lib rpaths
|
# prevent nix from removing the "unused" wayland/gpu-lib rpaths
|
||||||
dontPatchELF = true;
|
dontPatchELF = stdenv.hostPlatform.isLinux;
|
||||||
|
|
||||||
|
# TODO: try craneLib.cargoNextest separate output
|
||||||
|
# for now we're not worried about running our test suite (or tests for deps) in the nix sandbox
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
cargoVendorDir = craneLib.vendorCargoDeps {
|
cargoVendorDir = craneLib.vendorCargoDeps {
|
||||||
inherit src cargoLock;
|
inherit src cargoLock;
|
||||||
|
@ -184,22 +191,7 @@ let
|
||||||
drv;
|
drv;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
cargoArtifacts = craneLib.buildDepsOnly (
|
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
|
||||||
commonArgs
|
|
||||||
// {
|
|
||||||
# TODO: figure out why the main derivation is still rebuilding deps...
|
|
||||||
# disable pre-building the deps for now
|
|
||||||
buildPhaseCargoCommand = "true";
|
|
||||||
|
|
||||||
# forcibly inhibit `doInstallCargoArtifacts`...
|
|
||||||
# https://github.com/ipetkov/crane/blob/1d19e2ec7a29dcc25845eec5f1527aaf275ec23e/lib/setupHooks/installCargoArtifactsHook.sh#L111
|
|
||||||
#
|
|
||||||
# it is, unfortunately, not overridable in `buildDepsOnly`:
|
|
||||||
# https://github.com/ipetkov/crane/blob/1d19e2ec7a29dcc25845eec5f1527aaf275ec23e/lib/buildDepsOnly.nix#L85
|
|
||||||
preBuild = "postInstallHooks=()";
|
|
||||||
doCheck = false;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
in
|
in
|
||||||
craneLib.buildPackage (
|
craneLib.buildPackage (
|
||||||
lib.recursiveUpdate commonArgs {
|
lib.recursiveUpdate commonArgs {
|
||||||
|
@ -215,15 +207,12 @@ craneLib.buildPackage (
|
||||||
|
|
||||||
# without the env var generate-licenses fails due to crane's fetchCargoVendor, see:
|
# without the env var generate-licenses fails due to crane's fetchCargoVendor, see:
|
||||||
# https://github.com/zed-industries/zed/issues/19971#issuecomment-2688455390
|
# https://github.com/zed-industries/zed/issues/19971#issuecomment-2688455390
|
||||||
|
# TODO: put this in a separate derivation that depends on src to avoid running it on every build
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
ALLOW_MISSING_LICENSES=yes bash script/generate-licenses
|
ALLOW_MISSING_LICENSES=yes bash script/generate-licenses
|
||||||
echo nightly > crates/zed/RELEASE_CHANNEL
|
echo nightly > crates/zed/RELEASE_CHANNEL
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# TODO: try craneLib.cargoNextest separate output
|
|
||||||
# for now we're not worried about running our test suite in the nix sandbox
|
|
||||||
doCheck = false;
|
|
||||||
|
|
||||||
installPhase =
|
installPhase =
|
||||||
if stdenv.hostPlatform.isDarwin then
|
if stdenv.hostPlatform.isDarwin then
|
||||||
''
|
''
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue