From 9f602bf4dae1a86dde890552e3c0c7fa2ca9196f Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 17 Apr 2020 16:54:46 +0200 Subject: [PATCH] Use qemu to run tests for AArch64 when using a different host arch --- config.sh | 18 +++++++++++++-- test.sh | 68 ++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 58 insertions(+), 28 deletions(-) diff --git a/config.sh b/config.sh index e2534da89e1..0f75e331a7e 100644 --- a/config.sh +++ b/config.sh @@ -10,9 +10,23 @@ else exit 1 fi -TARGET_TRIPLE=$(rustc -vV | grep host | cut -d: -f2 | tr -d " ") +HOST_TRIPLE=$(rustc -vV | grep host | cut -d: -f2 | tr -d " ") +TARGET_TRIPLE=$HOST_TRIPLE +#TARGET_TRIPLE="aarch64-unknown-linux-gnu" -export RUSTFLAGS='-Cpanic=abort -Cdebuginfo=2 -Zpanic-abort-tests -Zcodegen-backend='$(pwd)'/target/'$CHANNEL'/librustc_codegen_cranelift.'$dylib_ext' --sysroot '$(pwd)'/build_sysroot/sysroot' +linker='' +RUN_WRAPPER='' +if [[ "$HOST_TRIPLE" != "$TARGET_TRIPLE" ]]; then + if [[ "$TARGET_TRIPLE" == "aarch64-unknown-linux-gnu" ]]; then + # We are cross-compiling for aarch64. Use the correct linker and run tests in qemu. + linker='-Clinker=aarch64-linux-gnu-gcc' + RUN_WRAPPER='qemu-aarch64 -L /usr/aarch64-linux-gnu' + else + echo "Unknown non-native platform" + fi +fi + +export RUSTFLAGS=$linker' -Cpanic=abort -Cdebuginfo=2 -Zpanic-abort-tests -Zcodegen-backend='$(pwd)'/target/'$CHANNEL'/librustc_codegen_cranelift.'$dylib_ext' --sysroot '$(pwd)'/build_sysroot/sysroot' # FIXME remove once the atomic shim is gone if [[ `uname` == 'Darwin' ]]; then diff --git a/test.sh b/test.sh index bc4c807cbf2..190fd7b291a 100755 --- a/test.sh +++ b/test.sh @@ -16,69 +16,85 @@ rm -r target/out || true mkdir -p target/out/clif echo "[BUILD] mini_core" -$RUSTC example/mini_core.rs --crate-name mini_core --crate-type lib,dylib +$RUSTC example/mini_core.rs --crate-name mini_core --crate-type lib,dylib --target $TARGET_TRIPLE echo "[BUILD] example" -$RUSTC example/example.rs --crate-type lib +$RUSTC example/example.rs --crate-type lib --target $TARGET_TRIPLE -echo "[JIT] mini_core_hello_world" -CG_CLIF_JIT=1 CG_CLIF_JIT_ARGS="abc bcd" $RUSTC --crate-type bin -Cprefer-dynamic example/mini_core_hello_world.rs --cfg jit +if [[ "$HOST_TRIPLE" = "$TARGET_TRIPLE" ]]; then + echo "[JIT] mini_core_hello_world" + CG_CLIF_JIT=1 CG_CLIF_JIT_ARGS="abc bcd" $RUSTC --crate-type bin -Cprefer-dynamic example/mini_core_hello_world.rs --cfg jit --target $HOST_TRIPLE +else + echo "[JIT] mini_core_hello_world (skipped)" +fi echo "[AOT] mini_core_hello_world" -$RUSTC example/mini_core_hello_world.rs --crate-name mini_core_hello_world --crate-type bin -g -./target/out/mini_core_hello_world abc bcd +$RUSTC example/mini_core_hello_world.rs --crate-name mini_core_hello_world --crate-type bin -g --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/mini_core_hello_world abc bcd # (echo "break set -n main"; echo "run"; sleep 1; echo "si -c 10"; sleep 1; echo "frame variable") | lldb -- ./target/out/mini_core_hello_world abc bcd echo "[AOT] arbitrary_self_types_pointers_and_wrappers" -$RUSTC example/arbitrary_self_types_pointers_and_wrappers.rs --crate-name arbitrary_self_types_pointers_and_wrappers --crate-type bin -./target/out/arbitrary_self_types_pointers_and_wrappers +$RUSTC example/arbitrary_self_types_pointers_and_wrappers.rs --crate-name arbitrary_self_types_pointers_and_wrappers --crate-type bin --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/arbitrary_self_types_pointers_and_wrappers echo "[BUILD] sysroot" time ./build_sysroot/build_sysroot.sh echo "[AOT] alloc_example" -$RUSTC example/alloc_example.rs --crate-type bin -./target/out/alloc_example +$RUSTC example/alloc_example.rs --crate-type bin --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/alloc_example -echo "[JIT] std_example" -CG_CLIF_JIT=1 $RUSTC --crate-type bin -Cprefer-dynamic example/std_example.rs +if [[ "$HOST_TRIPLE" = "$TARGET_TRIPLE" ]]; then + echo "[JIT] std_example" + CG_CLIF_JIT=1 $RUSTC --crate-type bin -Cprefer-dynamic example/std_example.rs --target $HOST_TRIPLE +else + echo "[JIT] std_example (skipped)" +fi echo "[AOT] dst_field_align" # FIXME Re-add -Zmir-opt-level=2 once rust-lang/rust#67529 is fixed. -$RUSTC example/dst-field-align.rs --crate-name dst_field_align --crate-type bin -./target/out/dst_field_align +$RUSTC example/dst-field-align.rs --crate-name dst_field_align --crate-type bin --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/dst_field_align || (echo $?; false) echo "[AOT] std_example" -$RUSTC example/std_example.rs --crate-type bin -./target/out/std_example +$RUSTC example/std_example.rs --crate-type bin --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/std_example --target $TARGET_TRIPLE echo "[AOT] subslice-patterns-const-eval" -$RUSTC example/subslice-patterns-const-eval.rs --crate-type bin -Cpanic=abort -./target/out/subslice-patterns-const-eval +$RUSTC example/subslice-patterns-const-eval.rs --crate-type bin -Cpanic=abort --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/subslice-patterns-const-eval echo "[AOT] track-caller-attribute" -$RUSTC example/track-caller-attribute.rs --crate-type bin -Cpanic=abort -./target/out/track-caller-attribute +$RUSTC example/track-caller-attribute.rs --crate-type bin -Cpanic=abort --target $TARGET_TRIPLE +$RUN_WRAPPER ./target/out/track-caller-attribute echo "[BUILD] mod_bench" -$RUSTC example/mod_bench.rs --crate-type bin +$RUSTC example/mod_bench.rs --crate-type bin --target $TARGET_TRIPLE # FIXME linker gives multiple definitions error on Linux #echo "[BUILD] sysroot in release mode" #./build_sysroot/build_sysroot.sh --release pushd simple-raytracer -echo "[BENCH COMPILE] ebobby/simple-raytracer" -hyperfine --runs ${RUN_RUNS:-10} --warmup 1 --prepare "rm -r target/*/debug || true" \ +if [[ "$HOST_TRIPLE" = "$TARGET_TRIPLE" ]]; then + echo "[BENCH COMPILE] ebobby/simple-raytracer" + hyperfine --runs ${RUN_RUNS:-10} --warmup 1 --prepare "rm -r target/*/debug || true" \ "RUSTFLAGS='' cargo build --target $TARGET_TRIPLE" \ "../cargo.sh build" -echo "[BENCH RUN] ebobby/simple-raytracer" -cp ./target/*/debug/main ./raytracer_cg_clif -hyperfine --runs ${RUN_RUNS:-10} ./raytracer_cg_llvm ./raytracer_cg_clif + echo "[BENCH RUN] ebobby/simple-raytracer" + cp ./target/*/debug/main ./raytracer_cg_clif + hyperfine --runs ${RUN_RUNS:-10} ./raytracer_cg_llvm ./raytracer_cg_clif +else + echo "[BENCH COMPILE] ebobby/simple-raytracer (skipped)" + echo "[COMPILE] ebobby/simple-raytracer" + ../cargo.sh build + echo "[BENCH RUN] ebobby/simple-raytracer (skipped)" +fi popd pushd build_sysroot/sysroot_src/src/libcore/tests +echo "[TEST] libcore" rm -r ./target || true ../../../../../cargo.sh test popd