set -e # Grab libraries we'll need later at the beginning sudo apt-get install libssl1.0-dev libcurl4-openssl-dev # Grab clang prebuilt git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86 clang-prebuilt --filter=blob:none -n git -C clang-prebuilt checkout 8a6de3cbfcd642b21ebaf9663596b3f7e942d1c5 CLANGDIR=${PWD}/clang-prebuilt/clang-r353983c/bin export CC=${CLANGDIR}/clang export CXX=${CLANGDIR}/clang++ export AR=${CLANGDIR}/llvm-ar # Old rustc incorrectly assumed ar lived next to cc cp ${AR} ${CLANGDIR}/ar # Fetch rustc-1.19 and rustc-1.20 wget https://static.rust-lang.org/dist/rustc-1.19.0-src.tar.gz wget https://static.rust-lang.org/dist/rustc-1.20.0-src.tar.gz sha256sum -c rustc-shasums export RUSTC_1_19=${PWD}/rustc-1.19.0-src.tar.gz export RUSTC_1_20=${PWD}/rustc-1.20.0-src.tar.gz # Build rustc-1.19 with mrustc git clone https://github.com/thepowersgang/mrustc -b v0.8.0 git -C mrustc am ${PWD}/mrustc-patches/* cd mrustc # Build mrustc make bin/mrustc tar xf ${RUSTC_1_19} # Build rustc/cargo make output/rustc make output/cargo # Build prefix and stdlibs make -C run_rustc # Build rustc-1.20 with our mrustc-rustc 1.19 PREFIX=${PWD}/run_rustc/prefix/ MRUSTC_RUSTC=${PWD}/mrustc-rustc-rustc/ mkdir -p ${MRUSTC_RUSTC} tar xf ${RUSTC_1_20} -C ${MRUSTC_RUSTC} MRUSTC_RUSTC_SRC=${MRUSTC_RUSTC}/rustc-1.20.0-src cat - > ${MRUSTC_RUSTC_SRC}/config.toml <&1 > build.log popd mv build ${MRUSTC_RUSTC_SRC} # Build rustc-1.20 with official 1.19 for comparison OFFICIAL_RUSTC=${PWD}/official-rustc-rustc/ mkdir -p ${OFFICIAL_RUSTC} tar xf ${RUSTC_1_20} -C ${OFFICIAL_RUSTC} OFFICIAL_RUSTC_SRC=${OFFICIAL_RUSTC}/rustc-1.20.0-src cat - > ${OFFICIAL_RUSTC_SRC}/config.toml <&1 > build.log popd mv build ${OFFICIAL_RUSTC_SRC} # Summarize differences diff -r ${OFFICIAL_RUSTC_SRC}/build/x86_64-unknown-linux-gnu/stage3 ${MRUSTC_RUSTC_SRC}/build/x86_64-unknown-linux-gnu/stage3