Open
Description
I'm trying to build the crate aec-rs which uses cmake-rs
(build.rs
) with CMake.
export NDK_HOME="$HOME/Library/Android/sdk/ndk/$(ls -1 $HOME/Library/Android/sdk/ndk | sort | tail -n 1)"
export CMAKE_TOOLCHAIN_FILE="$NDK_HOME/build/cmake/android.toolchain.cmake"
export ANDROID_ABI="arm64-v8a"
cargo ndk -t arm64-v8a -o ./jniLibs build --release
But it failed with:
-- The CXX compiler identification is Clang 18.0.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: /Users/user/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang
-- Check for working C compiler: /Users/user/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang - broken
-- Configuring incomplete, errors occurred!
--- stderr
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.30/Modules/CMakeTestCCompiler.cmake:67 (message):
The C compiler
"/Users/user/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: '/Volumes/Internal/audio/aec-rs/target/aarch64-linux-android/release/build/aec-rs-sys-5aa0159efa82a17d/out/build/CMakeFiles/CMakeScratch/TryCompile-zIjAIO'
I can build clean rust project in the same way.
also, If I add the following in build.rs
it compile successfully:
config.define(
"CMAKE_TOOLCHAIN_FILE",
"/Users/user/Library/Android/sdk/ndk/27.0.12077973/build/cmake/android.toolchain.cmake",
);
config.define("ANDROID_ABI", "arm64-v8a");
config.define("ANDROID_PLATFORM", "android-35");
config.define("CMAKE_C_COMPILER", "/Users/user/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang");
config.define("CMAKE_CXX_COMPILER", "/Users/user/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang++");
Or the following:
config.define(
"CMAKE_TOOLCHAIN_FILE",
"/Users/user/Library/Android/sdk/ndk/27.0.12077973/build/cmake/android.toolchain.cmake",
);
config.define("ANDROID_ABI", "arm64-v8a");
config.define("ANDROID_PLATFORM", "android-35");
However I believe it should pick them automatically from cargo-ndk
?
By the way, it also failed with wasm
Update:
// Must set when compile for Android
// Variables comes from cargo-ndk
if let Ok(abi) = env::var("CARGO_NDK_ANDROID_TARGET") {
config.define("ANDROID_ABI", abi);
}
if let Ok(platform) = env::var("ANDROID_PLATFORM") {
config.define("ANDROID_PLATFORM", platform);
}
Along with
export NDK_HOME="$HOME/Library/Android/sdk/ndk/$(ls -1 $HOME/Library/Android/sdk/ndk | sort | tail -n 1)"
export CMAKE_TOOLCHAIN_FILE="$NDK_HOME/build/cmake/android.toolchain.cmake"
cargo ndk -t arm64-v8a -o ./jniLibs build --release -p libaec
This fix the issue. should I create PR?
Metadata
Assignees
Labels
No labels
Activity