diff options
author | Brad King <brad.king@kitware.com> | 2018-04-17 14:42:19 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-04-17 15:21:15 (GMT) |
commit | da294a039dec5e4f97da742b8e3cb94f25b82230 (patch) | |
tree | 2d8b0553d25067b03181d4d2c6a4ebd86e27662d /Modules/Platform | |
parent | 12139ad009930ba00c650c03e11f4eff3a081839 (diff) | |
download | CMake-da294a039dec5e4f97da742b8e3cb94f25b82230.zip CMake-da294a039dec5e4f97da742b8e3cb94f25b82230.tar.gz CMake-da294a039dec5e4f97da742b8e3cb94f25b82230.tar.bz2 |
Android: Add support for NDK r17
The `armeabi` ABI is no longer available, so we can no longer use it by
default unconditionally. Instead detect all available ABIs and choose
the oldest arm ABI that is available.
Also update the test suite to account for the lack of `armeabi` support
and pass as of Android NDK r17-beta2.
Diffstat (limited to 'Modules/Platform')
-rw-r--r-- | Modules/Platform/Android-Determine.cmake | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/Modules/Platform/Android-Determine.cmake b/Modules/Platform/Android-Determine.cmake index add1dc1..e623902 100644 --- a/Modules/Platform/Android-Determine.cmake +++ b/Modules/Platform/Android-Determine.cmake @@ -261,7 +261,40 @@ if(NOT CMAKE_ANDROID_ARCH_ABI) else() # https://developer.android.com/ndk/guides/application_mk.html # Default is the oldest ARM ABI. - set(CMAKE_ANDROID_ARCH_ABI "armeabi") + + # Lookup the available ABIs among all toolchains. + set(_ANDROID_ABIS "") + file(GLOB _ANDROID_CONFIG_MKS + "${CMAKE_ANDROID_NDK}/build/core/toolchains/*/config.mk" + "${CMAKE_ANDROID_NDK}/toolchains/*/config.mk" + ) + foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS) + file(STRINGS "${config_mk}" _ANDROID_TOOL_ABIS REGEX "^TOOLCHAIN_ABIS :=") + string(REPLACE "TOOLCHAIN_ABIS :=" "" _ANDROID_TOOL_ABIS "${_ANDROID_TOOL_ABIS}") + separate_arguments(_ANDROID_TOOL_ABIS UNIX_COMMAND "${_ANDROID_TOOL_ABIS}") + list(APPEND _ANDROID_ABIS ${_ANDROID_TOOL_ABIS}) + unset(_ANDROID_TOOL_ABIS) + endforeach() + unset(_ANDROID_CONFIG_MKS) + + # Choose the oldest among the available arm ABIs. + if(_ANDROID_ABIS) + list(REMOVE_DUPLICATES _ANDROID_ABIS) + cmake_policy(PUSH) + cmake_policy(SET CMP0057 NEW) + foreach(abi armeabi armeabi-v7a arm64-v8a) + if("${abi}" IN_LIST _ANDROID_ABIS) + set(CMAKE_ANDROID_ARCH_ABI "${abi}") + break() + endif() + endforeach() + cmake_policy(POP) + endif() + unset(_ANDROID_ABIS) + + if(NOT CMAKE_ANDROID_ARCH_ABI) + set(CMAKE_ANDROID_ARCH_ABI "armeabi") + endif() endif() endif() set(CMAKE_ANDROID_ARCH "${_ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_ARCH}") |