build.rs 938 B

12345678910111213141516171819202122232425262728293031
  1. // NOTE: Adapted from cortex-m/build.rs
  2. use std::env;
  3. use std::fs;
  4. use std::io::Write;
  5. use std::path::PathBuf;
  6. fn main() {
  7. let target = env::var("TARGET").unwrap();
  8. let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
  9. let name = env::var("CARGO_PKG_NAME").unwrap();
  10. if target.starts_with("riscv") {
  11. fs::copy(
  12. format!("bin/{}.a", target),
  13. out_dir.join(format!("lib{}.a", name)),
  14. ).unwrap();
  15. println!("cargo:rustc-link-lib=static={}", name);
  16. println!("cargo:rustc-link-search={}", out_dir.display());
  17. }
  18. // Put the linker script somewhere the linker can find it
  19. fs::File::create(out_dir.join("link.x"))
  20. .unwrap()
  21. .write_all(include_bytes!("link.x"))
  22. .unwrap();
  23. println!("cargo:rustc-link-search={}", out_dir.display());
  24. println!("cargo:rerun-if-changed=build.rs");
  25. println!("cargo:rerun-if-changed=link.x");
  26. }