1set -e 2 3# Grab libraries we'll need later at the beginning 4sudo apt-get install libssl1.0-dev libcurl4-openssl-dev 5 6# Grab clang prebuilt 7git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86 clang-prebuilt --filter=blob:none -n 8git -C clang-prebuilt checkout 8a6de3cbfcd642b21ebaf9663596b3f7e942d1c5 9CLANGDIR=${PWD}/clang-prebuilt/clang-r353983c/bin 10export CC=${CLANGDIR}/clang 11export CXX=${CLANGDIR}/clang++ 12export AR=${CLANGDIR}/llvm-ar 13# Old rustc incorrectly assumed ar lived next to cc 14cp ${AR} ${CLANGDIR}/ar 15 16# Fetch rustc-1.19 and rustc-1.20 17wget https://static.rust-lang.org/dist/rustc-1.19.0-src.tar.gz 18wget https://static.rust-lang.org/dist/rustc-1.20.0-src.tar.gz 19sha256sum -c rustc-shasums 20export RUSTC_1_19=${PWD}/rustc-1.19.0-src.tar.gz 21export RUSTC_1_20=${PWD}/rustc-1.20.0-src.tar.gz 22 23# Build rustc-1.19 with mrustc 24git clone https://github.com/thepowersgang/mrustc -b v0.8.0 25git -C mrustc am ${PWD}/mrustc-patches/* 26cd mrustc 27 28# Build mrustc 29make bin/mrustc 30 31tar xf ${RUSTC_1_19} 32# Build rustc/cargo 33make output/rustc 34make output/cargo 35 36# Build prefix and stdlibs 37make -C run_rustc 38 39# Build rustc-1.20 with our mrustc-rustc 1.19 40PREFIX=${PWD}/run_rustc/prefix/ 41MRUSTC_RUSTC=${PWD}/mrustc-rustc-rustc/ 42mkdir -p ${MRUSTC_RUSTC} 43tar xf ${RUSTC_1_20} -C ${MRUSTC_RUSTC} 44MRUSTC_RUSTC_SRC=${MRUSTC_RUSTC}/rustc-1.20.0-src 45cat - > ${MRUSTC_RUSTC_SRC}/config.toml <<EOF 46[build] 47cargo = "${PREFIX}bin/cargo" 48rustc = "${PREFIX}bin/rustc" 49full-bootstrap = true 50vendor = true 51extended = true 52[target.x86_64-unknown-linux-gnu] 53cc = "${CC}" 54cxx = "${CXX}" 55ar = "${AR}" 56EOF 57mv ${MRUSTC_RUSTC_SRC} build 58pushd build 59./x.py build --stage 3 2>&1 > build.log 60popd 61mv build ${MRUSTC_RUSTC_SRC} 62 63# Build rustc-1.20 with official 1.19 for comparison 64OFFICIAL_RUSTC=${PWD}/official-rustc-rustc/ 65mkdir -p ${OFFICIAL_RUSTC} 66tar xf ${RUSTC_1_20} -C ${OFFICIAL_RUSTC} 67OFFICIAL_RUSTC_SRC=${OFFICIAL_RUSTC}/rustc-1.20.0-src 68cat - > ${OFFICIAL_RUSTC_SRC}/config.toml <<EOF 69[build] 70full-bootstrap = true 71vendor = true 72extended = true 73[target.x86_64-unknown-linux-gnu] 74cc = "${CC}" 75cxx = "${CXX}" 76ar = "${AR}" 77EOF 78mv ${OFFICIAL_RUSTC_SRC} build 79pushd build 80./x.py build --stage 3 2>&1 > build.log 81popd 82mv build ${OFFICIAL_RUSTC_SRC} 83 84# Summarize differences 85diff -r ${OFFICIAL_RUSTC_SRC}/build/x86_64-unknown-linux-gnu/stage3 ${MRUSTC_RUSTC_SRC}/build/x86_64-unknown-linux-gnu/stage3 86