[target.thumbv7m-none-eabi]# uncomment this to make `cargo run` execute programs on QEMU# runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"[target.'cfg(all(target_arch = "arm", target_os = "none"))']# uncomment ONE of these three option to make `cargo run` start a GDB session# which option to pick depends on your systemrunner="arm-none-eabi-gdb -q -x openocd.gdb"# runner = "gdb-multiarch -q -x openocd.gdb"# runner = "gdb -q -x openocd.gdb"rustflags=[# Previously, the linker arguments --nmagic and -Tlink.x were set here.# They are now set by build.rs instead. The linker argument can still# only be set here, if a custom linker is needed.# By default, the LLD linker is used, which is shipped with the Rust# toolchain. If you run into problems with LLD, you can switch to the# GNU linker by uncommenting this line:# "-C", "linker=arm-none-eabi-ld",# If you need to link to pre-compiled C libraries provided by a C toolchain# use GCC as the linker by uncommenting the three lines below:# "-C", "linker=arm-none-eabi-gcc",# "-C", "link-arg=-Wl,-Tlink.x",# "-C", "link-arg=-nostartfiles",][build]# Pick ONE of these default compilation targets# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+# target = "thumbv7m-none-eabi" # Cortex-M3# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)target="thumbv7em-none-eabihf"# Cortex-M4F and Cortex-M7F (with FPU)# target = "thumbv8m.base-none-eabi" # Cortex-M23# target = "thumbv8m.main-none-eabi" # Cortex-M33 (no FPU)# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)
//! This build script copies the `memory.x` file from the crate root into
//! a directory where the linker can always find it at build time.
//! For many projects this is optional, as the linker always searches the
//! project root directory -- wherever `Cargo.toml` is. However, if you
//! are using a workspace or have a more complicated build setup, this
//! build script becomes required. Additionally, by requesting that
//! Cargo re-run the build script whenever `memory.x` is changed,
//! updating `memory.x` ensures a rebuild of the application with the
//! new memory settings.
//!
//! The build script also sets the linker flags to tell it which link script to use.
usestd::env;usestd::fs::File;usestd::io::Write;usestd::path::PathBuf;fnmain(){// Put `memory.x` in our output directory and ensure it's
// on the linker search path.
letout=&PathBuf::from(env::var_os("OUT_DIR").unwrap());File::create(out.join("memory.x")).unwrap().write_all(include_bytes!("memory.x")).unwrap();println!("cargo:rustc-link-search={}",out.display());// By default, Cargo will re-run a build script whenever
// any file in the project changes. By specifying `memory.x`
// here, we ensure the build script is only re-run when
// `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x");// Specify linker arguments.
// `--nmagic` is required if memory section addresses are not aligned to 0x10000,
// for example the FLASH and RAM sections in your `memory.x`.
// See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
println!("cargo:rustc-link-arg=--nmagic");// Set the linker script to the one provided by cortex-m-rt.
println!("cargo:rustc-link-arg=-Tlink.x");}