xref: /aosp_15_r20/prebuilts/rust/bootstrap/mrustc-bootstrap/bootstrap.bash (revision b40554a23088fb75aa6945dfe8e65169c8484da3)
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