at 16.09-beta 2.7 kB view raw
1{ stdenv, fetchurl, makeWrapper, cacert, zlib }: 2 3let 4 inherit (stdenv.lib) optionalString; 5 6 platform = 7 if stdenv.system == "i686-linux" 8 then "i686-unknown-linux-gnu" 9 else if stdenv.system == "x86_64-linux" 10 then "x86_64-unknown-linux-gnu" 11 else if stdenv.system == "i686-darwin" 12 then "i686-apple-darwin" 13 else if stdenv.system == "x86_64-darwin" 14 then "x86_64-apple-darwin" 15 else abort "missing boostrap url for platform ${stdenv.system}"; 16 17 # fetch hashes by running `print-hashes.sh 1.9.0` 18 bootstrapHash = 19 if stdenv.system == "i686-linux" 20 then "be93dd2b80a97f2877679950d56990628c6547b953294f16bf6d69c18a39edc0" 21 else if stdenv.system == "x86_64-linux" 22 then "f189303d52b37c8bb694b9d9739ae73ffa926cbdeffde1d5d6a5c6e811940293" 23 else if stdenv.system == "i686-darwin" 24 then "40d4782a58dd5bef22dbbaa7a363f3b42f844628db07205f6435ac934f350061" 25 else if stdenv.system == "x86_64-darwin" 26 then "4bb71249f4afd7cee07f63d681f9fcb1b525ee3dfd49722adab7a40024e45af7" 27 else throw "missing boostrap hash for platform ${stdenv.system}"; 28 29 needsPatchelf = stdenv.isLinux; 30 31 src = fetchurl { 32 url = "https://static.rust-lang.org/dist/rust-${version}-${platform}.tar.gz"; 33 sha256 = bootstrapHash; 34 }; 35 36 version = "1.10.0"; 37in 38 39rec { 40 rustc = stdenv.mkDerivation rec { 41 name = "rustc-bootstrap-${version}"; 42 43 inherit version; 44 inherit src; 45 46 buildInputs = [ makeWrapper ]; 47 phases = ["unpackPhase" "installPhase"]; 48 49 installPhase = '' 50 ./install.sh --prefix=$out \ 51 --components=rustc,rust-std-${platform},rust-docs 52 53 ${optionalString needsPatchelf '' 54 patchelf \ 55 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 56 "$out/bin/rustc" 57 ''} 58 59 # Do NOT, I repeat, DO NOT use `wrapProgram` on $out/bin/rustc 60 # (or similar) here. It causes strange effects where rustc loads 61 # the wrong libraries in a bootstrap-build causing failures that 62 # are very hard to track dow. For details, see 63 # https://github.com/rust-lang/rust/issues/34722#issuecomment-232164943 64 ''; 65 }; 66 67 cargo = stdenv.mkDerivation rec { 68 name = "cargo-bootstrap-${version}"; 69 70 inherit version; 71 inherit src; 72 73 buildInputs = [ makeWrapper zlib rustc ]; 74 phases = ["unpackPhase" "installPhase"]; 75 76 installPhase = '' 77 ./install.sh --prefix=$out \ 78 --components=cargo 79 80 ${optionalString needsPatchelf '' 81 patchelf \ 82 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 83 "$out/bin/cargo" 84 ''} 85 86 wrapProgram "$out/bin/cargo" \ 87 --suffix PATH : "${rustc}/bin" 88 ''; 89 }; 90}