A RPi Pico powered Lightning Detector
at main 52 lines 1.9 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::{BufWriter, 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 println!("cargo:rerun-if-changed=config.kdl"); 32 33 println!("cargo:rustc-link-arg-bins=--nmagic"); 34 println!("cargo:rustc-link-arg-bins=-Tlink.x"); 35 println!("cargo:rustc-link-arg-bins=-Tlink-rp.x"); 36 println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); 37 38 let config = include_str!("pico-config.toml"); 39 40 let out_file = out.join("constants.rs"); 41 42 let mut writer = BufWriter::new( 43 std::fs::OpenOptions::new() 44 .create(true) 45 .truncate(true) 46 .write(true) 47 .open(out_file) 48 .unwrap(), 49 ); 50 51 sachy_config::output_config(config, &mut writer).unwrap(); 52}