python3Packages.setuptools-rust: fix cross build for all setuptools-rust based packages
Prior to this change all python packages using `setuptools-rust` were broken when cross compiled as they built binaries for the build platform instead of for the host platform. The setuptoolsRustBuildHook hook would have to be included as a native build input instead of the `setuptools-rust` package, but practically wasn't used anywhere. This change makes it so that `setuptoolsRustBuildHook` becomes unnecessary, and instead `setuptools-rust` propagates a setup-hook directly setting up the build environment, similar to how cmake does it when included via nativeBuildInputs. This change fixes cross on all packages using `setuptools-rust` as a build-system.
This commit is contained in:
@@ -441,20 +441,6 @@ in
|
||||
} ./setuptools-build-hook.sh
|
||||
) { };
|
||||
|
||||
setuptoolsRustBuildHook = callPackage (
|
||||
{ makePythonHook, setuptools-rust }:
|
||||
makePythonHook {
|
||||
name = "setuptools-rust-setup-hook";
|
||||
propagatedBuildInputs = [ setuptools-rust ];
|
||||
substitutions = {
|
||||
pyLibDir = "${python}/lib/${python.libPrefix}";
|
||||
cargoBuildTarget = stdenv.hostPlatform.rust.rustcTargetSpec;
|
||||
cargoLinkerVar = stdenv.hostPlatform.rust.cargoEnvVarTarget;
|
||||
targetLinker = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
||||
};
|
||||
} ./setuptools-rust-hook.sh
|
||||
) { };
|
||||
|
||||
unittestCheckHook = callPackage (
|
||||
{ makePythonHook }:
|
||||
makePythonHook {
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
echo "Sourcing setuptools-rust-hook"
|
||||
|
||||
setuptoolsRustSetup() {
|
||||
# This can work only if rustPlatform.cargoSetupHook is also included
|
||||
if ! command -v cargoSetupPostPatchHook >/dev/null; then
|
||||
echo "ERROR: setuptools-rust has to be used alongside with rustPlatform.cargoSetupHook!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export PYO3_CROSS_LIB_DIR="@pyLibDir@"
|
||||
export CARGO_BUILD_TARGET=@cargoBuildTarget@
|
||||
# TODO theoretically setting linker should not be required because it is
|
||||
# already set in pkgs/build-support/rust/hooks/default.nix but build fails
|
||||
# on missing linker without this.
|
||||
export CARGO_TARGET_@cargoLinkerVar@_LINKER=@targetLinker@
|
||||
}
|
||||
|
||||
preConfigureHooks+=(setuptoolsRustSetup)
|
||||
Reference in New Issue
Block a user