{ buildPackages , callPackage , cargo , cargo-nextest , clang , lib , makeSetupHook , maturin , rust , rustc , stdenv # 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.hostPlatform.rust.cargoShortTarget }: { cargoBuildHook = callPackage ({ }: makeSetupHook { name = "cargo-build-hook.sh"; propagatedBuildInputs = [ cargo ]; substitutions = { inherit (rust.envVars) rustHostPlatformSpec setEnv; }; } ./cargo-build-hook.sh) {}; cargoCheckHook = callPackage ({ }: makeSetupHook { name = "cargo-check-hook.sh"; propagatedBuildInputs = [ cargo ]; substitutions = { inherit (rust.envVars) rustHostPlatformSpec; }; } ./cargo-check-hook.sh) {}; cargoInstallHook = callPackage ({ }: makeSetupHook { name = "cargo-install-hook.sh"; propagatedBuildInputs = [ ]; substitutions = { targetSubdirectory = target; }; } ./cargo-install-hook.sh) {}; cargoNextestHook = callPackage ({ }: makeSetupHook { name = "cargo-nextest-hook.sh"; propagatedBuildInputs = [ cargo cargo-nextest ]; substitutions = { inherit (rust.envVars) rustHostPlatformSpec; }; } ./cargo-nextest-hook.sh) {}; cargoSetupHook = callPackage ({ }: 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 buildPackages.diffutils}/bin/diff"; cargoConfig = '' [target."${stdenv.buildPlatform.rust.rustcTarget}"] "linker" = "${rust.envVars.linkerForBuild}" ${lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) '' [target."${stdenv.hostPlatform.rust.rustcTarget}"] "linker" = "${rust.envVars.linkerForHost}" ''} "rustflags" = [ "-C", "target-feature=${if stdenv.hostPlatform.isStatic then "+" else "-"}crt-static" ] ''; }; } ./cargo-setup-hook.sh) {}; maturinBuildHook = callPackage ({ pkgsHostTarget }: makeSetupHook { name = "maturin-build-hook.sh"; propagatedBuildInputs = [ pkgsHostTarget.maturin pkgsHostTarget.cargo pkgsHostTarget.rustc ]; substitutions = { inherit (rust.envVars) rustTargetPlatformSpec setEnv; }; } ./maturin-build-hook.sh) {}; bindgenHook = callPackage ({}: makeSetupHook { name = "rust-bindgen-hook"; substitutions = { libclang = clang.cc.lib; inherit clang; }; } ./rust-bindgen-hook.sh) {}; }