diff options
Diffstat (limited to 'pkgs/development/compilers/rust/default.nix')
-rw-r--r-- | pkgs/development/compilers/rust/default.nix | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/pkgs/development/compilers/rust/default.nix b/pkgs/development/compilers/rust/default.nix index a39cd785cf7..60e31c6def4 100644 --- a/pkgs/development/compilers/rust/default.nix +++ b/pkgs/development/compilers/rust/default.nix @@ -1,3 +1,9 @@ +{ rustcVersion +, rustcSha256 +, bootstrapVersion +, bootstrapHashes +, selectRustPackage +}: { stdenv, lib , buildPackages , newScope, callPackage @@ -5,17 +11,25 @@ , llvmPackages_5 , pkgsBuildTarget, pkgsBuildBuild }: rec { - makeRustPlatform = { rustc, cargo, ... }: { + toRustTarget = platform: with platform.parsed; let + cpu_ = { + "armv7a" = "armv7"; + "armv7l" = "armv7"; + "armv6l" = "arm"; + }.${cpu.name} or cpu.name; + in "${cpu_}-${vendor.name}-${kernel.name}${lib.optionalString (abi.name != "unknown") "-${abi.name}"}"; + + makeRustPlatform = { rustc, cargo, ... }: rec { rust = { inherit rustc cargo; }; - buildRustPackage = callPackage ../../../build-support/rust { - inherit rustc cargo; + fetchcargo = buildPackages.callPackage ../../../build-support/rust/fetchcargo.nix { + inherit cargo; + }; - fetchcargo = buildPackages.callPackage ../../../build-support/rust/fetchcargo.nix { - inherit cargo; - }; + buildRustPackage = callPackage ../../../build-support/rust { + inherit rustc cargo fetchcargo; }; rustcSrc = callPackage ./rust-src.nix { @@ -36,21 +50,27 @@ # cycles / purify builds). In this way, nixpkgs would be in control of all # bootstrapping. packages = { - prebuilt = callPackage ./bootstrap.nix {}; + prebuilt = callPackage ./bootstrap.nix { + version = bootstrapVersion; + hashes = bootstrapHashes; + }; stable = lib.makeScope newScope (self: let # Like `buildRustPackages`, but may also contain prebuilt binaries to # break cycle. Just like `bootstrapTools` for nixpkgs as a whole, # nothing in the final package set should refer to this. bootstrapRustPackages = self.buildRustPackages.overrideScope' (_: _: lib.optionalAttrs (stdenv.buildPlatform == stdenv.hostPlatform) - buildPackages.rust.packages.prebuilt); + (selectRustPackage buildPackages).packages.prebuilt); bootRustPlatform = makeRustPlatform bootstrapRustPackages; in { # Packages suitable for build-time, e.g. `build.rs`-type stuff. - buildRustPackages = buildPackages.rust.packages.stable; + buildRustPackages = (selectRustPackage buildPackages).packages.stable; # Analogous to stdenv rustPlatform = makeRustPlatform self.buildRustPackages; rustc = self.callPackage ./rustc.nix ({ + version = rustcVersion; + sha256 = rustcSha256; + # Use boot package set to break cycle rustPlatform = bootRustPlatform; } // lib.optionalAttrs (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) { |