51 lines
1.7 KiB
Rust
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");
|
|
}
|