Browse Source

Merge topic 'android-abis'

3a2bb717ee Android: load ABI information from abis.cmake

Acked-by: Kitware Robot <[email protected]>
Merge-request: !5499
Brad King 5 years ago
parent
commit
1bedfa7c5d
1 changed files with 76 additions and 61 deletions
  1. 76 61
      Modules/Platform/Android-Determine.cmake

+ 76 - 61
Modules/Platform/Android-Determine.cmake

@@ -215,6 +215,14 @@ if(CMAKE_ANDROID_NDK)
   # NDK >= 18 has abis.cmake. It provides:
   #   NDK_KNOWN_DEVICE_ABI32S
   #   NDK_KNOWN_DEVICE_ABI64S
+  # NDK >= 23 also provides:
+  #   NDK_KNOWN_DEVICE_ABIS
+  #   NDK_ABI_<abi>_PROC
+  #   NDK_ABI_<abi>_ARCH
+  #   NDK_ABI_<abi>_TRIPLE
+  #   NDK_ABI_<abi>_LLVM_TRIPLE
+  #   NDK_PROC_<processor>_ABI
+  #   NDK_ARCH_<arch>_ABI
   include("${CMAKE_ANDROID_NDK}/build/cmake/abis.cmake" OPTIONAL RESULT_VARIABLE _INCLUDED_ABIS)
 endif()
 
@@ -253,68 +261,75 @@ else()
 endif()
 
 if(_INCLUDED_ABIS)
-  set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABI32S} ${NDK_KNOWN_DEVICE_ABI64S})
+  if(NDK_KNOWN_DEVICE_ABIS)
+    set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABIS})
+  else()
+    set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABI32S} ${NDK_KNOWN_DEVICE_ABI64S})
+  endif()
 endif()
 
-# https://developer.android.com/ndk/guides/abis.html
-
-set(_ANDROID_ABI_arm64-v8a_PROC           "aarch64")
-set(_ANDROID_ABI_arm64-v8a_ARCH           "arm64")
-set(_ANDROID_ABI_arm64-v8a_TRIPLE         "aarch64-linux-android")
-set(_ANDROID_ABI_arm64-v8a_LLVM_TRIPLE    "aarch64-none-linux-android")
-set(_ANDROID_ABI_armeabi-v7a_PROC         "armv7-a")
-set(_ANDROID_ABI_armeabi-v7a_ARCH         "arm")
-set(_ANDROID_ABI_armeabi-v7a_TRIPLE       "arm-linux-androideabi")
-set(_ANDROID_ABI_armeabi-v7a_LLVM_TRIPLE  "armv7-none-linux-androideabi")
-set(_ANDROID_ABI_armeabi-v6_PROC          "armv6")
-set(_ANDROID_ABI_armeabi-v6_ARCH          "arm")
-set(_ANDROID_ABI_armeabi-v6_TRIPLE        "arm-linux-androideabi")
-set(_ANDROID_ABI_armeabi-v6_LLVM_TRIPLE   "armv6-none-linux-androideabi")
-set(_ANDROID_ABI_armeabi_PROC             "armv5te")
-set(_ANDROID_ABI_armeabi_ARCH             "arm")
-set(_ANDROID_ABI_armeabi_TRIPLE           "arm-linux-androideabi")
-set(_ANDROID_ABI_armeabi_LLVM_TRIPLE      "armv5te-none-linux-androideabi")
-set(_ANDROID_ABI_mips_PROC                "mips")
-set(_ANDROID_ABI_mips_ARCH                "mips")
-set(_ANDROID_ABI_mips_TRIPLE              "mipsel-linux-android")
-set(_ANDROID_ABI_mips_LLVM_TRIPLE         "mipsel-none-linux-android")
-set(_ANDROID_ABI_mips64_PROC              "mips64")
-set(_ANDROID_ABI_mips64_ARCH              "mips64")
-set(_ANDROID_ABI_mips64_TRIPLE            "mips64el-linux-android")
-set(_ANDROID_ABI_mips64_LLVM_TRIPLE       "mips64el-none-linux-android")
-set(_ANDROID_ABI_x86_PROC                 "i686")
-set(_ANDROID_ABI_x86_ARCH                 "x86")
-set(_ANDROID_ABI_x86_TRIPLE               "i686-linux-android")
-set(_ANDROID_ABI_x86_LLVM_TRIPLE          "i686-none-linux-android")
-set(_ANDROID_ABI_x86_64_PROC              "x86_64")
-set(_ANDROID_ABI_x86_64_ARCH              "x86_64")
-set(_ANDROID_ABI_x86_64_TRIPLE            "x86_64-linux-android")
-set(_ANDROID_ABI_x86_64_LLVM_TRIPLE       "x86_64-none-linux-android")
-
-set(_ANDROID_PROC_aarch64_ARCH_ABI "arm64-v8a")
-set(_ANDROID_PROC_armv7-a_ARCH_ABI "armeabi-v7a")
-set(_ANDROID_PROC_armv6_ARCH_ABI   "armeabi-v6")
-set(_ANDROID_PROC_armv5te_ARCH_ABI "armeabi")
-set(_ANDROID_PROC_i686_ARCH_ABI    "x86")
-set(_ANDROID_PROC_mips_ARCH_ABI    "mips")
-set(_ANDROID_PROC_mips64_ARCH_ABI  "mips64")
-set(_ANDROID_PROC_x86_64_ARCH_ABI  "x86_64")
-
-set(_ANDROID_ARCH_arm64_ABI  "arm64-v8a")
-set(_ANDROID_ARCH_arm_ABI    "armeabi")
-set(_ANDROID_ARCH_mips_ABI   "mips")
-set(_ANDROID_ARCH_mips64_ABI "mips64")
-set(_ANDROID_ARCH_x86_ABI    "x86")
-set(_ANDROID_ARCH_x86_64_ABI "x86_64")
+if(NOT DEFINED NDK_KNOWN_DEVICE_ABIS)
+  # The NDK is not new enough to provide ABI information.
+  # https://developer.android.com/ndk/guides/abis.html
+
+  set(NDK_ABI_arm64-v8a_PROC           "aarch64")
+  set(NDK_ABI_arm64-v8a_ARCH           "arm64")
+  set(NDK_ABI_arm64-v8a_TRIPLE         "aarch64-linux-android")
+  set(NDK_ABI_arm64-v8a_LLVM_TRIPLE    "aarch64-none-linux-android")
+  set(NDK_ABI_armeabi-v7a_PROC         "armv7-a")
+  set(NDK_ABI_armeabi-v7a_ARCH         "arm")
+  set(NDK_ABI_armeabi-v7a_TRIPLE       "arm-linux-androideabi")
+  set(NDK_ABI_armeabi-v7a_LLVM_TRIPLE  "armv7-none-linux-androideabi")
+  set(NDK_ABI_armeabi-v6_PROC          "armv6")
+  set(NDK_ABI_armeabi-v6_ARCH          "arm")
+  set(NDK_ABI_armeabi-v6_TRIPLE        "arm-linux-androideabi")
+  set(NDK_ABI_armeabi-v6_LLVM_TRIPLE   "armv6-none-linux-androideabi")
+  set(NDK_ABI_armeabi_PROC             "armv5te")
+  set(NDK_ABI_armeabi_ARCH             "arm")
+  set(NDK_ABI_armeabi_TRIPLE           "arm-linux-androideabi")
+  set(NDK_ABI_armeabi_LLVM_TRIPLE      "armv5te-none-linux-androideabi")
+  set(NDK_ABI_mips_PROC                "mips")
+  set(NDK_ABI_mips_ARCH                "mips")
+  set(NDK_ABI_mips_TRIPLE              "mipsel-linux-android")
+  set(NDK_ABI_mips_LLVM_TRIPLE         "mipsel-none-linux-android")
+  set(NDK_ABI_mips64_PROC              "mips64")
+  set(NDK_ABI_mips64_ARCH              "mips64")
+  set(NDK_ABI_mips64_TRIPLE            "mips64el-linux-android")
+  set(NDK_ABI_mips64_LLVM_TRIPLE       "mips64el-none-linux-android")
+  set(NDK_ABI_x86_PROC                 "i686")
+  set(NDK_ABI_x86_ARCH                 "x86")
+  set(NDK_ABI_x86_TRIPLE               "i686-linux-android")
+  set(NDK_ABI_x86_LLVM_TRIPLE          "i686-none-linux-android")
+  set(NDK_ABI_x86_64_PROC              "x86_64")
+  set(NDK_ABI_x86_64_ARCH              "x86_64")
+  set(NDK_ABI_x86_64_TRIPLE            "x86_64-linux-android")
+  set(NDK_ABI_x86_64_LLVM_TRIPLE       "x86_64-none-linux-android")
+
+  set(NDK_PROC_aarch64_ABI "arm64-v8a")
+  set(NDK_PROC_armv7-a_ABI "armeabi-v7a")
+  set(NDK_PROC_armv6_ABI   "armeabi-v6")
+  set(NDK_PROC_armv5te_ABI "armeabi")
+  set(NDK_PROC_i686_ABI    "x86")
+  set(NDK_PROC_mips_ABI    "mips")
+  set(NDK_PROC_mips64_ABI  "mips64")
+  set(NDK_PROC_x86_64_ABI  "x86_64")
+
+  set(NDK_ARCH_arm64_ABI  "arm64-v8a")
+  set(NDK_ARCH_arm_ABI    "armeabi")
+  set(NDK_ARCH_mips_ABI   "mips")
+  set(NDK_ARCH_mips64_ABI "mips64")
+  set(NDK_ARCH_x86_ABI    "x86")
+  set(NDK_ARCH_x86_64_ABI "x86_64")
+endif()
 
 # Validate inputs.
-if(CMAKE_ANDROID_ARCH_ABI AND NOT DEFINED "_ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC")
+if(CMAKE_ANDROID_ARCH_ABI AND NOT DEFINED "NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC")
   message(FATAL_ERROR "Android: Unknown ABI CMAKE_ANDROID_ARCH_ABI='${CMAKE_ANDROID_ARCH_ABI}'.")
 endif()
-if(CMAKE_SYSTEM_PROCESSOR AND NOT DEFINED "_ANDROID_PROC_${CMAKE_SYSTEM_PROCESSOR}_ARCH_ABI")
+if(CMAKE_SYSTEM_PROCESSOR AND NOT DEFINED "NDK_PROC_${CMAKE_SYSTEM_PROCESSOR}_ABI")
   message(FATAL_ERROR "Android: Unknown processor CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}'.")
 endif()
-if(_ANDROID_SYSROOT_ARCH AND NOT DEFINED "_ANDROID_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI")
+if(_ANDROID_SYSROOT_ARCH AND NOT DEFINED "NDK_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI")
   message(FATAL_ERROR
     "Android: Unknown architecture '${_ANDROID_SYSROOT_ARCH}' specified in CMAKE_SYSROOT:\n"
     "  ${CMAKE_SYSROOT}"
@@ -324,9 +339,9 @@ endif()
 # Select an ABI.
 if(NOT CMAKE_ANDROID_ARCH_ABI)
   if(CMAKE_SYSTEM_PROCESSOR)
-    set(CMAKE_ANDROID_ARCH_ABI "${_ANDROID_PROC_${CMAKE_SYSTEM_PROCESSOR}_ARCH_ABI}")
+    set(CMAKE_ANDROID_ARCH_ABI "${NDK_PROC_${CMAKE_SYSTEM_PROCESSOR}_ABI}")
   elseif(_ANDROID_SYSROOT_ARCH)
-    set(CMAKE_ANDROID_ARCH_ABI "${_ANDROID_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI}")
+    set(CMAKE_ANDROID_ARCH_ABI "${NDK_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI}")
   elseif(_INCLUDED_ABIS)
     # Default to the oldest ARM ABI.
     foreach(abi armeabi armeabi-v7a arm64-v8a)
@@ -382,7 +397,7 @@ if(_INCLUDED_ABIS AND NOT CMAKE_ANDROID_ARCH_ABI IN_LIST _ANDROID_KNOWN_ABIS)
     "Supported ABIS: ${_ANDROID_KNOWN_ABIS}."
   )
 endif()
-set(CMAKE_ANDROID_ARCH "${_ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_ARCH}")
+set(CMAKE_ANDROID_ARCH "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_ARCH}")
 if(_ANDROID_SYSROOT_ARCH AND NOT "x${_ANDROID_SYSROOT_ARCH}" STREQUAL "x${CMAKE_ANDROID_ARCH}")
   message(FATAL_ERROR
     "Android: Architecture '${_ANDROID_SYSROOT_ARCH}' specified in CMAKE_SYSROOT:\n"
@@ -390,17 +405,17 @@ if(_ANDROID_SYSROOT_ARCH AND NOT "x${_ANDROID_SYSROOT_ARCH}" STREQUAL "x${CMAKE_
     "does not match architecture '${CMAKE_ANDROID_ARCH}' for the ABI '${CMAKE_ANDROID_ARCH_ABI}'."
     )
 endif()
-set(CMAKE_ANDROID_ARCH_TRIPLE "${_ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_TRIPLE}")
+set(CMAKE_ANDROID_ARCH_TRIPLE "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_TRIPLE}")
 set(CMAKE_ANDROID_ARCH_LLVM_TRIPLE
-    "${_ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_LLVM_TRIPLE}")
+    "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_LLVM_TRIPLE}")
 
 # Select a processor.
 if(NOT CMAKE_SYSTEM_PROCESSOR)
-  set(CMAKE_SYSTEM_PROCESSOR "${_ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC}")
+  set(CMAKE_SYSTEM_PROCESSOR "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC}")
 endif()
 
 # If the user specified both an ABI and a processor then they might not match.
-if(NOT _ANDROID_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC STREQUAL CMAKE_SYSTEM_PROCESSOR)
+if(NOT NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC STREQUAL CMAKE_SYSTEM_PROCESSOR)
   message(FATAL_ERROR "Android: The specified CMAKE_ANDROID_ARCH_ABI='${CMAKE_ANDROID_ARCH_ABI}' and CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}' is not a valid combination.")
 endif()