Skip to content

Commit

Permalink
rust: added hack to use correctly build cross-compiled standard crates
Browse files Browse the repository at this point in the history
  • Loading branch information
illegalprime committed Mar 12, 2019
1 parent d4ef8c3 commit bd45c09
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions pkgs/build-support/rust/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{ stdenv, cacert, git, cargo, rustc, cargo-vendor, fetchcargo, python3, buildPackages }:
{ stdenv, cacert, git, cargo, cargo-vendor, fetchcargo, python3
, buildPackages, pkgsCross, runCommand, rustc
}:

{ name, cargoSha256 ? "unset"
, src ? null
Expand Down Expand Up @@ -45,12 +47,34 @@ let
cxxForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cxx";
releaseDir = "target/${stdenv.hostPlatform.config}/${buildType}";

# NOTE: this is a HACK to use other rustc's standard crates
rustcCross = let
host = stdenv.hostPlatform.platform.name;
in runCommand "rustc-cross-${stdenv.hostPlatform.config}" {} ''
mkdir -p $out
cp -a ${buildPackages.rustc}/. $out/
chmod u+w -R $out
rm -rf $out/lib/rustlib/${stdenv.hostPlatform.config}
cp -a \
${pkgsCross."${host}".rustc}/lib/rustlib/${stdenv.hostPlatform.config}/. \

This comment has been minimized.

Copy link
@Mic92

Mic92 Mar 12, 2019

Member

This means that cross-compiling rustc itself also works already?

This comment has been minimized.

Copy link
@illegalprime

illegalprime Mar 12, 2019

Author Member

yup!

$out/lib/rustlib/${stdenv.hostPlatform.config}/
chmod a-w -R $out
'';
isCross = stdenv.buildPlatform.config != stdenv.hostPlatform.config;

in stdenv.mkDerivation (args // {
inherit cargoDeps;

patchRegistryDeps = ./patch-registry-deps;

nativeBuildInputs = [ cargo rustc git cacert ] ++ nativeBuildInputs;
nativeBuildInputs = [
cargo
(if isCross then rustcCross else rustc)

This comment has been minimized.

Copy link
@matthewbauer

matthewbauer Mar 12, 2019

Member

Could you try just doing targetPackages.rustc here?

git
cacert
] ++ nativeBuildInputs;
inherit buildInputs;

patches = cargoPatches ++ patches;
Expand Down

0 comments on commit bd45c09

Please sign in to comment.