42 releases

new 0.1.41 Feb 15, 2025
0.1.38 Jan 19, 2025
0.1.34 Dec 28, 2024
0.1.31 Nov 29, 2024
0.1.3 Nov 22, 2022

#70 in Build Utils

Download history 3022/week @ 2024-10-30 2537/week @ 2024-11-06 2132/week @ 2024-11-13 5215/week @ 2024-11-20 6555/week @ 2024-11-27 5982/week @ 2024-12-04 5634/week @ 2024-12-11 3911/week @ 2024-12-18 3742/week @ 2024-12-25 4094/week @ 2025-01-01 4502/week @ 2025-01-08 4495/week @ 2025-01-15 3946/week @ 2025-01-22 4510/week @ 2025-01-29 5562/week @ 2025-02-05 3098/week @ 2025-02-12

17,815 downloads per month
Used in 7 crates (5 directly)

Apache-2.0 OR MIT

25KB
422 lines

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:

Example

detect_targets:

use detect_targets::detect_targets;

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

get_desired_targets with user override:

use detect_targets::get_desired_targets;

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;

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

Dependencies

~3–12MB
~117K SLoC