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
|
pkgs
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
drivers = pkgs.runCommandLocal "dylint-drivers" { } ''
|
|
||||||
mkdir -p $out/nightly-2025-01-09
|
lints = [
|
||||||
ln -s ${lib.cargo-dylint-driver}/bin/dylint_driver-nix $out/nightly-2025-01-09/dylint-driver
|
{
|
||||||
'';
|
toolchain = "2025-01-09";
|
||||||
|
package = lib.cargo-dylint-general;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
dylint = lib.mkDylint { inherit lints; };
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
packages = lib // {
|
packages = lib // {
|
||||||
inherit craneLib drivers;
|
inherit craneLib;
|
||||||
rust = rustTarget;
|
rust = rustTarget;
|
||||||
};
|
};
|
||||||
|
|
||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
RUSTUP_TOOLCHAIN = "nightly-2025-01-09";
|
|
||||||
DYLINT_LIBRARY_PATH = "${lib.cargo-dylint-general}/lib/";
|
|
||||||
DYLINT_DRIVER_PATH = drivers;
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
rustTarget
|
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,
|
pkg-config,
|
||||||
openssl,
|
openssl,
|
||||||
|
|
||||||
cargo-dylint-driver,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,11 @@ let
|
||||||
callPackage = pkgs.lib.callPackageWith (pkgs // packages // { inherit inputs craneLib; });
|
callPackage = pkgs.lib.callPackageWith (pkgs // packages // { inherit inputs craneLib; });
|
||||||
packages = {
|
packages = {
|
||||||
cargo-dylint = callPackage ./cargo-dylint.nix { };
|
cargo-dylint = callPackage ./cargo-dylint.nix { };
|
||||||
cargo-dylint-driver = callPackage ./cargo-dylint-driver.nix { };
|
|
||||||
cargo-dylint-general = callPackage ./cargo-dylint-general.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
|
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