diff options
author | Jörg Thalheim <joerg@thalheim.io> | 2018-11-21 01:47:45 +0000 |
---|---|---|
committer | John Ericson <git@JohnEricson.me> | 2019-03-29 11:11:00 -0400 |
commit | 912dca193aee9da77a4d429285db53729d81aa3d (patch) | |
tree | 62ba862644c2c9c6c9f5da481e9ebb9f9ab75117 /pkgs/build-support/rust | |
parent | 3c930188c8dff22327c1c12bb8b3baa49a011dda (diff) | |
download | nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.tar nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.tar.gz nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.tar.bz2 nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.tar.lz nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.tar.xz nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.tar.zst nixpkgs-912dca193aee9da77a4d429285db53729d81aa3d.zip |
rust: fix cross-compilation
Diffstat (limited to 'pkgs/build-support/rust')
-rw-r--r-- | pkgs/build-support/rust/default.nix | 61 | ||||
-rw-r--r-- | pkgs/build-support/rust/make-rust-platform.nix | 18 |
2 files changed, 48 insertions, 31 deletions
diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix index c69832a89b9..7130dde388b 100644 --- a/pkgs/build-support/rust/default.nix +++ b/pkgs/build-support/rust/default.nix @@ -1,4 +1,4 @@ -{ stdenv, cacert, git, cargo, rustc, cargo-vendor, fetchcargo, python3 }: +{ stdenv, cacert, git, cargo, rustc, cargo-vendor, fetchcargo, python3, buildPackages }: { name ? "${args.pname}-${args.version}" , cargoSha256 ? "unset" @@ -9,6 +9,7 @@ , sourceRoot ? null , logLevel ? "" , buildInputs ? [] +, nativeBuildInputs ? [] , cargoUpdateHook ? "" , cargoDepsHook ? "" , cargoBuildFlags ? [] @@ -37,21 +38,22 @@ let cargoDepsCopy="$sourceRoot/${cargoVendorDir}" ''; + ccForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"; + cxxForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++"; + ccForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; + cxxForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"; + releaseDir = "target/${stdenv.hostPlatform.config}/release"; + in stdenv.mkDerivation (args // { inherit cargoDeps; patchRegistryDeps = ./patch-registry-deps; - buildInputs = [ cacert git cargo rustc ] ++ buildInputs; + nativeBuildInputs = [ cargo rustc git cacert ] ++ nativeBuildInputs; + inherit buildInputs; patches = cargoPatches ++ patches; - configurePhase = args.configurePhase or '' - runHook preConfigure - # noop - runHook postConfigure - ''; - postUnpack = '' eval "$cargoDepsHook" @@ -63,17 +65,40 @@ in stdenv.mkDerivation (args // { config=${./fetchcargo-default-config.toml}; fi; substitute $config .cargo/config \ - --subst-var-by vendor "$(pwd)/$cargoDepsCopy" + --subst-var-by vendor "$(pwd)/$cargoDepsCopy" unset cargoDepsCopy export RUST_LOG=${logLevel} '' + (args.postUnpack or ""); + configurePhase = args.configurePhase or '' + runHook preConfigure + mkdir -p .cargo + cat >> .cargo/config <<'EOF' + [target."${stdenv.buildPlatform.config}"] + "linker" = "${ccForBuild}" + ${stdenv.lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) '' + [target."${stdenv.hostPlatform.config}"] + "linker" = "${ccForHost}" + ''} + EOF + cat .cargo/config + runHook postConfigure + ''; + buildPhase = with builtins; args.buildPhase or '' runHook preBuild - echo "Running cargo build --release ${concatStringsSep " " cargoBuildFlags}" - cargo build --release --frozen ${concatStringsSep " " cargoBuildFlags} + echo "Running cargo build --target ${stdenv.hostPlatform.config} --release ${concatStringsSep " " cargoBuildFlags}" + env \ + "CC_${stdenv.buildPlatform.config}"="${ccForBuild}" \ + "CXX_${stdenv.buildPlatform.config}"="${cxxForBuild}" \ + "CC_${stdenv.hostPlatform.config}"="${ccForHost}" \ + "CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \ + cargo build \ + --release \ + --target ${stdenv.hostPlatform.config} \ + --frozen ${concatStringsSep " " cargoBuildFlags} runHook postBuild ''; @@ -86,11 +111,21 @@ in stdenv.mkDerivation (args // { doCheck = args.doCheck or true; + inherit releaseDir; + installPhase = args.installPhase or '' runHook preInstall mkdir -p $out/bin $out/lib - find target/release -maxdepth 1 -type f -executable ! \( -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \) -print0 | xargs -r -0 cp -t $out/bin - find target/release -maxdepth 1 -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" -print0 | xargs -r -0 cp -t $out/lib + + find $releaseDir \ + -maxdepth 1 \ + -type f \ + -executable ! \( -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \) \ + -print0 | xargs -r -0 cp -t $out/bin + find $releaseDir \ + -maxdepth 1 \ + -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \ + -print0 | xargs -r -0 cp -t $out/lib rmdir --ignore-fail-on-non-empty $out/lib $out/bin runHook postInstall ''; diff --git a/pkgs/build-support/rust/make-rust-platform.nix b/pkgs/build-support/rust/make-rust-platform.nix deleted file mode 100644 index afbc56865ff..00000000000 --- a/pkgs/build-support/rust/make-rust-platform.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ callPackage }: -{ rustc, cargo, ... }: { - rust = { - inherit rustc cargo; - }; - - buildRustPackage = callPackage ./default.nix { - inherit rustc cargo; - - fetchcargo = callPackage ./fetchcargo.nix { - inherit cargo; - }; - }; - - rustcSrc = callPackage ../../development/compilers/rust/rust-src.nix { - inherit rustc; - }; -} |