use std::env;
use std::process::exit;
fn clang_linker_wrapper() -> ! {
let args = std::env::args_os().skip(1);
let clang = std::env::var("_CARGO_NDK_LINK_CLANG")
.expect("cargo-ndk rustc linker: didn't find _CARGO_NDK_LINK_CLANG env var");
let target = std::env::var("_CARGO_NDK_LINK_TARGET")
.expect("cargo-ndk rustc linker: didn't find _CARGO_NDK_LINK_TARGET env var");
let mut cmd = std::process::Command::new(&clang);
cmd.arg(target);
if let Ok(builtins_path) = std::env::var("_CARGO_NDK_LDFLAGS") {
cmd.args(builtins_path.split("\x1f"));
}
let mut child = cmd.args(args).spawn().unwrap_or_else(|err| {
eprintln!("cargo-ndk: Failed to spawn {clang:?} as linker: {err}");
std::process::exit(1)
});
let status = child.wait().unwrap_or_else(|err| {
eprintln!("cargo-ndk (as linker): Failed to wait for {clang:?} to complete: {err}");
std::process::exit(1);
});
std::process::exit(status.code().unwrap_or(1))
}
fn main() -> anyhow::Result<()> {
if env::var("CARGO").is_err() {
eprintln!("This binary may only be called via `cargo ndk`.");
exit(1);
}
if std::env::var("_CARGO_NDK_LINK_TARGET").is_ok() {
clang_linker_wrapper();
}
let args = std::env::args().skip(1).collect::<Vec<_>>();
cargo_ndk::cli::run(args)
}