Files
asterinas/ostd/libs/linux-bzimage/setup/build.rs
2025-03-17 13:30:59 +08:00

30 lines
1011 B
Rust

// SPDX-License-Identifier: MPL-2.0
use std::{path::PathBuf, process::Command};
fn main() {
let source_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());
let target_arch = std::env::var("TARGET").unwrap();
let lds = source_dir.join("src/x86/linker.ld");
let def = match target_arch.as_str() {
"x86_64-unknown-none" => "-DCFG_TARGET_ARCH_X86_64=1",
"x86_64-i386_pm-none" => "-DCFG_TARGET_ARCH_X86_64=0",
other => panic!("unsupported target: {}", other),
};
let out_lds = out_dir.join("linker.ld");
let status = Command::new("cpp")
.arg("-o")
.arg(&out_lds)
.arg(def)
.arg(&lds)
.status()
.expect("failed to run the preprocessor");
assert!(status.success(), "the preprocessor exits with failure");
println!("cargo:rerun-if-changed={}", lds.display());
println!("cargo:rustc-link-arg=-T{}", out_lds.display());
}