mik32-runtime 0.2.0

Minimal Rust runtime for the MIK32 Amur microcontroller
Documentation
use std::{env, fs, path::PathBuf};

fn main() {
    let out = PathBuf::from(env::var_os("OUT_DIR").expect("OUT_DIR is not set"));

    let default = env::var_os("CARGO_FEATURE_MEMORY_DEFAULT").is_some();
    let spifi = env::var_os("CARGO_FEATURE_MEMORY_SPIFI").is_some();
    let memory = match (default, spifi) {
        (true, false) => "memory_default.x",
        (false, true) => "memory_spifi.x",
        (true, true) => {
            panic!("features `memory-default` and `memory-spifi` are mutually exclusive")
        }
        (false, false) => panic!("enable either `memory-default` or `memory-spifi`"),
    };

    fs::copy("link.x", out.join("link.x")).expect("failed to copy link.x");
    fs::copy("sections.lds", out.join("sections.lds")).expect("failed to copy sections.lds");
    fs::copy(memory, out.join("memory.x")).expect("failed to copy memory layout");

    println!("cargo:rustc-link-search={}", out.display());
    println!("cargo:rerun-if-changed=link.x");
    println!("cargo:rerun-if-changed=sections.lds");
    println!("cargo:rerun-if-changed=memory_default.x");
    println!("cargo:rerun-if-changed=memory_spifi.x");
}