Hi, I want to build a shared library I can later package with java glue code with my own compiler, I don’t want to use Android NDK provided clang.
The problem I face is, cmake is hard coded to use ndk provided clang and nothing else.
For example:
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(triple aarch64-linux-android29)
set(CMAKE_C_COMPILER /home/mccakit/dev/llvm/bin/clang)
set(CMAKE_C_COMPILER_TARGET ${triple})
set(CMAKE_CXX_COMPILER /home/mccakit/dev/llvm/bin/clang++)
set(CMAKE_CXX_COMPILER_TARGET ${triple})
set(CMAKE_ASM_COMPILER /home/mccakit/dev/llvm/bin/clang)
set(CMAKE_ASM_COMPILER_TARGET ${triple})
set(CMAKE_RC_COMPILER /home/mccakit/dev/llvm/bin/llvm-rc)
set(CMAKE_AR /home/mccakit/dev/llvm/bin/llvm-ar)
set(CMAKE_RANLIB /home/mccakit/dev/llvm/bin/llvm-ranlib)
set(CMAKE_MT /home/mccakit/dev/llvm/bin/llvm-mt)
set(CMAKE_SYSROOT /home/mccakit/dev/android-clt/ndk/29.0.13599879/toolchains/llvm/prebuilt/linux-x86_64/sysroot)
set(CMAKE_FIND_ROOT_PATH /home/mccakit/dev/android-clt)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
add_compile_options(-w -flto=thin)
add_link_options(-w -flto=thin)
set(LIBCXXABI_USE_LLVM_UNWINDER OFF)
set(LIBCXX_CXX_ABI system-libcxxabi)
set(LIBCXX_CXX_ABI_INCLUDE_PATHS ${CMAKE_SYSROOT}/usr/include/c++/v1)
cmake gives this error
CMake Error at /home/mccakit/dev/cmake/share/cmake-4.1/Modules/Platform/Android-Determine.cmake:558 (message):
Android: The API specified by CMAKE_SYSTEM_VERSION='' is not an integer.
Call Stack (most recent call first):
/home/mccakit/dev/cmake/share/cmake-4.1/Modules/CMakeDetermineSystem.cmake:191 (include)
CMakeLists.txt:23 (project)
``
now trying to patch doesn't do anything
set(CMAKE_SYSTEM_VERSION 29)
– Android: Targeting API ‘29’ with architecture ‘arm64’, ABI ‘arm64-v8a’, and processor ‘aarch64’
CMake Error at /home/mccakit/dev/cmake/share/cmake-4.1/Modules/Platform/Android/Determine-Compiler-Standalone.cmake:16 (message):
Android: No ‘*-gcc’ compiler found in CMAKE_ANDROID_STANDALONE_TOOLCHAIN:
/home/mccakit/dev/android-clt/ndk/29.0.13599879/toolchains/llvm/prebuilt/linux-x86_64
Call Stack (most recent call first):
/home/mccakit/dev/cmake/share/cmake-4.1/Modules/Platform/Android/Determine-Compiler.cmake:57 (include)
/home/mccakit/dev/cmake/share/cmake-4.1/Modules/Platform/Android-Determine-C.cmake:1 (include)
/home/mccakit/dev/cmake/share/cmake-4.1/Modules/CMakeDetermineCCompiler.cmake:26 (include)
CMakeLists.txt:23 (project)
– Configuring incomplete, errors occurred!
mccakit@mccakit-asus:~/dev/llvm-project$
let's try to patch a bit more, this is the only variable that makes the error go away
set(CMAKE_ANDROID_NDK /home/mccakit/dev/android-clt/ndk/29.0.13599879)
now when we run,
cmake just selects the android ndk
mccakit@mccakit-asus:~/dev/llvm-project$ cmake -S runtimes -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=/home/mccakit/dev/libcxx/toolchains/android-arm64.cmake -DLLVM_ENABLE_RUNTIMES=“libcxx”
– Performing standalone runtimes build.
– Android: Targeting API ‘29’ with architecture ‘arm64’, ABI ‘arm64-v8a’, and processor ‘aarch64’
– Android: Selected unified Clang toolchain
– The C compiler identification is Clang 20.0.0
– The CXX compiler identification is Clang 20.0.0
Now, I want to build for android with clang, nothing else with The NDK is just a sysroot.
Please help me