Add abstraction to use multiple toolchains

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2025-03-04 09:51:03 +01:00
parent e62f5cce80
commit 385529d568
7 changed files with 83 additions and 39 deletions

View file

@ -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
];
};
}

View file

@ -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;
}
)

View file

@ -4,8 +4,6 @@
pkg-config,
openssl,
cargo-dylint-driver,
}:
let

View file

@ -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

View 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
View 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
View file

@ -0,0 +1,7 @@
{ ... }:
{ package, toolchain }:
{
inherit toolchain package;
}