From 54f40ce30b59712a8c778675dae6224f8d27fc0f Mon Sep 17 00:00:00 2001 From: Folkert Date: Sun, 4 Aug 2024 13:59:11 +0200 Subject: [PATCH 1/2] migrate `thumb-none-qemu` to rmake --- .../tidy/src/allowed_run_make_makefiles.txt | 1 - tests/run-make/thumb-none-qemu/Makefile | 27 ---------- tests/run-make/thumb-none-qemu/rmake.rs | 51 +++++++++++++++++++ tests/run-make/thumb-none-qemu/script.sh | 20 -------- 4 files changed, 51 insertions(+), 48 deletions(-) delete mode 100644 tests/run-make/thumb-none-qemu/Makefile create mode 100644 tests/run-make/thumb-none-qemu/rmake.rs delete mode 100644 tests/run-make/thumb-none-qemu/script.sh diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt index 8747a6265c61e..dd56d073d007a 100644 --- a/src/tools/tidy/src/allowed_run_make_makefiles.txt +++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt @@ -51,6 +51,5 @@ run-make/staticlib-dylib-linkage/Makefile run-make/symbol-mangling-hashed/Makefile run-make/sysroot-crates-are-unstable/Makefile run-make/thumb-none-cortex-m/Makefile -run-make/thumb-none-qemu/Makefile run-make/translation/Makefile run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile diff --git a/tests/run-make/thumb-none-qemu/Makefile b/tests/run-make/thumb-none-qemu/Makefile deleted file mode 100644 index eea6ca3499289..0000000000000 --- a/tests/run-make/thumb-none-qemu/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -include ../tools.mk - -# only-thumb - -# How to run this -# $ ./x.py clean -# $ ./x.py test --target thumbv7m-none-eabi tests/run-make - -# For cargo setting -export RUSTC := $(RUSTC_ORIGINAL) -export LD_LIBRARY_PATH := $(HOST_RPATH_DIR) -# We need to be outside of 'src' dir in order to run cargo -export WORK_DIR := $(TMPDIR) -export HERE := $(shell pwd) - -## clean up unused env variables which might cause harm. -unexport RUSTC_LINKER -unexport RUSTC_BOOTSTRAP -unexport RUST_BUILD_STAGE -unexport RUST_TEST_THREADS -unexport RUST_TEST_TMPDIR -unexport AR -unexport CC -unexport CXX - -all: - bash script.sh diff --git a/tests/run-make/thumb-none-qemu/rmake.rs b/tests/run-make/thumb-none-qemu/rmake.rs new file mode 100644 index 0000000000000..e280f5fafa5c0 --- /dev/null +++ b/tests/run-make/thumb-none-qemu/rmake.rs @@ -0,0 +1,51 @@ +//! How to run this +//! $ ./x.py clean +//! $ ./x.py test --target thumbv6m-none-eabi,thumbv7m-none-eabi tests/run-make +//! +//! For supported targets, see `example/.cargo/config` + +//@ only-thumb + +use std::path::PathBuf; + +use run_make_support::{cmd, env_var}; + +const CRATE: &str = "example"; + +fn main() { + std::env::set_current_dir(CRATE).unwrap(); + + let target = env_var("TARGET"); + let bootstrap_cargo = env_var("BOOTSTRAP_CARGO"); + let path = env_var("PATH"); + let rustc = env_var("RUSTC"); + + let target_dir = PathBuf::from("target"); + let manifest_path = PathBuf::from("Cargo.toml"); + + let debug = { + let mut cmd = cmd(&bootstrap_cargo); + cmd.args(&["run", "--target", &target]) + .env("RUSTFLAGS", "-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x") + .env("CARGO_TARGET_DIR", &target_dir) + .env("PATH", &path) + .env("RUSTC", &rustc); + cmd.run() + }; + + let stdout = debug.stdout_utf8(); + assert!(stdout.contains("x = 42"), "stdout: {:?}", stdout); + + let release = { + let mut cmd = cmd(&bootstrap_cargo); + cmd.args(&["run", "--release", "--target", &target]) + .env("RUSTFLAGS", "-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x") + .env("CARGO_TARGET_DIR", &target_dir) + .env("PATH", &path) + .env("RUSTC", &rustc); + cmd.run() + }; + + let stdout = release.stdout_utf8(); + assert!(stdout.contains("x = 42"), "stdout: {:?}", stdout); +} diff --git a/tests/run-make/thumb-none-qemu/script.sh b/tests/run-make/thumb-none-qemu/script.sh deleted file mode 100644 index a8aa72af1845b..0000000000000 --- a/tests/run-make/thumb-none-qemu/script.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -set -exuo pipefail - -CRATE=example - -env | sort -mkdir -p $WORK_DIR -pushd $WORK_DIR - rm -rf $CRATE || echo OK - cp -a $HERE/example . - pushd $CRATE - # HACK(eddyb) sets `RUSTC_BOOTSTRAP=1` so Cargo can accept nightly features. - # These come from the top-level Rust workspace, that this crate is not a - # member of, but Cargo tries to load the workspace `Cargo.toml` anyway. - env RUSTC_BOOTSTRAP=1 RUSTFLAGS="-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x" \ - $BOOTSTRAP_CARGO run --target $TARGET | grep "x = 42" - env RUSTC_BOOTSTRAP=1 RUSTFLAGS="-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x" \ - $BOOTSTRAP_CARGO run --target $TARGET --release | grep "x = 42" - popd -popd From 6763f2a922bea6321099e76bd88c34f43b6a2c50 Mon Sep 17 00:00:00 2001 From: Folkert Date: Sun, 4 Aug 2024 22:24:20 +0200 Subject: [PATCH 2/2] changes after review --- .../example/.cargo/{config => config.toml} | 5 ++- tests/run-make/thumb-none-qemu/rmake.rs | 33 ++++++++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) rename tests/run-make/thumb-none-qemu/example/.cargo/{config => config.toml} (90%) diff --git a/tests/run-make/thumb-none-qemu/example/.cargo/config b/tests/run-make/thumb-none-qemu/example/.cargo/config.toml similarity index 90% rename from tests/run-make/thumb-none-qemu/example/.cargo/config rename to tests/run-make/thumb-none-qemu/example/.cargo/config.toml index 8b30310e7d432..7152e81b50221 100644 --- a/tests/run-make/thumb-none-qemu/example/.cargo/config +++ b/tests/run-make/thumb-none-qemu/example/.cargo/config.toml @@ -1,6 +1,5 @@ [target.thumbv6m-none-eabi] -# FIXME: Should be Cortex-M0, but Qemu used by CI is too old -runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel" +runner = "qemu-system-arm -cpu cortex-m0 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel" [target.thumbv7m-none-eabi] runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel" @@ -12,7 +11,7 @@ runner = "qemu-system-arm -cpu cortex-m4 -machine lm3s6965evb -nographic -semiho runner = "qemu-system-arm -cpu cortex-m4 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel" [target.thumbv8m.base-none-eabi] -# FIXME: Should be the Cortex-M23, bt Qemu does not currently support it +# FIXME: Should be the Cortex-M23, but Qemu does not currently support it runner = "qemu-system-arm -cpu cortex-m33 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel" [target.thumbv8m.main-none-eabi] diff --git a/tests/run-make/thumb-none-qemu/rmake.rs b/tests/run-make/thumb-none-qemu/rmake.rs index e280f5fafa5c0..d0f42bc880897 100644 --- a/tests/run-make/thumb-none-qemu/rmake.rs +++ b/tests/run-make/thumb-none-qemu/rmake.rs @@ -1,31 +1,44 @@ +//! This test runs a basic application for thumb targets, using the cortex-m crate. +//! +//! These targets are very bare-metal: the first instruction the core runs on +//! power-on is already user code. The cortex-m-rt has to initialize the stack, .data, +//! .bss, enable the FPU if present, etc. +//! +//! This test builds and runs the applications for various thumb targets using qemu. +//! //! How to run this //! $ ./x.py clean //! $ ./x.py test --target thumbv6m-none-eabi,thumbv7m-none-eabi tests/run-make //! -//! For supported targets, see `example/.cargo/config` +//! For supported targets, see `example/.cargo/config.toml` +//! +//! FIXME: https://github.com/rust-lang/rust/issues/128733 this test uses external +//! dependencies, and needs an active internet connection +//! +//! FIXME: https://github.com/rust-lang/rust/issues/128734 extract bootstrap cargo +//! to a proper command //@ only-thumb use std::path::PathBuf; -use run_make_support::{cmd, env_var}; +use run_make_support::{cmd, env_var, path_helpers, target}; const CRATE: &str = "example"; fn main() { std::env::set_current_dir(CRATE).unwrap(); - let target = env_var("TARGET"); let bootstrap_cargo = env_var("BOOTSTRAP_CARGO"); let path = env_var("PATH"); let rustc = env_var("RUSTC"); - let target_dir = PathBuf::from("target"); - let manifest_path = PathBuf::from("Cargo.toml"); + let target_dir = path_helpers::path("target"); + let manifest_path = path_helpers::path("Cargo.toml"); let debug = { let mut cmd = cmd(&bootstrap_cargo); - cmd.args(&["run", "--target", &target]) + cmd.args(&["run", "--target", &target()]) .env("RUSTFLAGS", "-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x") .env("CARGO_TARGET_DIR", &target_dir) .env("PATH", &path) @@ -33,12 +46,11 @@ fn main() { cmd.run() }; - let stdout = debug.stdout_utf8(); - assert!(stdout.contains("x = 42"), "stdout: {:?}", stdout); + debug.assert_stdout_contains("x = 42"); let release = { let mut cmd = cmd(&bootstrap_cargo); - cmd.args(&["run", "--release", "--target", &target]) + cmd.args(&["run", "--release", "--target", &target()]) .env("RUSTFLAGS", "-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x") .env("CARGO_TARGET_DIR", &target_dir) .env("PATH", &path) @@ -46,6 +58,5 @@ fn main() { cmd.run() }; - let stdout = release.stdout_utf8(); - assert!(stdout.contains("x = 42"), "stdout: {:?}", stdout); + release.assert_stdout_contains("x = 42"); }