//! Build script for `chanora_bridge`. //! //! Android-only: emit `cargo:rustc-link-lib=dylib=c++_shared` so the //! produced `libchanora_bridge.so` cdylib carries a `DT_NEEDED //! libc++_shared.so` ELF entry. Without this, Android's per-library //! namespace dynamic linker (API 24+) does NOT auto-resolve //! C++ runtime symbols like `__cxa_pure_virtual` even when //! `libc++_shared.so` is co-located in jniLibs// and already //! loaded into the process via a prior `System.loadLibrary("c++_shared")`. //! //! Trace: SDD-105 (AndroidJniBootstrap — the bridge must load cleanly //! before MainActivity.onCreate continues). Companion to SDD-118 item 6 //! extended (stages libc++_shared.so into jniLibs//). //! //! Reference: https://developer.android.com/ndk/guides/cpp-support //! and the namespace-isolation behavior introduced in API 24. fn main() { let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default(); if target_os == "android" { // Dynamic linkage against the NDK shared C++ runtime. The runtime // .so is provided by the NDK sysroot at link time (cargo-ndk puts // the per-target sysroot lib dir on the linker search path) and // staged into jniLibs// at packaging time by the Gradle // task `:app:copyRustBridgeJniLibs` per SDD-118 item 6 // (extended). println!("cargo:rustc-link-lib=dylib=c++_shared"); } }