From 83ac9c07e4df352e177ebdf978320089a137183a Mon Sep 17 00:00:00 2001 From: Ben Wolsieffer Date: Thu, 20 Dec 2018 19:28:09 -0500 Subject: rust: add support for armv6l-linux and armv7l-linux --- .../rust/build-rust-crate/build-crate.nix | 15 ++------------- pkgs/build-support/rust/build-rust-crate/default.nix | 4 ++-- pkgs/build-support/rust/default.nix | 19 +++++++------------ 3 files changed, 11 insertions(+), 27 deletions(-) (limited to 'pkgs/build-support/rust') diff --git a/pkgs/build-support/rust/build-rust-crate/build-crate.nix b/pkgs/build-support/rust/build-rust-crate/build-crate.nix index e0a52e62561..ada68a90b67 100644 --- a/pkgs/build-support/rust/build-rust-crate/build-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/build-crate.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, echo_build_heading, noisily, makeDeps }: +{ lib, stdenv, echo_build_heading, noisily, makeDeps, rust }: { crateName, dependencies, crateFeatures, crateRenames, libName, release, libPath, @@ -13,17 +13,6 @@ (if release then "-C opt-level=3" else "-C debuginfo=2") (["-C codegen-units=$NIX_BUILD_CORES"] ++ extraRustcOpts); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; - - # Some platforms have different names for rustc. - rustPlatform = - with stdenv.hostPlatform.parsed; - let cpu_ = if cpu.name == "armv7a" then "armv7" - else cpu.name; - vendor_ = vendor.name; - kernel_ = kernel.name; - abi_ = abi.name; - in - "${cpu_}-${vendor_}-${kernel_}-${abi_}"; in '' runHook preBuild norm="" @@ -67,7 +56,7 @@ ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} \ - ${if stdenv.hostPlatform != stdenv.buildPlatform then "--target ${rustPlatform} -C linker=${stdenv.hostPlatform.config}-gcc" else ""} + ${if stdenv.hostPlatform != stdenv.buildPlatform then "--target ${rust.toRustTarget stdenv.hostPlatform} -C linker=${stdenv.hostPlatform.config}-gcc" else ""} if [ "$crate_name_" != "$crate_name" ]; then mv target/bin/$crate_name_ target/bin/$crate_name fi diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index 6534e21c0f0..796f83ee8b6 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -4,7 +4,7 @@ # This can be useful for deploying packages with NixOps, and to share # binary dependencies between projects. -{ lib, stdenv, defaultCrateOverrides, fetchCrate, rustc }: +{ lib, stdenv, defaultCrateOverrides, fetchCrate, rustc, rust }: let # This doesn't appear to be officially documented anywhere yet. @@ -59,7 +59,7 @@ let ''; configureCrate = import ./configure-crate.nix { inherit lib stdenv echo_build_heading noisily makeDeps; }; - buildCrate = import ./build-crate.nix { inherit lib stdenv echo_build_heading noisily makeDeps; }; + buildCrate = import ./build-crate.nix { inherit lib stdenv echo_build_heading noisily makeDeps rust; }; installCrate = import ./install-crate.nix; in diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix index f0f949b2205..1d8e4448674 100644 --- a/pkgs/build-support/rust/default.nix +++ b/pkgs/build-support/rust/default.nix @@ -1,4 +1,4 @@ -{ stdenv, cacert, git, cargo, rustc, fetchcargo, buildPackages, windows }: +{ stdenv, cacert, git, rust, cargo, rustc, fetchcargo, buildPackages, windows }: { name ? "${args.pname}-${args.version}" , cargoSha256 ? "unset" @@ -46,12 +46,7 @@ let cargoDepsCopy="$sourceRoot/${cargoVendorDir}" ''; - hostConfig = stdenv.hostPlatform.config; - - rustHostConfig = { - x86_64-pc-mingw32 = "x86_64-pc-windows-gnu"; - }.${hostConfig} or hostConfig; - rustTarget = if target == null then rustHostConfig else target; + rustTarget = if target == null then rust.toRustTarget stdenv.hostPlatform else target; ccForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"; cxxForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++"; @@ -87,7 +82,7 @@ stdenv.mkDerivation (args // { --subst-var-by vendor "$(pwd)/$cargoDepsCopy" cat >> .cargo/config <<'EOF' - [target."${stdenv.buildPlatform.config}"] + [target."${rust.toRustTarget stdenv.buildPlatform}"] "linker" = "${ccForBuild}" ${stdenv.lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) '' [target."${rustTarget}"] @@ -129,10 +124,10 @@ stdenv.mkDerivation (args // { ( set -x env \ - "CC_${stdenv.buildPlatform.config}"="${ccForBuild}" \ - "CXX_${stdenv.buildPlatform.config}"="${cxxForBuild}" \ - "CC_${stdenv.hostPlatform.config}"="${ccForHost}" \ - "CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \ + "CC_${rust.toRustTarget stdenv.buildPlatform}"="${ccForBuild}" \ + "CXX_${rust.toRustTarget stdenv.buildPlatform}"="${cxxForBuild}" \ + "CC_${rust.toRustTarget stdenv.hostPlatform}"="${ccForHost}" \ + "CXX_${rust.toRustTarget stdenv.hostPlatform}"="${cxxForHost}" \ cargo build \ ${stdenv.lib.optionalString (buildType == "release") "--release"} \ --target ${rustTarget} \ -- cgit 1.4.1