Add abstraction to use multiple toolchains
Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
parent
e62f5cce80
commit
385529d568
7 changed files with 83 additions and 39 deletions
19
flake.nix
19
flake.nix
|
|
@ -37,24 +37,25 @@
|
|||
pkgs
|
||||
;
|
||||
};
|
||||
drivers = pkgs.runCommandLocal "dylint-drivers" { } ''
|
||||
mkdir -p $out/nightly-2025-01-09
|
||||
ln -s ${lib.cargo-dylint-driver}/bin/dylint_driver-nix $out/nightly-2025-01-09/dylint-driver
|
||||
'';
|
||||
|
||||
lints = [
|
||||
{
|
||||
toolchain = "2025-01-09";
|
||||
package = lib.cargo-dylint-general;
|
||||
}
|
||||
];
|
||||
dylint = lib.mkDylint { inherit lints; };
|
||||
in
|
||||
{
|
||||
packages = lib // {
|
||||
inherit craneLib drivers;
|
||||
inherit craneLib;
|
||||
rust = rustTarget;
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
RUSTUP_TOOLCHAIN = "nightly-2025-01-09";
|
||||
DYLINT_LIBRARY_PATH = "${lib.cargo-dylint-general}/lib/";
|
||||
DYLINT_DRIVER_PATH = drivers;
|
||||
nativeBuildInputs = [
|
||||
rustTarget
|
||||
lib.cargo-dylint
|
||||
dylint
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
craneLib,
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "cargo-dylint-driver";
|
||||
version = "4.0.0";
|
||||
|
||||
src = ../dylint_driver;
|
||||
|
||||
commonArgs = {
|
||||
inherit pname version src;
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
RUSTUP_TOOLCHAIN = "nightly-2025-01-09";
|
||||
};
|
||||
in
|
||||
|
||||
craneLib.buildPackage (
|
||||
commonArgs
|
||||
// {
|
||||
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
|
||||
|
||||
doNotRemoveReferencesToRustToolchain = true;
|
||||
}
|
||||
)
|
||||
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
pkg-config,
|
||||
openssl,
|
||||
|
||||
cargo-dylint-driver,
|
||||
}:
|
||||
|
||||
let
|
||||
|
|
|
|||
|
|
@ -9,8 +9,11 @@ let
|
|||
callPackage = pkgs.lib.callPackageWith (pkgs // packages // { inherit inputs craneLib; });
|
||||
packages = {
|
||||
cargo-dylint = callPackage ./cargo-dylint.nix { };
|
||||
cargo-dylint-driver = callPackage ./cargo-dylint-driver.nix { };
|
||||
cargo-dylint-general = callPackage ./cargo-dylint-general.nix { };
|
||||
|
||||
mkCargoDylintDriver = callPackage ./mk-cargo-dylint-driver.nix { };
|
||||
mkLint = callPackage ./mk-lint.nix { };
|
||||
mkDylint = callPackage ./mk-dylint.nix { };
|
||||
};
|
||||
|
||||
in
|
||||
|
|
|
|||
22
lib/mk-cargo-dylint-driver.nix
Normal file
22
lib/mk-cargo-dylint-driver.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
craneLib,
|
||||
}:
|
||||
|
||||
toolchainName: toolchain:
|
||||
|
||||
let
|
||||
pname = "cargo-dylint-driver-${toolchainName}";
|
||||
version = "4.0.0";
|
||||
src = ../dylint_driver;
|
||||
in
|
||||
|
||||
(craneLib.overrideToolchain toolchain).buildPackage ({
|
||||
inherit pname version src;
|
||||
|
||||
strictDeps = true;
|
||||
cargoArtifacts = null;
|
||||
|
||||
RUSTUP_TOOLCHAIN = toolchainName;
|
||||
|
||||
doNotRemoveReferencesToRustToolchain = true;
|
||||
})
|
||||
40
lib/mk-dylint.nix
Normal file
40
lib/mk-dylint.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
pkgs,
|
||||
|
||||
cargo-dylint,
|
||||
|
||||
mkCargoDylintDriver,
|
||||
}:
|
||||
|
||||
{ lints }:
|
||||
|
||||
let
|
||||
inherit (pkgs) lib;
|
||||
driver_names = lib.groupBy (v: v.toolchain) lints;
|
||||
driverMap = builtins.mapAttrs (
|
||||
name: _:
|
||||
mkCargoDylintDriver "nightly-${name}" (
|
||||
pkgs.rust-bin.nightly."${name}".default.override {
|
||||
extensions = [
|
||||
"rustc-dev"
|
||||
];
|
||||
}
|
||||
)
|
||||
) driver_names;
|
||||
drivers = pkgs.runCommandLocal "dylint-drivers" { } (
|
||||
lib.strings.concatMapAttrsStringSep "\n" (name: driver: ''
|
||||
mkdir -p $out/nightly-${name}
|
||||
ln -s ${driver}/bin/dylint_driver-nix $out/nightly-${name}/dylint-driver
|
||||
'') driverMap
|
||||
);
|
||||
in
|
||||
pkgs.runCommandLocal "cargo-dylint-wrapped"
|
||||
{
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
meta.mainProgram = "cargo-dylint";
|
||||
}
|
||||
''
|
||||
makeWrapper ${cargo-dylint}/bin/cargo-dylint $out/bin/cargo-dylint \
|
||||
--set DYLINT_LIBRARY_PATH ${lib.strings.makeLibraryPath (builtins.map (v: v.package) lints)} \
|
||||
--set DYLINT_DRIVER_PATH ${drivers};
|
||||
''
|
||||
7
lib/mk-lint.nix
Normal file
7
lib/mk-lint.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{ ... }:
|
||||
|
||||
{ package, toolchain }:
|
||||
|
||||
{
|
||||
inherit toolchain package;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue