mirror of
https://github.com/ipetkov/crane.git
synced 2024-11-22 05:36:09 +03:00
Splice overrideToolchain (#652)
--------- Co-authored-by: Ivan Petkov <ivanppetkov@gmail.com>
This commit is contained in:
parent
9791c77eb7
commit
aa5dcd0518
@ -14,6 +14,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||||||
`craneLib.cleanCargoSource (craneLib.path ./.)`): it is recommended to either
|
`craneLib.cleanCargoSource (craneLib.path ./.)`): it is recommended to either
|
||||||
use `craneLib.cleanCargoSource ./.` directly (if the default source cleaning
|
use `craneLib.cleanCargoSource ./.` directly (if the default source cleaning
|
||||||
is desired) or `craneLib.path ./.` (if not).
|
is desired) or `craneLib.path ./.` (if not).
|
||||||
|
* `overrideToolchain` has been updated to better handle cross-compilation
|
||||||
|
splicing for a customized toolchain. This means that `overrideToolchain`
|
||||||
|
should now be called with a function which constructs said toolchain for any
|
||||||
|
given `pkgs` instantiation. For example: `craneLib.overrideToolchain (p:
|
||||||
|
p.rust-bin.stable.latest.default)`
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* The cross compilation example also hows how to set the `TARGET_CC` environment
|
* The cross compilation example also hows how to set the `TARGET_CC` environment
|
||||||
@ -23,6 +28,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||||||
`cleanCargoSource`)
|
`cleanCargoSource`)
|
||||||
* `removeReferencesToVendoredSources` handles the edge case where
|
* `removeReferencesToVendoredSources` handles the edge case where
|
||||||
`cargoVendorDir` does not point to a path within the Nix store
|
`cargoVendorDir` does not point to a path within the Nix store
|
||||||
|
* It is now possible to use `.overrideScope` to change what instance of
|
||||||
|
`craneUtils` will be used during vendoring.
|
||||||
|
|
||||||
## [0.17.3] - 2024-06-02
|
## [0.17.3] - 2024-06-02
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ in
|
|||||||
onlyDrvs (lib.makeScope myLib.newScope (self:
|
onlyDrvs (lib.makeScope myLib.newScope (self:
|
||||||
let
|
let
|
||||||
callPackage = self.newScope { };
|
callPackage = self.newScope { };
|
||||||
myLibLlvmTools = myLib.overrideToolchain (pkgs.rust-bin.stable.latest.minimal.override {
|
myLibLlvmTools = myLib.overrideToolchain (p: p.rust-bin.stable.latest.minimal.override {
|
||||||
extensions = [ "llvm-tools" ];
|
extensions = [ "llvm-tools" ];
|
||||||
});
|
});
|
||||||
x64Linux = pkgs.hostPlatform.system == "x86_64-linux";
|
x64Linux = pkgs.hostPlatform.system == "x86_64-linux";
|
||||||
@ -407,7 +407,7 @@ in
|
|||||||
|
|
||||||
noStd =
|
noStd =
|
||||||
let
|
let
|
||||||
noStdLib = myLib.overrideToolchain (pkgs.rust-bin.stable.latest.minimal.override {
|
noStdLib = myLib.overrideToolchain (p: p.rust-bin.stable.latest.minimal.override {
|
||||||
targets = [
|
targets = [
|
||||||
"thumbv6m-none-eabi"
|
"thumbv6m-none-eabi"
|
||||||
"x86_64-unknown-none"
|
"x86_64-unknown-none"
|
||||||
@ -423,7 +423,7 @@ in
|
|||||||
|
|
||||||
bindeps =
|
bindeps =
|
||||||
let
|
let
|
||||||
bindepsLib = myLib.overrideToolchain (pkgs.rust-bin.nightly.latest.minimal.override {
|
bindepsLib = myLib.overrideToolchain (p: p.rust-bin.nightly.latest.minimal.override {
|
||||||
targets = [
|
targets = [
|
||||||
"wasm32-unknown-unknown"
|
"wasm32-unknown-unknown"
|
||||||
"x86_64-unknown-none"
|
"x86_64-unknown-none"
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
wasmToolchain = pkgs.rust-bin.stable.latest.minimal.override {
|
wasmToolchainFor = p: p.rust-bin.stable.latest.minimal.override {
|
||||||
targets = [ "wasm32-unknown-unknown" ];
|
targets = [ "wasm32-unknown-unknown" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ let
|
|||||||
url = "https://github.com/NixOS/nixpkgs/archive/4e6868b1aa3766ab1de169922bb3826143941973.tar.gz";
|
url = "https://github.com/NixOS/nixpkgs/archive/4e6868b1aa3766ab1de169922bb3826143941973.tar.gz";
|
||||||
sha256 = "sha256:1q6bj2jjlwb10sfrhqmjpzsc3yc4x76cvky16wh0z52p7d2lhdpv";
|
sha256 = "sha256:1q6bj2jjlwb10sfrhqmjpzsc3yc4x76cvky16wh0z52p7d2lhdpv";
|
||||||
};
|
};
|
||||||
myLibWasm = (myLib.overrideToolchain wasmToolchain).overrideScope (_final: _prev: {
|
myLibWasm = (myLib.overrideToolchain wasmToolchainFor).overrideScope (_final: _prev: {
|
||||||
inherit (import tarball { inherit (stdenv) system; }) wasm-bindgen-cli;
|
inherit (import tarball { inherit (stdenv) system; }) wasm-bindgen-cli;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
12
default.nix
12
default.nix
@ -1,13 +1,3 @@
|
|||||||
{ pkgs ? import <nixpkgs> { } }:
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
|
|
||||||
import ./lib {
|
pkgs.callPackage ./lib { }
|
||||||
inherit (pkgs) lib makeScopeWithSplicing';
|
|
||||||
otherSplices = {
|
|
||||||
selfBuildBuild = pkgs.pkgsBuildBuild;
|
|
||||||
selfBuildHost = pkgs.pkgsBuildHost;
|
|
||||||
selfBuildTarget = pkgs.pkgsBuildTarget;
|
|
||||||
selfHostHost = pkgs.pkgsHostHost;
|
|
||||||
selfHostTarget = pkgs.pkgsHostTarget;
|
|
||||||
selfTargetTarget = pkgs.pkgsTargetTarget;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
@ -1193,15 +1193,20 @@ build caches. More specifically:
|
|||||||
|
|
||||||
### `craneLib.overrideToolchain`
|
### `craneLib.overrideToolchain`
|
||||||
|
|
||||||
`overrideToolchain :: drv -> set`
|
`overrideToolchain :: (set -> drv) -> set`
|
||||||
|
`overrideToolchain :: drv -> set` (legacy)
|
||||||
|
|
||||||
A convenience method to override and use tools (like `cargo`, `clippy`,
|
A convenience method to override and use tools (like `cargo`, `clippy`,
|
||||||
`rustfmt`, `rustc`, etc.) from one specific toolchain. The input should be a
|
`rustfmt`, `rustc`, etc.) from one specific toolchain. The input should be a
|
||||||
single derivation which contains all the tools as binaries. For example, this
|
single derivation which contains all the tools as binaries. For example, this
|
||||||
can be the output of `oxalica/rust-overlay`.
|
can be the output of `oxalica/rust-overlay`.
|
||||||
|
|
||||||
|
Note that in order to best support cross compilation, `overrideToolchain` should
|
||||||
|
be provided a function (whose argument is a cross-compilation aware version of
|
||||||
|
`pkgs`) which constructs the toolchain:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
craneLib.overrideToolchain myCustomToolchain
|
craneLib.overrideToolchain (p: myCustomToolchainForPkgs p)
|
||||||
```
|
```
|
||||||
|
|
||||||
### `craneLib.path`
|
### `craneLib.path`
|
||||||
|
@ -26,12 +26,10 @@ let
|
|||||||
inherit system;
|
inherit system;
|
||||||
overlays = [ (import rust-overlay) ];
|
overlays = [ (import rust-overlay) ];
|
||||||
};
|
};
|
||||||
|
|
||||||
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
|
|
||||||
targets = [ "wasm32-wasi" ];
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
(crane.mkLib pkgs).overrideToolchain rustToolchain
|
(crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.stable.latest.default.override {
|
||||||
|
targets = [ "wasm32-wasi" ];
|
||||||
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
Finally, specific inputs can be overridden for the entire library via the
|
Finally, specific inputs can be overridden for the entire library via the
|
||||||
|
@ -7,7 +7,8 @@ used in the build:
|
|||||||
|
|
||||||
```nix
|
```nix
|
||||||
let
|
let
|
||||||
rustToolchain = ...;
|
rustToolchainForPkgs = p: ...;
|
||||||
|
rustToolchain = rustToolchainForPkgs pkgs;
|
||||||
in
|
in
|
||||||
# Incorrect usage, missing `clippy` override!
|
# Incorrect usage, missing `clippy` override!
|
||||||
#(crane.mkLib pkgs).overrideScope (final: prev: {
|
#(crane.mkLib pkgs).overrideScope (final: prev: {
|
||||||
@ -17,5 +18,5 @@ in
|
|||||||
#});
|
#});
|
||||||
|
|
||||||
# Correct usage (`overrideToolchain` handles the details for us)
|
# Correct usage (`overrideToolchain` handles the details for us)
|
||||||
(crane.mkLib pkgs).overrideToolchain rustToolchain
|
(crane.mkLib pkgs).overrideToolchain rustToolchainForPkgs
|
||||||
```
|
```
|
||||||
|
@ -83,7 +83,7 @@ craneLib.buildPackage {
|
|||||||
|
|
||||||
# Use a different `craneLib` instantiation: one with a nightly compiler
|
# Use a different `craneLib` instantiation: one with a nightly compiler
|
||||||
my-crate-nightly = my-crate.override {
|
my-crate-nightly = my-crate.override {
|
||||||
craneLib = craneLib.overrideToolchain pkgs.rust-bin.nightly.latest.default;
|
craneLib = craneLib.overrideToolchain (p: p.rust-bin.nightly.latest.default);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -28,16 +28,17 @@
|
|||||||
overlays = [ (import rust-overlay) ];
|
overlays = [ (import rust-overlay) ];
|
||||||
};
|
};
|
||||||
|
|
||||||
rustToolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
|
rustToolchainFor = p: p.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
|
||||||
extensions = [ "rust-src" ];
|
extensions = [ "rust-src" ];
|
||||||
targets = [ "x86_64-unknown-linux-gnu" ];
|
targets = [ "x86_64-unknown-linux-gnu" ];
|
||||||
});
|
});
|
||||||
|
rustToolchain = rustToolchainFor pkgs;
|
||||||
|
|
||||||
# NB: we don't need to overlay our custom toolchain for the *entire*
|
# NB: we don't need to overlay our custom toolchain for the *entire*
|
||||||
# pkgs (which would require rebuidling anything else which uses rust).
|
# pkgs (which would require rebuidling anything else which uses rust).
|
||||||
# Instead, we just want to update the scope that crane will use by appending
|
# Instead, we just want to update the scope that crane will use by appending
|
||||||
# our specific toolchain there.
|
# our specific toolchain there.
|
||||||
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
|
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchainFor;
|
||||||
|
|
||||||
src = craneLib.cleanCargoSource ./.;
|
src = craneLib.cleanCargoSource ./.;
|
||||||
|
|
||||||
@ -83,7 +84,6 @@
|
|||||||
# Extra inputs can be added here; cargo and rustc are provided by default
|
# Extra inputs can be added here; cargo and rustc are provided by default
|
||||||
# from the toolchain that was specified earlier.
|
# from the toolchain that was specified earlier.
|
||||||
packages = [
|
packages = [
|
||||||
# rustToolchain
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -28,11 +28,9 @@
|
|||||||
overlays = [ (import rust-overlay) ];
|
overlays = [ (import rust-overlay) ];
|
||||||
};
|
};
|
||||||
|
|
||||||
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
|
craneLib = (crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.stable.latest.default.override {
|
||||||
targets = [ "x86_64-unknown-linux-musl" ];
|
targets = [ "x86_64-unknown-linux-musl" ];
|
||||||
};
|
});
|
||||||
|
|
||||||
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
|
|
||||||
|
|
||||||
my-crate = craneLib.buildPackage {
|
my-crate = craneLib.buildPackage {
|
||||||
src = craneLib.cleanCargoSource ./.;
|
src = craneLib.cleanCargoSource ./.;
|
||||||
|
@ -31,11 +31,7 @@
|
|||||||
overlays = [ (import rust-overlay) ];
|
overlays = [ (import rust-overlay) ];
|
||||||
};
|
};
|
||||||
|
|
||||||
rustToolchain = pkgs.pkgsBuildHost.rust-bin.stable.latest.default.override {
|
craneLib = (crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.stable.latest.default);
|
||||||
targets = [ "aarch64-unknown-linux-gnu" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
|
|
||||||
|
|
||||||
# Note: we have to use the `callPackage` approach here so that Nix
|
# Note: we have to use the `callPackage` approach here so that Nix
|
||||||
# can "splice" the packages in such a way that dependencies are
|
# can "splice" the packages in such a way that dependencies are
|
||||||
|
@ -28,15 +28,13 @@
|
|||||||
overlays = [ (import rust-overlay) ];
|
overlays = [ (import rust-overlay) ];
|
||||||
};
|
};
|
||||||
|
|
||||||
rustWithWasiTarget = pkgs.rust-bin.stable.latest.default.override {
|
|
||||||
targets = [ "wasm32-wasi" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
# NB: we don't need to overlay our custom toolchain for the *entire*
|
# NB: we don't need to overlay our custom toolchain for the *entire*
|
||||||
# pkgs (which would require rebuidling anything else which uses rust).
|
# pkgs (which would require rebuidling anything else which uses rust).
|
||||||
# Instead, we just want to update the scope that crane will use by appending
|
# Instead, we just want to update the scope that crane will use by appending
|
||||||
# our specific toolchain there.
|
# our specific toolchain there.
|
||||||
craneLib = (crane.mkLib pkgs).overrideToolchain rustWithWasiTarget;
|
craneLib = (crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.stable.latest.default.override {
|
||||||
|
targets = [ "wasm32-wasi" ];
|
||||||
|
});
|
||||||
|
|
||||||
my-crate = craneLib.buildPackage {
|
my-crate = craneLib.buildPackage {
|
||||||
src = craneLib.cleanCargoSource ./.;
|
src = craneLib.cleanCargoSource ./.;
|
||||||
@ -76,7 +74,6 @@
|
|||||||
# Extra inputs can be added here; cargo and rustc are provided by default
|
# Extra inputs can be added here; cargo and rustc are provided by default
|
||||||
# from the toolchain that was specified earlier.
|
# from the toolchain that was specified earlier.
|
||||||
packages = [
|
packages = [
|
||||||
# rustWithWasiTarget
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -27,8 +27,7 @@
|
|||||||
};
|
};
|
||||||
inherit (pkgs) lib;
|
inherit (pkgs) lib;
|
||||||
|
|
||||||
rustToolchain = pkgs.rust-bin.stable.latest.default;
|
craneLib = (crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.stable.latest.default);
|
||||||
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
|
|
||||||
src = craneLib.cleanCargoSource ./.;
|
src = craneLib.cleanCargoSource ./.;
|
||||||
|
|
||||||
workspace = craneLib.buildPackage {
|
workspace = craneLib.buildPackage {
|
||||||
|
@ -34,12 +34,12 @@
|
|||||||
|
|
||||||
inherit (pkgs) lib;
|
inherit (pkgs) lib;
|
||||||
|
|
||||||
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
|
rustToolchainFor = p: p.rust-bin.stable.latest.default.override {
|
||||||
# Set the build targets supported by the toolchain,
|
# Set the build targets supported by the toolchain,
|
||||||
# wasm32-unknown-unknown is required for trunk.
|
# wasm32-unknown-unknown is required for trunk.
|
||||||
targets = [ "wasm32-unknown-unknown" ];
|
targets = [ "wasm32-unknown-unknown" ];
|
||||||
};
|
};
|
||||||
craneLib = ((crane.mkLib pkgs).overrideToolchain rustToolchain).overrideScope (_final: _prev: {
|
craneLib = ((crane.mkLib pkgs).overrideToolchain rustToolchainFor).overrideScope (_final: _prev: {
|
||||||
# The version of wasm-bindgen-cli needs to match the version in Cargo.lock. You
|
# The version of wasm-bindgen-cli needs to match the version in Cargo.lock. You
|
||||||
# can unpin this if your nixpkgs commit contains the appropriate wasm-bindgen-cli version
|
# can unpin this if your nixpkgs commit contains the appropriate wasm-bindgen-cli version
|
||||||
inherit (import nixpkgs-for-wasm-bindgen { inherit system; }) wasm-bindgen-cli;
|
inherit (import nixpkgs-for-wasm-bindgen { inherit system; }) wasm-bindgen-cli;
|
||||||
|
@ -34,12 +34,12 @@
|
|||||||
|
|
||||||
inherit (pkgs) lib;
|
inherit (pkgs) lib;
|
||||||
|
|
||||||
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
|
rustToolchainFor = p: p.rust-bin.stable.latest.default.override {
|
||||||
# Set the build targets supported by the toolchain,
|
# Set the build targets supported by the toolchain,
|
||||||
# wasm32-unknown-unknown is required for trunk
|
# wasm32-unknown-unknown is required for trunk
|
||||||
targets = [ "wasm32-unknown-unknown" ];
|
targets = [ "wasm32-unknown-unknown" ];
|
||||||
};
|
};
|
||||||
craneLib = ((crane.mkLib pkgs).overrideToolchain rustToolchain).overrideScope (_final: _prev: {
|
craneLib = ((crane.mkLib pkgs).overrideToolchain rustToolchainFor).overrideScope (_final: _prev: {
|
||||||
# The version of wasm-bindgen-cli needs to match the version in Cargo.lock. You
|
# The version of wasm-bindgen-cli needs to match the version in Cargo.lock. You
|
||||||
# can unpin this if your nixpkgs commit contains the appropriate wasm-bindgen-cli version
|
# can unpin this if your nixpkgs commit contains the appropriate wasm-bindgen-cli version
|
||||||
inherit (import nixpkgs-for-wasm-bindgen { inherit system; }) wasm-bindgen-cli;
|
inherit (import nixpkgs-for-wasm-bindgen { inherit system; }) wasm-bindgen-cli;
|
||||||
|
213
lib/default.nix
213
lib/default.nix
@ -1,6 +1,13 @@
|
|||||||
{ lib
|
{ lib
|
||||||
|
, stdenv
|
||||||
, makeScopeWithSplicing'
|
, makeScopeWithSplicing'
|
||||||
, otherSplices
|
, splicePackages
|
||||||
|
, pkgsBuildBuild
|
||||||
|
, pkgsBuildHost
|
||||||
|
, pkgsBuildTarget
|
||||||
|
, pkgsHostHost
|
||||||
|
, pkgsHostTarget
|
||||||
|
, pkgsTargetTarget
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -9,85 +16,129 @@ let
|
|||||||
isUnsupported = lib.versionOlder current minSupported;
|
isUnsupported = lib.versionOlder current minSupported;
|
||||||
msg = "crane requires at least nixpkgs-${minSupported}, supplied nixpkgs-${current}";
|
msg = "crane requires at least nixpkgs-${minSupported}, supplied nixpkgs-${current}";
|
||||||
|
|
||||||
mySplice = f: makeScopeWithSplicing' {
|
# Helps keep things in sync between `overrideToolchain` and `keep`
|
||||||
inherit otherSplices f;
|
attrsForToolchainOverride = [
|
||||||
|
"cargo"
|
||||||
|
"clippy"
|
||||||
|
"rustc"
|
||||||
|
"rustfmt"
|
||||||
|
];
|
||||||
|
|
||||||
|
spliceToolchain = toolchainFn:
|
||||||
|
let
|
||||||
|
splices = {
|
||||||
|
pkgsBuildBuild = { toolchain = toolchainFn pkgsBuildBuild; };
|
||||||
|
pkgsBuildHost = { toolchain = toolchainFn pkgsBuildHost; };
|
||||||
|
pkgsBuildTarget = { toolchain = toolchainFn pkgsBuildTarget; };
|
||||||
|
pkgsHostHost = { toolchain = toolchainFn pkgsHostHost; };
|
||||||
|
pkgsHostTarget = { toolchain = toolchainFn pkgsHostTarget; };
|
||||||
|
pkgsTargetTarget = lib.optionalAttrs (pkgsTargetTarget?newScope) { toolchain = toolchainFn pkgsTargetTarget; };
|
||||||
|
};
|
||||||
|
in
|
||||||
|
(splicePackages splices).toolchain;
|
||||||
|
|
||||||
|
scopeFn = self:
|
||||||
|
let
|
||||||
|
inherit (self) callPackage;
|
||||||
|
|
||||||
|
internalCrateNameFromCargoToml = callPackage ./internalCrateNameFromCargoToml.nix { };
|
||||||
|
internalCrateNameForCleanSource = callPackage ./internalCrateNameForCleanSource.nix {
|
||||||
|
inherit internalCrateNameFromCargoToml;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
appendCrateRegistries = input: self.overrideScope (_final: prev: {
|
||||||
|
crateRegistries = prev.crateRegistries // (lib.foldl (a: b: a // b) { } input);
|
||||||
|
});
|
||||||
|
|
||||||
|
buildDepsOnly = callPackage ./buildDepsOnly.nix { };
|
||||||
|
buildPackage = callPackage ./buildPackage.nix { };
|
||||||
|
buildTrunkPackage = callPackage ./buildTrunkPackage.nix { };
|
||||||
|
cargoAudit = callPackage ./cargoAudit.nix { };
|
||||||
|
cargoBuild = callPackage ./cargoBuild.nix { };
|
||||||
|
cargoClippy = callPackage ./cargoClippy.nix { };
|
||||||
|
cargoDeny = callPackage ./cargoDeny.nix { };
|
||||||
|
cargoDoc = callPackage ./cargoDoc.nix { };
|
||||||
|
cargoFmt = callPackage ./cargoFmt.nix { };
|
||||||
|
cargoHelperFunctionsHook = callPackage ./setupHooks/cargoHelperFunctions.nix { };
|
||||||
|
cargoLlvmCov = callPackage ./cargoLlvmCov.nix { };
|
||||||
|
cargoNextest = callPackage ./cargoNextest.nix { };
|
||||||
|
cargoTarpaulin = callPackage ./cargoTarpaulin.nix { };
|
||||||
|
cargoTest = callPackage ./cargoTest.nix { };
|
||||||
|
cleanCargoSource = callPackage ./cleanCargoSource.nix {
|
||||||
|
inherit internalCrateNameForCleanSource;
|
||||||
|
};
|
||||||
|
cleanCargoToml = callPackage ./cleanCargoToml.nix { };
|
||||||
|
configureCargoCommonVarsHook = callPackage ./setupHooks/configureCargoCommonVars.nix { };
|
||||||
|
configureCargoVendoredDepsHook = callPackage ./setupHooks/configureCargoVendoredDeps.nix { };
|
||||||
|
craneUtils = callPackage ../pkgs/crane-utils { };
|
||||||
|
|
||||||
|
crateNameFromCargoToml = callPackage ./crateNameFromCargoToml.nix {
|
||||||
|
inherit internalCrateNameFromCargoToml;
|
||||||
|
};
|
||||||
|
|
||||||
|
crateRegistries = self.registryFromDownloadUrl {
|
||||||
|
dl = "https://static.crates.io/crates";
|
||||||
|
indexUrl = "https://github.com/rust-lang/crates.io-index";
|
||||||
|
};
|
||||||
|
|
||||||
|
devShell = callPackage ./devShell.nix { };
|
||||||
|
downloadCargoPackage = callPackage ./downloadCargoPackage.nix { };
|
||||||
|
downloadCargoPackageFromGit = callPackage ./downloadCargoPackageFromGit.nix { };
|
||||||
|
filterCargoSources = callPackage ./filterCargoSources.nix { };
|
||||||
|
findCargoFiles = callPackage ./findCargoFiles.nix { };
|
||||||
|
inheritCargoArtifactsHook = callPackage ./setupHooks/inheritCargoArtifacts.nix { };
|
||||||
|
installCargoArtifactsHook = callPackage ./setupHooks/installCargoArtifacts.nix { };
|
||||||
|
installFromCargoBuildLogHook = callPackage ./setupHooks/installFromCargoBuildLog.nix { };
|
||||||
|
mkCargoDerivation = callPackage ./mkCargoDerivation.nix { };
|
||||||
|
mkDummySrc = callPackage ./mkDummySrc.nix { };
|
||||||
|
|
||||||
|
overrideToolchain = toolchainArg: self.overrideScope (_final: _prev:
|
||||||
|
let
|
||||||
|
toolchain =
|
||||||
|
if lib.isFunction toolchainArg
|
||||||
|
then spliceToolchain toolchainArg
|
||||||
|
else toolchainArg;
|
||||||
|
needsSplicing = stdenv.buildPlatform != stdenv.hostPlatform && toolchain?__spliced == false;
|
||||||
|
warningMsg = ''
|
||||||
|
craneLib.overrideToolchain requires a spliced toolchain when cross-compiling. Consider specifying
|
||||||
|
a function which constructs a toolchain for any given `pkgs` instantiation:
|
||||||
|
|
||||||
|
(crane.mkLib pkgs).overrideToolchain (p: ...)
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
lib.warnIf needsSplicing warningMsg (lib.genAttrs attrsForToolchainOverride (_: toolchain))
|
||||||
|
);
|
||||||
|
|
||||||
|
path = callPackage ./path.nix {
|
||||||
|
inherit internalCrateNameForCleanSource;
|
||||||
|
};
|
||||||
|
|
||||||
|
registryFromDownloadUrl = callPackage ./registryFromDownloadUrl.nix { };
|
||||||
|
registryFromGitIndex = callPackage ./registryFromGitIndex.nix { };
|
||||||
|
registryFromSparse = callPackage ./registryFromSparse.nix { };
|
||||||
|
removeReferencesToVendoredSourcesHook = callPackage ./setupHooks/removeReferencesToVendoredSources.nix { };
|
||||||
|
replaceCargoLockHook = callPackage ./setupHooks/replaceCargoLockHook.nix { };
|
||||||
|
urlForCargoPackage = callPackage ./urlForCargoPackage.nix { };
|
||||||
|
vendorCargoDeps = callPackage ./vendorCargoDeps.nix { };
|
||||||
|
vendorMultipleCargoDeps = callPackage ./vendorMultipleCargoDeps.nix { };
|
||||||
|
vendorCargoRegistries = callPackage ./vendorCargoRegistries.nix { };
|
||||||
|
vendorGitDeps = callPackage ./vendorGitDeps.nix { };
|
||||||
|
writeTOML = callPackage ./writeTOML.nix { };
|
||||||
|
};
|
||||||
|
|
||||||
|
craneSpliced = makeScopeWithSplicing' {
|
||||||
|
f = scopeFn;
|
||||||
|
otherSplices = {
|
||||||
|
selfBuildBuild = lib.makeScope pkgsBuildBuild.newScope scopeFn;
|
||||||
|
selfBuildHost = lib.makeScope pkgsBuildHost.newScope scopeFn;
|
||||||
|
selfBuildTarget = lib.makeScope pkgsBuildTarget.newScope scopeFn;
|
||||||
|
selfHostHost = lib.makeScope pkgsHostHost.newScope scopeFn;
|
||||||
|
selfHostTarget = lib.makeScope pkgsHostTarget.newScope scopeFn;
|
||||||
|
selfTargetTarget = lib.optionalAttrs (pkgsTargetTarget?newScope) (lib.makeScope pkgsTargetTarget.newScope scopeFn);
|
||||||
|
};
|
||||||
|
keep = self: lib.optionalAttrs (self?cargo)
|
||||||
|
(lib.genAttrs attrsForToolchainOverride (n: self.${n}));
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
lib.warnIf isUnsupported msg (mySplice (self:
|
lib.warnIf isUnsupported msg (craneSpliced)
|
||||||
let
|
|
||||||
inherit (self) callPackage;
|
|
||||||
|
|
||||||
internalCrateNameFromCargoToml = callPackage ./internalCrateNameFromCargoToml.nix { };
|
|
||||||
internalCrateNameForCleanSource = callPackage ./internalCrateNameForCleanSource.nix {
|
|
||||||
inherit internalCrateNameFromCargoToml;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
appendCrateRegistries = input: self.overrideScope (_final: prev: {
|
|
||||||
crateRegistries = prev.crateRegistries // (lib.foldl (a: b: a // b) { } input);
|
|
||||||
});
|
|
||||||
|
|
||||||
buildDepsOnly = callPackage ./buildDepsOnly.nix { };
|
|
||||||
buildPackage = callPackage ./buildPackage.nix { };
|
|
||||||
buildTrunkPackage = callPackage ./buildTrunkPackage.nix { };
|
|
||||||
cargoAudit = callPackage ./cargoAudit.nix { };
|
|
||||||
cargoBuild = callPackage ./cargoBuild.nix { };
|
|
||||||
cargoClippy = callPackage ./cargoClippy.nix { };
|
|
||||||
cargoDeny = callPackage ./cargoDeny.nix { };
|
|
||||||
cargoDoc = callPackage ./cargoDoc.nix { };
|
|
||||||
cargoFmt = callPackage ./cargoFmt.nix { };
|
|
||||||
cargoHelperFunctionsHook = callPackage ./setupHooks/cargoHelperFunctions.nix { };
|
|
||||||
cargoLlvmCov = callPackage ./cargoLlvmCov.nix { };
|
|
||||||
cargoNextest = callPackage ./cargoNextest.nix { };
|
|
||||||
cargoTarpaulin = callPackage ./cargoTarpaulin.nix { };
|
|
||||||
cargoTest = callPackage ./cargoTest.nix { };
|
|
||||||
cleanCargoSource = callPackage ./cleanCargoSource.nix {
|
|
||||||
inherit internalCrateNameForCleanSource;
|
|
||||||
};
|
|
||||||
cleanCargoToml = callPackage ./cleanCargoToml.nix { };
|
|
||||||
configureCargoCommonVarsHook = callPackage ./setupHooks/configureCargoCommonVars.nix { };
|
|
||||||
configureCargoVendoredDepsHook = callPackage ./setupHooks/configureCargoVendoredDeps.nix { };
|
|
||||||
devShell = callPackage ./devShell.nix { };
|
|
||||||
|
|
||||||
crateNameFromCargoToml = callPackage ./crateNameFromCargoToml.nix {
|
|
||||||
inherit internalCrateNameFromCargoToml;
|
|
||||||
};
|
|
||||||
|
|
||||||
crateRegistries = self.registryFromDownloadUrl {
|
|
||||||
dl = "https://static.crates.io/crates";
|
|
||||||
indexUrl = "https://github.com/rust-lang/crates.io-index";
|
|
||||||
};
|
|
||||||
|
|
||||||
downloadCargoPackage = callPackage ./downloadCargoPackage.nix { };
|
|
||||||
downloadCargoPackageFromGit = callPackage ./downloadCargoPackageFromGit.nix { };
|
|
||||||
filterCargoSources = callPackage ./filterCargoSources.nix { };
|
|
||||||
findCargoFiles = callPackage ./findCargoFiles.nix { };
|
|
||||||
inheritCargoArtifactsHook = callPackage ./setupHooks/inheritCargoArtifacts.nix { };
|
|
||||||
installCargoArtifactsHook = callPackage ./setupHooks/installCargoArtifacts.nix { };
|
|
||||||
installFromCargoBuildLogHook = callPackage ./setupHooks/installFromCargoBuildLog.nix { };
|
|
||||||
mkCargoDerivation = callPackage ./mkCargoDerivation.nix { };
|
|
||||||
mkDummySrc = callPackage ./mkDummySrc.nix { };
|
|
||||||
|
|
||||||
overrideToolchain = toolchain: self.overrideScope (_final: _prev: {
|
|
||||||
cargo = toolchain;
|
|
||||||
clippy = toolchain;
|
|
||||||
rustc = toolchain;
|
|
||||||
rustfmt = toolchain;
|
|
||||||
});
|
|
||||||
|
|
||||||
path = callPackage ./path.nix {
|
|
||||||
inherit internalCrateNameForCleanSource;
|
|
||||||
};
|
|
||||||
|
|
||||||
registryFromDownloadUrl = callPackage ./registryFromDownloadUrl.nix { };
|
|
||||||
registryFromGitIndex = callPackage ./registryFromGitIndex.nix { };
|
|
||||||
registryFromSparse = callPackage ./registryFromSparse.nix { };
|
|
||||||
removeReferencesToVendoredSourcesHook = callPackage ./setupHooks/removeReferencesToVendoredSources.nix { };
|
|
||||||
replaceCargoLockHook = callPackage ./setupHooks/replaceCargoLockHook.nix { };
|
|
||||||
urlForCargoPackage = callPackage ./urlForCargoPackage.nix { };
|
|
||||||
vendorCargoDeps = callPackage ./vendorCargoDeps.nix { };
|
|
||||||
vendorMultipleCargoDeps = callPackage ./vendorMultipleCargoDeps.nix { };
|
|
||||||
vendorCargoRegistries = callPackage ./vendorCargoRegistries.nix { };
|
|
||||||
vendorGitDeps = callPackage ./vendorGitDeps.nix { };
|
|
||||||
writeTOML = callPackage ./writeTOML.nix { };
|
|
||||||
}))
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{ lib
|
{ lib
|
||||||
, cargo
|
, cargo
|
||||||
|
, craneUtils
|
||||||
, jq
|
, jq
|
||||||
, pkgsBuildBuild
|
, pkgsBuildBuild
|
||||||
}:
|
}:
|
||||||
@ -8,8 +9,6 @@ let
|
|||||||
inherit (pkgsBuildBuild)
|
inherit (pkgsBuildBuild)
|
||||||
fetchgit
|
fetchgit
|
||||||
stdenv;
|
stdenv;
|
||||||
|
|
||||||
craneUtils = pkgsBuildBuild.callPackage ../pkgs/crane-utils { };
|
|
||||||
in
|
in
|
||||||
{ git
|
{ git
|
||||||
, rev
|
, rev
|
||||||
|
Loading…
Reference in New Issue
Block a user