@@ -66,11 +66,14 @@ fn is_64bit(triple: &str) -> bool {
6666 triple. starts_with ( "aarch64" ) || triple. starts_with ( "x86_64" )
6767}
6868
69+ #[ allow( clippy:: too_many_arguments) ]
6970pub ( crate ) fn build_env (
7071 triple : & str ,
7172 ndk_home : & Path ,
7273 ndk_version : & Version ,
7374 clang_target : & str ,
75+ platform : u8 ,
76+ android_abi : & str ,
7477 link_builtins : bool ,
7578 link_cxx_shared : bool ,
7679) -> BTreeMap < String , OsString > {
@@ -146,6 +149,12 @@ pub(crate) fn build_env(
146149 CARGO_NDK_SYSROOT_TARGET_KEY . to_string ( ) ,
147150 cargo_ndk_sysroot_target. into ( ) ,
148151 ) ,
152+ (
153+ "CARGO_NDK_ANDROID_PLATFORM" . to_string ( ) ,
154+ platform. to_string ( ) . into ( ) ,
155+ ) ,
156+ ( "ANDROID_PLATFORM" . to_string ( ) , platform. to_string ( ) . into ( ) ) ,
157+ ( "ANDROID_ABI" . to_string ( ) , android_abi. into ( ) ) ,
149158 // https://github.com/KyleMayes/clang-sys?tab=readme-ov-file#environment-variables
150159 ( "CLANG_PATH" . into ( ) , target_cc. clone ( ) . into ( ) ) ,
151160 ( "_CARGO_NDK_LINK_TARGET" . into ( ) , clang_target. into ( ) ) , // Recognized by main() so we know when we're acting as a wrapper
@@ -241,6 +250,7 @@ pub(crate) fn run(
241250 version : & Version ,
242251 triple : & str ,
243252 platform : u8 ,
253+ android_abi : & str ,
244254 link_builtins : bool ,
245255 link_cxx_shared : bool ,
246256 cargo_args : & [ String ] ,
@@ -260,6 +270,8 @@ pub(crate) fn run(
260270 ndk_home,
261271 version,
262272 & clang_target,
273+ platform,
274+ android_abi,
263275 link_builtins,
264276 link_cxx_shared,
265277 ) ;
@@ -299,12 +311,10 @@ pub(crate) fn run(
299311 let mut cargo_args = cargo_args. to_vec ( ) ;
300312
301313 match dir. parent ( ) {
302- Some ( parent) => {
303- if parent != dir {
304- // log::debug!("Working directory does not match manifest-path");
305- cargo_args. push ( "--manifest-path" . into ( ) ) ;
306- cargo_args. push ( cargo_manifest. into ( ) ) ;
307- }
314+ Some ( parent) if parent != dir => {
315+ // log::debug!("Working directory does not match manifest-path");
316+ cargo_args. push ( "--manifest-path" . into ( ) ) ;
317+ cargo_args. push ( cargo_manifest. into ( ) ) ;
308318 }
309319 _ => {
310320 // log::warn!("Parent of current working directory does not exist");
@@ -346,3 +356,30 @@ pub(crate) fn run(
346356
347357 Ok ( ( status, artifacts) )
348358}
359+
360+ #[ cfg( test) ]
361+ mod tests {
362+ use std:: path:: Path ;
363+
364+ use cargo_metadata:: semver:: Version ;
365+
366+ use super :: build_env;
367+
368+ #[ test]
369+ fn build_env_exports_android_platform_and_abi ( ) {
370+ let env = build_env (
371+ "aarch64-linux-android" ,
372+ Path :: new ( "/opt/android-ndk" ) ,
373+ & Version :: new ( 28 , 0 , 0 ) ,
374+ "--target=aarch64-linux-android28" ,
375+ 28 ,
376+ "arm64-v8a" ,
377+ false ,
378+ false ,
379+ ) ;
380+
381+ assert_eq ! ( env[ "CARGO_NDK_ANDROID_PLATFORM" ] , "28" ) ;
382+ assert_eq ! ( env[ "ANDROID_PLATFORM" ] , "28" ) ;
383+ assert_eq ! ( env[ "ANDROID_ABI" ] , "arm64-v8a" ) ;
384+ }
385+ }
0 commit comments