2019-11-08 12:04:53 +00:00
|
|
|
{ rustcVersion
|
|
|
|
, rustcSha256
|
|
|
|
, bootstrapVersion
|
|
|
|
, bootstrapHashes
|
|
|
|
, selectRustPackage
|
|
|
|
}:
|
2019-06-16 20:59:06 +01:00
|
|
|
{ stdenv, lib
|
2018-11-21 01:47:45 +00:00
|
|
|
, buildPackages
|
|
|
|
, newScope, callPackage
|
2018-10-26 16:06:56 +01:00
|
|
|
, CoreFoundation, Security
|
2019-04-23 14:25:12 +01:00
|
|
|
, llvmPackages_5
|
2019-06-16 20:59:06 +01:00
|
|
|
, pkgsBuildTarget, pkgsBuildBuild
|
2018-11-21 01:47:45 +00:00
|
|
|
}: rec {
|
2018-12-21 00:28:09 +00:00
|
|
|
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}"}";
|
|
|
|
|
2019-12-02 21:25:03 +00:00
|
|
|
makeRustPlatform = { rustc, cargo, ... }: rec {
|
2018-11-21 01:47:45 +00:00
|
|
|
rust = {
|
|
|
|
inherit rustc cargo;
|
|
|
|
};
|
2016-06-14 11:49:48 +01:00
|
|
|
|
2019-12-02 21:25:03 +00:00
|
|
|
fetchcargo = buildPackages.callPackage ../../../build-support/rust/fetchcargo.nix {
|
|
|
|
inherit cargo;
|
|
|
|
};
|
2017-05-30 14:48:06 +01:00
|
|
|
|
2019-12-02 21:25:03 +00:00
|
|
|
buildRustPackage = callPackage ../../../build-support/rust {
|
|
|
|
inherit rustc cargo fetchcargo;
|
2018-11-21 01:47:45 +00:00
|
|
|
};
|
2018-07-09 11:35:01 +01:00
|
|
|
|
2018-11-21 01:47:45 +00:00
|
|
|
rustcSrc = callPackage ./rust-src.nix {
|
|
|
|
inherit rustc;
|
|
|
|
};
|
2016-06-14 11:49:48 +01:00
|
|
|
};
|
|
|
|
|
2018-11-21 01:47:45 +00:00
|
|
|
# This just contains tools for now. But it would conceivably contain
|
|
|
|
# libraries too, say if we picked some default/recommended versions from
|
|
|
|
# `cratesIO` to build by Hydra and/or try to prefer/bias in Cargo.lock for
|
|
|
|
# all vendored Carnix-generated nix.
|
|
|
|
#
|
|
|
|
# In the end game, rustc, the rust standard library (`core`, `std`, etc.),
|
|
|
|
# and cargo would themselves be built with `buildRustCreate` like
|
|
|
|
# everything else. Tools and `build.rs` and procedural macro dependencies
|
|
|
|
# would be taken from `buildRustPackages` (and `bootstrapRustPackages` for
|
|
|
|
# anything provided prebuilt or their build-time dependencies to break
|
|
|
|
# cycles / purify builds). In this way, nixpkgs would be in control of all
|
|
|
|
# bootstrapping.
|
|
|
|
packages = {
|
2019-11-08 12:04:53 +00:00
|
|
|
prebuilt = callPackage ./bootstrap.nix {
|
|
|
|
version = bootstrapVersion;
|
|
|
|
hashes = bootstrapHashes;
|
|
|
|
};
|
2018-11-21 01:47:45 +00:00
|
|
|
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)
|
2019-11-08 12:04:53 +00:00
|
|
|
(selectRustPackage buildPackages).packages.prebuilt);
|
2018-11-21 01:47:45 +00:00
|
|
|
bootRustPlatform = makeRustPlatform bootstrapRustPackages;
|
|
|
|
in {
|
|
|
|
# Packages suitable for build-time, e.g. `build.rs`-type stuff.
|
2019-11-08 12:04:53 +00:00
|
|
|
buildRustPackages = (selectRustPackage buildPackages).packages.stable;
|
2018-11-21 01:47:45 +00:00
|
|
|
# Analogous to stdenv
|
|
|
|
rustPlatform = makeRustPlatform self.buildRustPackages;
|
2019-04-23 14:25:12 +01:00
|
|
|
rustc = self.callPackage ./rustc.nix ({
|
2019-11-08 12:04:53 +00:00
|
|
|
version = rustcVersion;
|
|
|
|
sha256 = rustcSha256;
|
|
|
|
|
2018-11-21 01:47:45 +00:00
|
|
|
# Use boot package set to break cycle
|
|
|
|
rustPlatform = bootRustPlatform;
|
2019-04-23 14:25:12 +01:00
|
|
|
} // lib.optionalAttrs (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) {
|
|
|
|
stdenv = llvmPackages_5.stdenv;
|
|
|
|
pkgsBuildBuild = pkgsBuildBuild // { targetPackages.stdenv = llvmPackages_5.stdenv; };
|
|
|
|
pkgsBuildHost = pkgsBuildBuild // { targetPackages.stdenv = llvmPackages_5.stdenv; };
|
|
|
|
pkgsBuildTarget = pkgsBuildTarget // { targetPackages.stdenv = llvmPackages_5.stdenv; };
|
|
|
|
});
|
2019-08-16 11:26:51 +01:00
|
|
|
rustfmt = self.callPackage ./rustfmt.nix { inherit Security; };
|
2019-03-12 01:19:48 +00:00
|
|
|
cargo = self.callPackage ./cargo.nix {
|
2018-11-21 01:47:45 +00:00
|
|
|
# Use boot package set to break cycle
|
|
|
|
rustPlatform = bootRustPlatform;
|
|
|
|
inherit CoreFoundation Security;
|
2019-03-12 01:19:48 +00:00
|
|
|
};
|
2019-08-15 15:13:01 +01:00
|
|
|
clippy = self.callPackage ./clippy.nix { inherit Security; };
|
2019-08-16 18:03:38 +01:00
|
|
|
rls = self.callPackage ./rls { inherit CoreFoundation Security; };
|
2018-11-21 01:47:45 +00:00
|
|
|
});
|
2016-06-14 11:49:48 +01:00
|
|
|
};
|
|
|
|
}
|