The --target option expects the target spec JSON, not the short target name, so use rustcTargetSpec.
138 lines
4.0 KiB
Nix
138 lines
4.0 KiB
Nix
{
|
|
cargo-nextest,
|
|
clang,
|
|
diffutils,
|
|
lib,
|
|
makeSetupHook,
|
|
rust,
|
|
stdenv,
|
|
pkgsHostTarget,
|
|
pkgsTargetTarget,
|
|
|
|
# This confusingly-named parameter indicates the *subdirectory of
|
|
# `target/` from which to copy the build artifacts. It is derived
|
|
# from a stdenv platform (or a JSON file).
|
|
target ? stdenv.targetPlatform.rust.cargoShortTarget,
|
|
tests,
|
|
pkgsCross,
|
|
}:
|
|
{
|
|
cargoBuildHook = makeSetupHook {
|
|
name = "cargo-build-hook.sh";
|
|
substitutions = {
|
|
inherit (stdenv.targetPlatform.rust) rustcTargetSpec;
|
|
inherit (rust.envVars) setEnv;
|
|
|
|
};
|
|
passthru.tests = {
|
|
test = tests.rust-hooks.cargoBuildHook;
|
|
}
|
|
// lib.optionalAttrs (stdenv.isLinux) {
|
|
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoBuildHook;
|
|
};
|
|
} ./cargo-build-hook.sh;
|
|
|
|
cargoCheckHook = makeSetupHook {
|
|
name = "cargo-check-hook.sh";
|
|
substitutions = {
|
|
inherit (stdenv.targetPlatform.rust) rustcTargetSpec;
|
|
inherit (rust.envVars) setEnv;
|
|
};
|
|
passthru.tests = {
|
|
test = tests.rust-hooks.cargoCheckHook;
|
|
}
|
|
// lib.optionalAttrs (stdenv.isLinux) {
|
|
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoCheckHook;
|
|
};
|
|
} ./cargo-check-hook.sh;
|
|
|
|
cargoInstallHook = makeSetupHook {
|
|
name = "cargo-install-hook.sh";
|
|
substitutions = {
|
|
targetSubdirectory = target;
|
|
};
|
|
passthru.tests = {
|
|
test = tests.rust-hooks.cargoInstallHook;
|
|
}
|
|
// lib.optionalAttrs (stdenv.isLinux) {
|
|
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoInstallHook;
|
|
};
|
|
} ./cargo-install-hook.sh;
|
|
|
|
cargoNextestHook = makeSetupHook {
|
|
name = "cargo-nextest-hook.sh";
|
|
propagatedBuildInputs = [ cargo-nextest ];
|
|
substitutions = {
|
|
inherit (stdenv.targetPlatform.rust) rustcTargetSpec;
|
|
};
|
|
passthru.tests = {
|
|
test = tests.rust-hooks.cargoNextestHook;
|
|
}
|
|
// lib.optionalAttrs (stdenv.isLinux) {
|
|
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoNextestHook;
|
|
};
|
|
} ./cargo-nextest-hook.sh;
|
|
|
|
cargoSetupHook = makeSetupHook {
|
|
name = "cargo-setup-hook.sh";
|
|
propagatedBuildInputs = [ ];
|
|
substitutions = {
|
|
defaultConfig = ../fetchcargo-default-config.toml;
|
|
|
|
# Specify the stdenv's `diff` by abspath to ensure that the user's build
|
|
# inputs do not cause us to find the wrong `diff`.
|
|
diff = "${lib.getBin diffutils}/bin/diff";
|
|
|
|
cargoConfig =
|
|
lib.optionalString (stdenv.hostPlatform.config != stdenv.targetPlatform.config) ''
|
|
[target."${stdenv.targetPlatform.rust.rustcTarget}"]
|
|
"linker" = "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc"
|
|
"rustflags" = [ ${
|
|
lib.concatStringsSep ", " (
|
|
[
|
|
''"-Ctarget-feature=${if stdenv.targetPlatform.isStatic then "+" else "-"}crt-static"''
|
|
]
|
|
++ lib.optional (!stdenv.targetPlatform.isx86_32) ''"-Cforce-frame-pointers=yes"''
|
|
)
|
|
} ]
|
|
''
|
|
+ ''
|
|
[target."${stdenv.hostPlatform.rust.rustcTarget}"]
|
|
"linker" = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
|
|
"rustflags" = [ ${
|
|
lib.optionalString (!stdenv.hostPlatform.isx86_32) ''"-Cforce-frame-pointers=yes"''
|
|
} ]
|
|
'';
|
|
};
|
|
|
|
passthru.tests = {
|
|
test = tests.rust-hooks.cargoSetupHook;
|
|
}
|
|
// lib.optionalAttrs (stdenv.isLinux) {
|
|
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoSetupHook;
|
|
};
|
|
} ./cargo-setup-hook.sh;
|
|
|
|
maturinBuildHook = makeSetupHook {
|
|
name = "maturin-build-hook.sh";
|
|
propagatedBuildInputs = [
|
|
pkgsHostTarget.maturin
|
|
pkgsHostTarget.cargo
|
|
pkgsHostTarget.rustc
|
|
];
|
|
substitutions = {
|
|
inherit (stdenv.targetPlatform.rust) rustcTargetSpec;
|
|
inherit (rust.envVars) setEnv;
|
|
|
|
};
|
|
} ./maturin-build-hook.sh;
|
|
|
|
bindgenHook = makeSetupHook {
|
|
name = "rust-bindgen-hook";
|
|
substitutions = {
|
|
libclang = (lib.getLib clang.cc);
|
|
inherit clang;
|
|
};
|
|
} ./rust-bindgen-hook.sh;
|
|
}
|