Firmware for the b-parasite board, but in Rust!
at main 1.5 kB view raw
1//! This build script copies the `memory.x` file from the crate root into 2//! a directory where the linker can always find it at build time. 3//! For many projects this is optional, as the linker always searches the 4//! project root directory -- wherever `Cargo.toml` is. However, if you 5//! are using a workspace or have a more complicated build setup, this 6//! build script becomes required. Additionally, by requesting that 7//! Cargo re-run the build script whenever `memory.x` is changed, 8//! updating `memory.x` ensures a rebuild of the application with the 9//! new memory settings. 10 11use std::env; 12use std::fs::File; 13use std::io::Write; 14use std::path::PathBuf; 15 16fn main() { 17 // Put `memory.x` in our output directory and ensure it's 18 // on the linker search path. 19 let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); 20 File::create(out.join("memory.x")) 21 .unwrap() 22 .write_all(include_bytes!("memory.x")) 23 .unwrap(); 24 println!("cargo:rustc-link-search={}", out.display()); 25 26 // By default, Cargo will re-run a build script whenever 27 // any file in the project changes. By specifying `memory.x` 28 // here, we ensure the build script is only re-run when 29 // `memory.x` is changed. 30 println!("cargo:rerun-if-changed=memory.x"); 31 32 println!("cargo:rustc-link-arg-bins=--nmagic"); 33 println!("cargo:rustc-link-arg-bins=-Tlink.x"); 34 #[cfg(feature = "defmt")] 35 println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); 36}