mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
Android: Add support for NDK r18
NDK r18 drops GCC toolchains and some STL types. We need to choose a clang toolchain by default when no gcc toolchains are available. Switch the STL type default to `c++_static` when the old `gnustl_static` default is not available. Update the test suite to not run tests for STL types that do not exist. Also do not expect the gcc toolchain `cpp` tool to be available because r18 does not provide it. Also teach it to tolerate `gcc -dumpmachine` output like `arm--linux-android` that differs from the toolchain prefix. Fixes: #18301
This commit is contained in:
@@ -61,8 +61,12 @@ foreach(ndk IN LISTS TEST_ANDROID_NDK)
|
||||
list(APPEND _abis_${_version} ${_abis})
|
||||
endif()
|
||||
endforeach()
|
||||
set(_abis_ ${_abis_${_latest_gcc}})
|
||||
set(_abis_clang ${_abis_${_latest_clang}})
|
||||
if(_latest_gcc)
|
||||
set(_abis_ ${_abis_${_latest_gcc}})
|
||||
else()
|
||||
set(_abis_ ${_abis_clang})
|
||||
endif()
|
||||
if(_versions MATCHES "clang")
|
||||
set(_versions "clang" ${_versions})
|
||||
endif()
|
||||
@@ -132,10 +136,11 @@ foreach(ndk IN LISTS TEST_ANDROID_NDK)
|
||||
set(stl_types
|
||||
none
|
||||
system
|
||||
gnustl_static
|
||||
gnustl_shared
|
||||
)
|
||||
|
||||
if(IS_DIRECTORY "${ndk}/sources/cxx-stl/gnu-libstdc++")
|
||||
list(APPEND stl_types gnustl_static gnustl_shared)
|
||||
endif()
|
||||
if(IS_DIRECTORY "${ndk}/sources/cxx-stl/gabi++/libs")
|
||||
list(APPEND stl_types gabi++_static gabi++_shared)
|
||||
endif()
|
||||
|
||||
@@ -8,7 +8,6 @@ endif()
|
||||
foreach(f
|
||||
"${CMAKE_C_ANDROID_TOOLCHAIN_PREFIX}gcc${CMAKE_C_ANDROID_TOOLCHAIN_SUFFIX}"
|
||||
"${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}g++${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}"
|
||||
"${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}cpp${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}"
|
||||
"${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}ar${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}"
|
||||
"${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}ld${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}"
|
||||
)
|
||||
@@ -61,10 +60,12 @@ execute_process(
|
||||
if(NOT _res EQUAL 0)
|
||||
message(SEND_ERROR "Failed to run 'gcc -dumpmachine':\n ${_res}")
|
||||
endif()
|
||||
if(NOT _out STREQUAL "${CMAKE_C_ANDROID_TOOLCHAIN_MACHINE}")
|
||||
string(REPLACE "--" "-" _out_check "${_out}")
|
||||
if(NOT _out_check STREQUAL "${CMAKE_C_ANDROID_TOOLCHAIN_MACHINE}"
|
||||
AND NOT (_out STREQUAL "arm--linux-android" AND CMAKE_C_ANDROID_TOOLCHAIN_MACHINE STREQUAL "arm-linux-androideabi"))
|
||||
message(SEND_ERROR "'gcc -dumpmachine' produced:\n"
|
||||
" ${_out}\n"
|
||||
"which is not equal to CMAKE_C_ANDROID_TOOLCHAIN_MACHINE:\n"
|
||||
"which does not match CMAKE_C_ANDROID_TOOLCHAIN_MACHINE:\n"
|
||||
" ${CMAKE_C_ANDROID_TOOLCHAIN_MACHINE}"
|
||||
)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user