Support Android ndk versions r23-beta3 and up

Since android ndk version `r23-beta3`, `libgcc` has been replaced with
`libunwind`. This moves the linking of `libgcc`/`libunwind` into the
`unwind` crate where we check if the system compiler can find
`libunwind` and fall back to `libgcc` if needed.
This commit is contained in:
Tilmann Meyer 2021-05-29 13:20:55 +02:00
parent 971a3f15f0
commit 965997b369
No known key found for this signature in database
GPG Key ID: A95E199988004B62
2 changed files with 14 additions and 1 deletions

View File

@ -210,7 +210,6 @@ cfg_if::cfg_if! {
if #[cfg(target_os = "android")] {
#[link(name = "dl")]
#[link(name = "log")]
#[link(name = "gcc")]
extern "C" {}
} else if #[cfg(target_os = "freebsd")] {
#[link(name = "execinfo")]

View File

@ -20,6 +20,20 @@ fn main() {
// linking for Linux is handled in lib.rs
if target.contains("musl") {
llvm_libunwind::compile();
} else if target.contains("android") {
let build = cc::Build::new();
// Since ndk r23 beta 3 `libgcc` was replaced with `libunwind` thus
// check if we have `libunwind` available and if so use it. Otherwise
// fall back to `libgcc` to support older ndk versions.
let has_unwind =
build.is_flag_supported("-lunwind").expect("Unable to invoke compiler");
if has_unwind {
println!("cargo:rustc-link-lib=unwind");
} else {
println!("cargo:rustc-link-lib=gcc");
}
}
} else if target.contains("freebsd") {
println!("cargo:rustc-link-lib=gcc_s");