Browse Source

Android: Add CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE

Expose the binutils' machine name (typically used as a prefix on the
tool names) publicly.  This is expected to match the `gcc -dumpmachine`
value.

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

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

@@ -351,6 +351,7 @@ Variables for Languages
    /variable/CMAKE_Fortran_MODDIR_FLAG
    /variable/CMAKE_Fortran_MODOUT_FLAG
    /variable/CMAKE_INTERNAL_PLATFORM_ABI
+   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE
    /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX
    /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX
    /variable/CMAKE_LANG_ARCHIVE_APPEND

+ 9 - 0
Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst

@@ -0,0 +1,9 @@
+CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE
+--------------------------------------
+
+When :ref:`Cross Compiling for Android` this variable contains the
+toolchain binutils machine name (e.g. ``gcc -dumpmachine``).  The
+binutils typically have a ``<machine>-`` prefix on their name.
+
+See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
+and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`.

+ 2 - 1
Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst

@@ -4,7 +4,8 @@ CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX
 When :ref:`Cross Compiling for Android` this variable contains the absolute
 path prefixing the toolchain GNU compiler and its binutils.
 
-See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`.
+See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
+and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE`.
 
 For example, the path to the linker is::
 

+ 2 - 1
Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst

@@ -4,4 +4,5 @@ CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX
 When :ref:`Cross Compiling for Android` this variable contains the
 host platform suffix of the toolchain GNU compiler and its binutils.
 
-See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`.
+See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
+and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE`.

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

@@ -213,10 +213,14 @@ 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}")
 
+# _ANDROID_TOOL_PREFIX should now match `gcc -dumpmachine`.
+string(REGEX REPLACE "-$" "" _ANDROID_TOOL_C_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_PREFIX}")
+
 set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS}")
 set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_NAME}/prebuilt/${_ANDROID_HOST_DIR}/bin/${_ANDROID_TOOL_PREFIX}")
 set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
 
+set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_C_TOOLCHAIN_MACHINE}")
 set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "${_ANDROID_TOOL_C_TOOLCHAIN_VERSION}")
 set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_C_TOOLCHAIN_PREFIX}")
 set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "${_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX}")

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

@@ -22,6 +22,9 @@ endif()
 # Help CMakeFindBinUtils locate things.
 set(_CMAKE_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_PREFIX}")
 
+# _ANDROID_TOOL_PREFIX should now match `gcc -dumpmachine`.
+string(REGEX REPLACE "-$" "" _ANDROID_TOOL_C_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_PREFIX}")
+
 execute_process(
   COMMAND "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/${_ANDROID_TOOL_PREFIX}gcc${_ANDROID_HOST_EXT}" -dumpversion
   OUTPUT_VARIABLE _gcc_version
@@ -42,6 +45,7 @@ endif()
 set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/${_ANDROID_TOOL_PREFIX}")
 set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
 
+set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_C_TOOLCHAIN_MACHINE}")
 set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "${_ANDROID_TOOL_C_TOOLCHAIN_VERSION}")
 set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_C_TOOLCHAIN_PREFIX}")
 set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "${_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX}")

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

@@ -43,11 +43,13 @@ else()
   set(_ANDROID_TOOL_NDK_TOOLCHAIN_HOST_TAG "")
   set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "")
   set(_ANDROID_TOOL_C_COMPILER "")
+  set(_ANDROID_TOOL_C_TOOLCHAIN_MACHINE "")
   set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "")
   set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN "")
   set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "")
   set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "")
   set(_ANDROID_TOOL_CXX_COMPILER "")
+  set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "")
   set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "")
   set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
   set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "")
@@ -65,6 +67,7 @@ macro(__android_determine_compiler lang)
     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_MACHINE \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_MACHINE}\")
 set(CMAKE_${lang}_ANDROID_TOOLCHAIN_VERSION \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_VERSION}\")
 set(CMAKE_${lang}_COMPILER_EXTERNAL_TOOLCHAIN \"${_ANDROID_TOOL_${lang}_COMPILER_EXTERNAL_TOOLCHAIN}\")
 set(CMAKE_${lang}_ANDROID_TOOLCHAIN_PREFIX \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_PREFIX}\")

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

@@ -52,6 +52,23 @@ elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
   endif()
 endif()
 
+execute_process(
+  COMMAND "${CMAKE_C_ANDROID_TOOLCHAIN_PREFIX}gcc${CMAKE_C_ANDROID_TOOLCHAIN_SUFFIX}" -dumpmachine
+  OUTPUT_VARIABLE _out OUTPUT_STRIP_TRAILING_WHITESPACE
+  ERROR_VARIABLE _err
+  RESULT_VARIABLE _res
+  )
+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}")
+  message(SEND_ERROR "'gcc -dumpmachine' produced:\n"
+    " ${_out}\n"
+    "which is not equal to CMAKE_C_ANDROID_TOOLCHAIN_MACHINE:\n"
+    " ${CMAKE_C_ANDROID_TOOLCHAIN_MACHINE}"
+    )
+endif()
+
 if(CMAKE_ANDROID_STL_TYPE STREQUAL "none")
   add_definitions(-DSTL_NONE)
 elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "system")