67 lines
2.3 KiB
Rust
Executable file
67 lines
2.3 KiB
Rust
Executable file
fn env(s: &str) -> String {
|
|
std::env::var(s).unwrap()
|
|
}
|
|
|
|
// do yourself a favor if you can, don't use windows
|
|
fn main() {
|
|
#[cfg(target_os = "windows")]
|
|
{
|
|
println!(concat!(
|
|
"NOTE: Windows can't easily find what to execute for 'ceedling' (the build system for algorithms-c).\n",
|
|
"You may need to set it's path in crates/algorithms/build.rs"
|
|
));
|
|
|
|
std::process::Command::new("ceedling.bat")
|
|
.arg("clobber")
|
|
.current_dir("./algorithms-c/")
|
|
.status()
|
|
.expect("could not cleanup old algorithms-c files");
|
|
}
|
|
#[cfg(not(target_os = "windows"))]
|
|
{
|
|
std::process::Command::new("ceedling")
|
|
.arg("clobber")
|
|
.current_dir("./algorithms-c/")
|
|
.status()
|
|
.expect("could not cleanup old algorithms-c files");
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
let mut cmd = std::process::Command::new("ceedling.bat");
|
|
#[cfg(not(target_os = "windows"))]
|
|
let mut cmd = std::process::Command::new("ceedling");
|
|
cmd.arg("release");
|
|
|
|
let arch = env("CARGO_CFG_TARGET_ARCH");
|
|
let pw = env("CARGO_CFG_TARGET_POINTER_WIDTH");
|
|
let os = env("CARGO_CFG_TARGET_OS");
|
|
|
|
if arch == "arm" && pw == "32" && os == "none" && !cfg!(test) {
|
|
cmd.env("CC", "arm-none-eabi-gcc")
|
|
.env("AR", "arm-none-eabi-ar")
|
|
.env("CC_FLAGS", "-march=armv6-m");
|
|
} else if os == "linux" || os == "windows" || cfg!(test) {
|
|
cmd.env("CC", "gcc").env("AR", "ar");
|
|
} else {
|
|
panic!("Unsupported build target")
|
|
}
|
|
|
|
println!("Cwd: {}", std::env::current_dir().unwrap().display());
|
|
let status = cmd
|
|
.current_dir("./algorithms-c")
|
|
.status()
|
|
.expect("could not make c stuff");
|
|
if !status.success() {
|
|
panic!("ceedling returned an error")
|
|
}
|
|
let cwd = std::env::current_dir().unwrap().display().to_string();
|
|
let libpath_s = format!("{cwd}/algorithms-c/build/artifacts/release/libalgorithms.a");
|
|
let libpath = std::path::Path::new(&libpath_s);
|
|
assert!(libpath.exists());
|
|
println!("cargo::rustc-link-lib=algorithms");
|
|
println!("cargo::rerun-if-changed={cwd}/algorithms-c/src/");
|
|
println!(
|
|
"cargo::rustc-link-search={}",
|
|
libpath.parent().unwrap().display()
|
|
);
|
|
}
|