rustysar/build.rs

51 lines
1.7 KiB
Rust

// Build script for Infineon Traveo Rust project
use std::env;
use std::fs;
use std::path::Path;
fn main() {
// Get the target and feature flags
let target = env::var("TARGET").unwrap_or_default();
let features = env::var("CARGO_CFG_FEATURES").unwrap_or_default();
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rerun-if-changed=memory-m0.x");
// Select appropriate memory configuration based on target
let memory_file = if target.contains("thumbv6m") {
"memory-m0.x"
} else if target.contains("thumbv7em") {
"memory.x"
} else {
"memory.x" // Default to Cortex-M7 config
};
// Check if memory file exists and copy it to output directory
if Path::new(memory_file).exists() {
println!("cargo:rustc-link-arg-bins=--script={}", memory_file);
fs::copy(
memory_file,
env::var("OUT_DIR").unwrap() + "/" + memory_file,
)
.expect("Failed to copy memory configuration");
}
// Set up linker script based on target
if target.contains("thumbv6m-none-eabi") {
println!("cargo:rustc-link-arg=-Tmemory-m0.x");
println!("cargo:rustc-link-arg=-Tlink.x");
} else if target.contains("thumbv7em-none-eabi") {
println!("cargo:rustc-link-arg=-Tmemory.x");
println!("cargo:rustc-link-arg=-Tlink.x");
}
// Add target-specific linker arguments
println!("cargo:rustc-link-arg=-lc");
println!("cargo:rustc-link-arg=-lm");
println!("cargo:rustc-link-arg=-lgcc");
// Set optimization level for embedded development
println!("cargo:rustc-env=OPT_LEVEL=s");
}