1use std::path::PathBuf;
2
3pub mod cargo;
4pub mod cli;
5pub mod meta;
6pub mod shell;
7
8#[cfg(target_os = "macos")]
9pub(crate) const ARCH: &str = "darwin-x86_64";
10#[cfg(any(target_os = "linux", target_os = "android"))]
11pub(crate) const ARCH: &str = "linux-x86_64";
12#[cfg(target_os = "windows")]
13pub(crate) const ARCH: &str = "windows-x86_64";
14
15#[cfg(all(target_os = "android", not(cargo_ndk_on_android)))]
16compile_error!(
17 r#"
18Building cargo-ndk on Android is not supported. This binary is intended to be run on your host OS.
19
20Set CARGO_NDK_ON_ANDROID to override this check (for example, building for Termux)."
21"#
22);
23
24#[cfg(not(any(
25 target_os = "android",
26 target_os = "macos",
27 target_os = "linux",
28 target_os = "windows"
29)))]
30compile_error!("Unsupported target OS");
31
32pub(crate) fn clang_target(rust_target: &str, api_level: u8) -> String {
33 let target = match rust_target {
34 "arm-linux-androideabi" => "armv7a-linux-androideabi",
35 "armv7-linux-androideabi" => "armv7a-linux-androideabi",
36 _ => rust_target,
37 };
38 format!("--target={target}{api_level}")
39}
40
41pub(crate) fn sysroot_target(rust_target: &str) -> &str {
42 (match rust_target {
43 "armv7-linux-androideabi" => "arm-linux-androideabi",
44 _ => rust_target,
45 }) as _
46}
47
48pub(crate) fn ndk_tool(arch: &str, tool: &str) -> PathBuf {
49 ["toolchains", "llvm", "prebuilt", arch, "bin", tool]
50 .iter()
51 .collect()
52}
53
54pub(crate) fn sysroot_suffix(arch: &str) -> PathBuf {
55 ["toolchains", "llvm", "prebuilt", arch, "sysroot"]
56 .iter()
57 .collect()
58}