| 
 | 1 | +//! This test runs a basic application for thumb targets, using the cortex-m crate.  | 
 | 2 | +//!  | 
 | 3 | +//! These targets are very bare-metal: the first instruction the core runs on  | 
 | 4 | +//! power-on is already user code. The cortex-m-rt has to initialize the stack, .data,  | 
 | 5 | +//! .bss, enable the FPU if present, etc.  | 
 | 6 | +//!  | 
 | 7 | +//! This test builds and runs the applications for various thumb targets using qemu.  | 
 | 8 | +//!  | 
 | 9 | +//! How to run this  | 
 | 10 | +//! $ ./x.py clean  | 
 | 11 | +//! $ ./x.py test --target thumbv6m-none-eabi,thumbv7m-none-eabi tests/run-make  | 
 | 12 | +//!  | 
 | 13 | +//! For supported targets, see `example/.cargo/config.toml`  | 
 | 14 | +//!  | 
 | 15 | +//! FIXME: https://github.com/rust-lang/rust/issues/128733 this test uses external  | 
 | 16 | +//! dependencies, and needs an active internet connection  | 
 | 17 | +//!  | 
 | 18 | +//! FIXME: https://github.com/rust-lang/rust/issues/128734 extract bootstrap cargo  | 
 | 19 | +//! to a proper command  | 
 | 20 | +
  | 
 | 21 | +//@ only-thumb  | 
 | 22 | + | 
 | 23 | +use std::path::PathBuf;  | 
 | 24 | + | 
 | 25 | +use run_make_support::{cmd, env_var, path_helpers, target};  | 
 | 26 | + | 
 | 27 | +const CRATE: &str = "example";  | 
 | 28 | + | 
 | 29 | +fn main() {  | 
 | 30 | +    std::env::set_current_dir(CRATE).unwrap();  | 
 | 31 | + | 
 | 32 | +    let bootstrap_cargo = env_var("BOOTSTRAP_CARGO");  | 
 | 33 | +    let path = env_var("PATH");  | 
 | 34 | +    let rustc = env_var("RUSTC");  | 
 | 35 | + | 
 | 36 | +    let target_dir = path_helpers::path("target");  | 
 | 37 | +    let manifest_path = path_helpers::path("Cargo.toml");  | 
 | 38 | + | 
 | 39 | +    let debug = {  | 
 | 40 | +        let mut cmd = cmd(&bootstrap_cargo);  | 
 | 41 | +        cmd.args(&["run", "--target", &target()])  | 
 | 42 | +            .env("RUSTFLAGS", "-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x")  | 
 | 43 | +            .env("CARGO_TARGET_DIR", &target_dir)  | 
 | 44 | +            .env("PATH", &path)  | 
 | 45 | +            .env("RUSTC", &rustc);  | 
 | 46 | +        cmd.run()  | 
 | 47 | +    };  | 
 | 48 | + | 
 | 49 | +    debug.assert_stdout_contains("x = 42");  | 
 | 50 | + | 
 | 51 | +    let release = {  | 
 | 52 | +        let mut cmd = cmd(&bootstrap_cargo);  | 
 | 53 | +        cmd.args(&["run", "--release", "--target", &target()])  | 
 | 54 | +            .env("RUSTFLAGS", "-C linker=arm-none-eabi-ld -C link-arg=-Tlink.x")  | 
 | 55 | +            .env("CARGO_TARGET_DIR", &target_dir)  | 
 | 56 | +            .env("PATH", &path)  | 
 | 57 | +            .env("RUSTC", &rustc);  | 
 | 58 | +        cmd.run()  | 
 | 59 | +    };  | 
 | 60 | + | 
 | 61 | +    release.assert_stdout_contains("x = 42");  | 
 | 62 | +}  | 
0 commit comments