build.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. use std::{env, path::PathBuf};
  2. fn main() {
  3. let out = PathBuf::from(env::var_os("OUT_DIR").unwrap());
  4. let ld = &out.join("rustsbi-test-kernel.ld");
  5. std::fs::write(ld, LINKER_SCRIPT).unwrap();
  6. println!("cargo:rustc-link-arg=-T{}", ld.display());
  7. println!("cargo:rustc-link-search={}", out.display());
  8. }
  9. const LINKER_SCRIPT: &[u8] = b"OUTPUT_ARCH(riscv)
  10. ENTRY(_start)
  11. SECTIONS {
  12. . = 0x80200000;
  13. istart = .;
  14. .head.text : ALIGN(8) {
  15. KEEP(*(.head.text))
  16. }
  17. .text : ALIGN(8) {
  18. *(.text.entry)
  19. *(.text .text.*)
  20. }
  21. .rodata : ALIGN(8) {
  22. srodata = .;
  23. *(.rodata .rodata.*)
  24. *(.srodata .srodata.*)
  25. . = ALIGN(8);
  26. erodata = .;
  27. }
  28. .data : ALIGN(8) {
  29. sdata = .;
  30. *(.data .data.*)
  31. *(.sdata .sdata.*)
  32. . = ALIGN(8);
  33. edata = .;
  34. }
  35. sidata = LOADADDR(.data);
  36. .bss (NOLOAD) : ALIGN(8) {
  37. *(.bss.uninit)
  38. sbss = .;
  39. *(.bss .bss.*)
  40. *(.sbss .sbss.*)
  41. ebss = .;
  42. }
  43. iend = .;
  44. /DISCARD/ : {
  45. *(.eh_frame)
  46. }
  47. }";