build.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. const ARCH_CONFIGS: &[&str] = &["has_stacktrace", "has_shutdown"];
  2. // Define configs
  3. fn define_config(config: &str) {
  4. println!("cargo::rustc-check-cfg=cfg({config})");
  5. }
  6. fn define_arch_config(config: &str) {
  7. define_config(&format!("arch_{config}"));
  8. }
  9. fn define_arch_configs() {
  10. for config in ARCH_CONFIGS {
  11. define_arch_config(config);
  12. }
  13. }
  14. fn define_configs() {
  15. define_arch_configs();
  16. }
  17. // Set configs
  18. fn set_config(config: &str) {
  19. println!("cargo::rustc-cfg={config}");
  20. }
  21. fn set_arch_config(config: &str) {
  22. set_config(&format!("arch_{config}"));
  23. }
  24. fn set_arch_configs_x86() {
  25. set_arch_config("has_stacktrace");
  26. }
  27. fn set_arch_configs_riscv64() {
  28. set_arch_config("has_stacktrace");
  29. set_arch_config("has_shutdown");
  30. }
  31. fn set_arch_configs_loongarch64() {
  32. set_arch_config("has_shutdown");
  33. }
  34. fn set_arch_configs() {
  35. match std::env::var("CARGO_CFG_TARGET_ARCH").as_deref().unwrap() {
  36. "x86_64" => set_arch_configs_x86(),
  37. "riscv64" => set_arch_configs_riscv64(),
  38. "loongarch64" => set_arch_configs_loongarch64(),
  39. arch => panic!("Unsupported architecture: {}", arch),
  40. }
  41. }
  42. fn set_configs() {
  43. set_arch_configs();
  44. }
  45. fn main() -> Result<(), Box<dyn std::error::Error>> {
  46. define_configs();
  47. set_configs();
  48. println!("cargo:rustc-link-arg=-T{}", "link.x");
  49. if let Ok(extra_link_args) = std::env::var("DEP_EONIX_HAL_EXTRA_LINK_ARGS")
  50. {
  51. for arg in extra_link_args.split_whitespace() {
  52. println!("cargo:rustc-link-arg={}", arg);
  53. }
  54. }
  55. Ok(())
  56. }