fn main() { let arch = std::env::var("LBOS_ARCH").unwrap_or("virt".to_string()); println!("cargo:rerun-if-env-changed=LBOS_ARCH"); println!("cargo:rustc-cfg=feature=\"arch_{}\"", arch); println!("cargo:rerun-if-changed=src/arch/{}/asm", arch); if arch == "ppc32" { let mut cc_build = cc::Build::new(); let cc_build = cc_build .file(format!("src/arch/{}/asm/realmode.S", arch)) .file(format!("src/arch/{}/asm/trap.S", arch)); match &arch[..] { "ppc32" => { cc_build .flag("-mcpu=powerpc") .flag("-m32") .flag("-nostdlib") .flag("-msoft-float"); }, _ => panic!("unknown architecture: {}", arch), } cc_build.compile("vap_asm"); // link to the assembly file println!("cargo:rustc-link-lib=static=vap_asm"); } // specify the linker.ld script println!("cargo:rustc-link-arg=-Tsrc/arch/{arch}/asm/linker.ld"); }