]>
Commit | Line | Data |
---|---|---|
c295e0f8 XL |
1 | #!/bin/bash |
2 | ||
3 | # TODO(antoyo): rewrite to cargo-make (or just) or something like that to only rebuild the sysroot when needed? | |
4 | ||
5 | set -e | |
6 | ||
7 | if [ -f ./gcc_path ]; then | |
8 | export GCC_PATH=$(cat gcc_path) | |
9 | else | |
10 | echo 'Please put the path to your custom build of libgccjit in the file `gcc_path`, see Readme.md for details' | |
11 | exit 1 | |
12 | fi | |
13 | ||
14 | export LD_LIBRARY_PATH="$GCC_PATH" | |
15 | export LIBRARY_PATH="$GCC_PATH" | |
16 | ||
17 | if [[ "$1" == "--release" ]]; then | |
18 | export CHANNEL='release' | |
19 | CARGO_INCREMENTAL=1 cargo rustc --release | |
20 | shift | |
21 | else | |
22 | echo $LD_LIBRARY_PATH | |
23 | export CHANNEL='debug' | |
24 | cargo rustc | |
25 | fi | |
26 | ||
27 | source config.sh | |
28 | ||
29 | function clean() { | |
30 | rm -r target/out || true | |
31 | mkdir -p target/out/gccjit | |
32 | } | |
33 | ||
34 | function mini_tests() { | |
35 | echo "[BUILD] mini_core" | |
36 | $RUSTC example/mini_core.rs --crate-name mini_core --crate-type lib,dylib --target $TARGET_TRIPLE | |
37 | ||
38 | echo "[BUILD] example" | |
39 | $RUSTC example/example.rs --crate-type lib --target $TARGET_TRIPLE | |
40 | ||
41 | echo "[AOT] mini_core_hello_world" | |
42 | $RUSTC example/mini_core_hello_world.rs --crate-name mini_core_hello_world --crate-type bin -g --target $TARGET_TRIPLE | |
43 | $RUN_WRAPPER ./target/out/mini_core_hello_world abc bcd | |
44 | } | |
45 | ||
46 | function build_sysroot() { | |
47 | echo "[BUILD] sysroot" | |
48 | time ./build_sysroot/build_sysroot.sh | |
49 | } | |
50 | ||
51 | function std_tests() { | |
52 | echo "[AOT] arbitrary_self_types_pointers_and_wrappers" | |
53 | $RUSTC example/arbitrary_self_types_pointers_and_wrappers.rs --crate-name arbitrary_self_types_pointers_and_wrappers --crate-type bin --target $TARGET_TRIPLE | |
54 | $RUN_WRAPPER ./target/out/arbitrary_self_types_pointers_and_wrappers | |
55 | ||
56 | echo "[AOT] alloc_system" | |
57 | $RUSTC example/alloc_system.rs --crate-type lib --target "$TARGET_TRIPLE" | |
58 | ||
59 | echo "[AOT] alloc_example" | |
60 | $RUSTC example/alloc_example.rs --crate-type bin --target $TARGET_TRIPLE | |
61 | $RUN_WRAPPER ./target/out/alloc_example | |
62 | ||
63 | echo "[AOT] dst_field_align" | |
64 | # FIXME(antoyo): Re-add -Zmir-opt-level=2 once rust-lang/rust#67529 is fixed. | |
65 | $RUSTC example/dst-field-align.rs --crate-name dst_field_align --crate-type bin --target $TARGET_TRIPLE | |
66 | $RUN_WRAPPER ./target/out/dst_field_align || (echo $?; false) | |
67 | ||
68 | echo "[AOT] std_example" | |
69 | $RUSTC example/std_example.rs --crate-type bin --target $TARGET_TRIPLE | |
70 | $RUN_WRAPPER ./target/out/std_example --target $TARGET_TRIPLE | |
71 | ||
72 | echo "[AOT] subslice-patterns-const-eval" | |
73 | $RUSTC example/subslice-patterns-const-eval.rs --crate-type bin -Cpanic=abort --target $TARGET_TRIPLE | |
74 | $RUN_WRAPPER ./target/out/subslice-patterns-const-eval | |
75 | ||
76 | echo "[AOT] track-caller-attribute" | |
77 | $RUSTC example/track-caller-attribute.rs --crate-type bin -Cpanic=abort --target $TARGET_TRIPLE | |
78 | $RUN_WRAPPER ./target/out/track-caller-attribute | |
79 | ||
80 | echo "[BUILD] mod_bench" | |
81 | $RUSTC example/mod_bench.rs --crate-type bin --target $TARGET_TRIPLE | |
82 | } | |
83 | ||
84 | # FIXME(antoyo): linker gives multiple definitions error on Linux | |
85 | #echo "[BUILD] sysroot in release mode" | |
86 | #./build_sysroot/build_sysroot.sh --release | |
87 | ||
88 | # TODO(antoyo): uncomment when it works. | |
89 | #pushd simple-raytracer | |
90 | #if [[ "$HOST_TRIPLE" = "$TARGET_TRIPLE" ]]; then | |
91 | #echo "[BENCH COMPILE] ebobby/simple-raytracer" | |
92 | #hyperfine --runs ${RUN_RUNS:-10} --warmup 1 --prepare "rm -r target/*/debug || true" \ | |
93 | #"RUSTFLAGS='' cargo build --target $TARGET_TRIPLE" \ | |
94 | #"../cargo.sh build" | |
95 | ||
96 | #echo "[BENCH RUN] ebobby/simple-raytracer" | |
97 | #cp ./target/*/debug/main ./raytracer_cg_gccjit | |
98 | #hyperfine --runs ${RUN_RUNS:-10} ./raytracer_cg_llvm ./raytracer_cg_gccjit | |
99 | #else | |
100 | #echo "[BENCH COMPILE] ebobby/simple-raytracer (skipped)" | |
101 | #echo "[COMPILE] ebobby/simple-raytracer" | |
102 | #../cargo.sh build | |
103 | #echo "[BENCH RUN] ebobby/simple-raytracer (skipped)" | |
104 | #fi | |
105 | #popd | |
106 | ||
107 | function test_libcore() { | |
108 | pushd build_sysroot/sysroot_src/library/core/tests | |
109 | echo "[TEST] libcore" | |
110 | rm -r ./target || true | |
111 | ../../../../../cargo.sh test | |
112 | popd | |
113 | } | |
114 | ||
115 | # TODO(antoyo): uncomment when it works. | |
116 | #pushd regex | |
117 | #echo "[TEST] rust-lang/regex example shootout-regex-dna" | |
118 | #../cargo.sh clean | |
119 | ## Make sure `[codegen mono items] start` doesn't poison the diff | |
120 | #../cargo.sh build --example shootout-regex-dna | |
121 | #cat examples/regexdna-input.txt | ../cargo.sh run --example shootout-regex-dna | grep -v "Spawned thread" > res.txt | |
122 | #diff -u res.txt examples/regexdna-output.txt | |
123 | ||
124 | #echo "[TEST] rust-lang/regex tests" | |
125 | #../cargo.sh test --tests -- --exclude-should-panic --test-threads 1 -Zunstable-options | |
126 | #popd | |
127 | ||
128 | #echo | |
129 | #echo "[BENCH COMPILE] mod_bench" | |
130 | ||
131 | #COMPILE_MOD_BENCH_INLINE="$RUSTC example/mod_bench.rs --crate-type bin -Zmir-opt-level=3 -O --crate-name mod_bench_inline" | |
132 | #COMPILE_MOD_BENCH_LLVM_0="rustc example/mod_bench.rs --crate-type bin -Copt-level=0 -o target/out/mod_bench_llvm_0 -Cpanic=abort" | |
133 | #COMPILE_MOD_BENCH_LLVM_1="rustc example/mod_bench.rs --crate-type bin -Copt-level=1 -o target/out/mod_bench_llvm_1 -Cpanic=abort" | |
134 | #COMPILE_MOD_BENCH_LLVM_2="rustc example/mod_bench.rs --crate-type bin -Copt-level=2 -o target/out/mod_bench_llvm_2 -Cpanic=abort" | |
135 | #COMPILE_MOD_BENCH_LLVM_3="rustc example/mod_bench.rs --crate-type bin -Copt-level=3 -o target/out/mod_bench_llvm_3 -Cpanic=abort" | |
136 | ||
137 | ## Use 100 runs, because a single compilations doesn't take more than ~150ms, so it isn't very slow | |
138 | #hyperfine --runs ${COMPILE_RUNS:-100} "$COMPILE_MOD_BENCH_INLINE" "$COMPILE_MOD_BENCH_LLVM_0" "$COMPILE_MOD_BENCH_LLVM_1" "$COMPILE_MOD_BENCH_LLVM_2" "$COMPILE_MOD_BENCH_LLVM_3" | |
139 | ||
140 | #echo | |
141 | #echo "[BENCH RUN] mod_bench" | |
142 | #hyperfine --runs ${RUN_RUNS:-10} ./target/out/mod_bench{,_inline} ./target/out/mod_bench_llvm_* | |
143 | ||
144 | function test_rustc() { | |
145 | echo | |
146 | echo "[TEST] rust-lang/rust" | |
147 | ||
148 | rust_toolchain=$(cat rust-toolchain) | |
149 | ||
150 | git clone https://github.com/rust-lang/rust.git || true | |
151 | cd rust | |
152 | git fetch | |
153 | git checkout $(rustc -V | cut -d' ' -f3 | tr -d '(') | |
154 | export RUSTFLAGS= | |
155 | ||
156 | rm config.toml || true | |
157 | ||
158 | cat > config.toml <<EOF | |
159 | [rust] | |
160 | codegen-backends = [] | |
161 | deny-warnings = false | |
162 | ||
163 | [build] | |
164 | cargo = "$(which cargo)" | |
165 | local-rebuild = true | |
166 | rustc = "$HOME/.rustup/toolchains/$rust_toolchain-$TARGET_TRIPLE/bin/rustc" | |
167 | EOF | |
168 | ||
169 | rustc -V | cut -d' ' -f3 | tr -d '(' | |
170 | git checkout $(rustc -V | cut -d' ' -f3 | tr -d '(') src/test | |
171 | ||
172 | for test in $(rg -i --files-with-matches "//(\[\w+\])?~|// error-pattern:|// build-fail|// run-fail|-Cllvm-args" src/test/ui); do | |
173 | rm $test | |
174 | done | |
175 | ||
176 | git checkout -- src/test/ui/issues/auxiliary/issue-3136-a.rs # contains //~ERROR, but shouldn't be removed | |
177 | ||
178 | rm -r src/test/ui/{abi*,extern/,llvm-asm/,panic-runtime/,panics/,unsized-locals/,proc-macro/,threads-sendsync/,thinlto/,simd*,borrowck/,test*,*lto*.rs} || true | |
179 | for test in $(rg --files-with-matches "catch_unwind|should_panic|thread|lto" src/test/ui); do | |
180 | rm $test | |
181 | done | |
182 | git checkout src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs | |
183 | git checkout src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs | |
184 | rm src/test/ui/llvm-asm/llvm-asm-in-out-operand.rs || true # TODO(antoyo): Enable back this test if I ever implement the llvm_asm! macro. | |
185 | ||
186 | RUSTC_ARGS="-Zpanic-abort-tests -Zsymbol-mangling-version=v0 -Zcodegen-backend="$(pwd)"/../target/"$CHANNEL"/librustc_codegen_gcc."$dylib_ext" --sysroot "$(pwd)"/../build_sysroot/sysroot -Cpanic=abort" | |
187 | ||
188 | echo "[TEST] rustc test suite" | |
189 | COMPILETEST_FORCE_STAGE0=1 ./x.py test --run always --stage 0 src/test/ui/ --rustc-args "$RUSTC_ARGS" | |
190 | } | |
191 | ||
192 | function clean_ui_tests() { | |
193 | find rust/build/x86_64-unknown-linux-gnu/test/ui/ -name stamp -exec rm -rf {} \; | |
194 | } | |
195 | ||
196 | case $1 in | |
197 | "--test-rustc") | |
198 | test_rustc | |
199 | ;; | |
200 | ||
201 | "--test-libcore") | |
202 | test_libcore | |
203 | ;; | |
204 | ||
205 | "--clean-ui-tests") | |
206 | clean_ui_tests | |
207 | ;; | |
208 | ||
209 | *) | |
210 | clean | |
211 | mini_tests | |
212 | build_sysroot | |
213 | std_tests | |
214 | test_libcore | |
215 | test_rustc | |
216 | ;; | |
217 | esac |