detect-targets 0.1.41

Detect the target of the env at runtime
Documentation

Detect the target at the runtime.

It runs $CARGO -vV if environment variable CARGO is present for cargo subcommands, otherwise it would try running rustc -vV.

If both rustc isn't present on the system, it will fallback to using syscalls plus ldd on Linux to detect targets.

Example use cases:

  • The binary is built with musl libc to run on anywhere, but the runtime supports glibc.
  • The binary is built for x86_64-apple-darwin, but run on aarch64-apple-darwin.

This crate provides two API:

  • [detect_targets] provides the API to get the target at runtime, but the code is run on the current thread.
  • [get_desired_targets] provides the API to either use override provided by the users, or run [detect_targets] in the background using [tokio::spawn].

Example

detect_targets:

use detect_targets::detect_targets;
# #[tokio::main(flavor = "current_thread")]
# async fn main() {

let targets = detect_targets().await;
eprintln!("Your platform supports targets: {targets:#?}");
# }

get_desired_targets with user override:

use detect_targets::get_desired_targets;
# #[tokio::main(flavor = "current_thread")]
# async fn main() {

assert_eq!(
    get_desired_targets(Some(vec![
        "x86_64-apple-darwin".to_string(),
        "aarch64-apple-darwin".to_string(),
    ])).get().await,
    &["x86_64-apple-darwin", "aarch64-apple-darwin"],
);
# }

get_desired_targets without user override:

use detect_targets::get_desired_targets;
# #[tokio::main(flavor = "current_thread")]
# async fn main() {

eprintln!(
    "Your platform supports targets: {:#?}",
    get_desired_targets(None).get().await
);
# }