Browse Source

Android: Add CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG variable

The NDK provides prebuilt toolchain files in directories named for the
host architecture.  The NDK build system calls this `HOST_TAG`.
Expose the value publicly for use by clients that need to pass it
to external tools.

Suggested-by: Ruslan Baratov <[email protected]>
Brad King 9 years ago
parent
commit
d95e6dff3c

+ 1 - 0
Help/manual/cmake-variables.7.rst

@@ -244,6 +244,7 @@ Variables that Control the Build
    /variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES
    /variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES
    /variable/CMAKE_ANDROID_NDK
+   /variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
    /variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
    /variable/CMAKE_ANDROID_PROCESS_MAX
    /variable/CMAKE_ANDROID_PROGUARD

+ 5 - 0
Help/release/dev/android-info-variables.rst

@@ -4,3 +4,8 @@ android-info-variables
 * When :ref:`Cross Compiling for Android with the NDK`, the
   :variable:`CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION` variable is
   now set by CMake if it is not set by the user or toolchain file.
+
+* When :ref:`Cross Compiling for Android with the NDK`, a new
+  :variable:`CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG` variable is
+  now set by CMake to expose the host directory component of the
+  path to the NDK prebuilt toolchains.

+ 6 - 0
Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst

@@ -0,0 +1,6 @@
+CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
+------------------------------------
+
+When :ref:`Cross Compiling for Android with the NDK`, this variable
+provides the NDK's "host tag" used to construct the path to prebuilt
+toolchains that run on the host.

+ 1 - 0
Modules/Platform/Android/Determine-Compiler-NDK.cmake

@@ -210,6 +210,7 @@ endif()
 # Help CMakeFindBinUtils locate things.
 set(_CMAKE_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_PREFIX}")
 
+set(_ANDROID_TOOL_NDK_TOOLCHAIN_HOST_TAG "${_ANDROID_HOST_DIR}")
 set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS_NDK}")
 
 set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS}")

+ 1 - 0
Modules/Platform/Android/Determine-Compiler-Standalone.cmake

@@ -58,4 +58,5 @@ else()
   set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
 endif()
 
+set(_ANDROID_TOOL_NDK_TOOLCHAIN_HOST_TAG "")
 set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "")

+ 2 - 0
Modules/Platform/Android/Determine-Compiler.cmake

@@ -40,6 +40,7 @@ if(CMAKE_ANDROID_NDK)
 elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
   include(Platform/Android/Determine-Compiler-Standalone)
 else()
+  set(_ANDROID_TOOL_NDK_TOOLCHAIN_HOST_TAG "")
   set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "")
   set(_ANDROID_TOOL_C_COMPILER "")
   set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "")
@@ -62,6 +63,7 @@ macro(__android_determine_compiler lang)
 
     # Save the Android-specific information in CMake${lang}Compiler.cmake.
     set(CMAKE_${lang}_COMPILER_CUSTOM_CODE "
+set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG \"${_ANDROID_TOOL_NDK_TOOLCHAIN_HOST_TAG}\")
 set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION \"${_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION}\")
 set(CMAKE_${lang}_ANDROID_TOOLCHAIN_VERSION \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_VERSION}\")
 set(CMAKE_${lang}_COMPILER_EXTERNAL_TOOLCHAIN \"${_ANDROID_TOOL_${lang}_COMPILER_EXTERNAL_TOOLCHAIN}\")

+ 8 - 0
Tests/RunCMake/Android/common.cmake

@@ -32,6 +32,14 @@ if(CMAKE_ANDROID_NDK)
       "which does not appear in CMAKE_C_COMPILER:\n"
       "  ${CMAKE_C_COMPILER}")
   endif()
+  if(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG)
+    message(SEND_ERROR "CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG is not set!")
+  elseif(NOT "${CMAKE_C_COMPILER}" MATCHES "prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin")
+    message(SEND_ERROR "CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG is\n"
+      "  ${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}\n"
+      "which does not appear in CMAKE_C_COMPILER:\n"
+      "  ${CMAKE_C_COMPILER}")
+  endif()
 elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
   execute_process(
     COMMAND ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang --version