Merge branch 'backport-android-info-variables' into release
This commit is contained in:
commit
9fd9fd9861
|
@ -387,7 +387,7 @@ Configure use of an Android NDK with the following variables:
|
|||
|
||||
:variable:`CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION`
|
||||
Set to the version of the NDK toolchain to be selected as the compiler.
|
||||
If not specified, the latest available GCC toolchain will be used.
|
||||
If not specified, the default will be the latest available GCC toolchain.
|
||||
|
||||
:variable:`CMAKE_ANDROID_STL_TYPE`
|
||||
Set to specify which C++ standard library to use. If not specified,
|
||||
|
|
|
@ -241,6 +241,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
|
||||
|
@ -350,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
|
||||
|
|
|
@ -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.
|
|
@ -11,3 +11,6 @@ as the compiler. The variable must be set to one of these forms:
|
|||
|
||||
A toolchain of the requested version will be selected automatically to
|
||||
match the ABI named in the :variable:`CMAKE_ANDROID_ARCH_ABI` variable.
|
||||
|
||||
If not specified, the default will be a value that selects the latest
|
||||
available GCC toolchain.
|
||||
|
|
|
@ -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`.
|
|
@ -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::
|
||||
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -52,6 +52,7 @@ unset(_ANDROID_CONFIG_MK_PATTERNS)
|
|||
# Find the newest toolchain version matching the ABI.
|
||||
set(_ANDROID_TOOL_NAME "")
|
||||
set(_ANDROID_TOOL_VERS 0)
|
||||
set(_ANDROID_TOOL_VERS_NDK "")
|
||||
set(_ANDROID_TOOL_SETUP_MK "")
|
||||
foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS)
|
||||
# Check that the toolchain matches the ABI.
|
||||
|
@ -62,18 +63,21 @@ foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS)
|
|||
unset(_ANDROID_TOOL_ABIS)
|
||||
|
||||
# Check the version.
|
||||
if("${config_mk}" MATCHES [[/([^/]+-(clang)?([0-9]\.[0-9]|))/config.mk$]])
|
||||
if("${config_mk}" MATCHES [[/([^/]+-((clang)?([0-9]\.[0-9]|)))/config.mk$]])
|
||||
set(_ANDROID_CUR_NAME "${CMAKE_MATCH_1}")
|
||||
set(_ANDROID_CUR_VERS "${CMAKE_MATCH_3}")
|
||||
set(_ANDROID_CUR_VERS "${CMAKE_MATCH_4}")
|
||||
set(_ANDROID_CUR_VERS_NDK "${CMAKE_MATCH_2}")
|
||||
if(_ANDROID_TOOL_VERS STREQUAL "")
|
||||
# already the latest possible
|
||||
elseif(_ANDROID_CUR_VERS STREQUAL "" OR _ANDROID_CUR_VERS VERSION_GREATER _ANDROID_TOOL_VERS)
|
||||
set(_ANDROID_TOOL_NAME "${_ANDROID_CUR_NAME}")
|
||||
set(_ANDROID_TOOL_VERS "${_ANDROID_CUR_VERS}")
|
||||
set(_ANDROID_TOOL_VERS_NDK "${_ANDROID_CUR_VERS_NDK}")
|
||||
string(REPLACE "/config.mk" "/setup.mk" _ANDROID_TOOL_SETUP_MK "${config_mk}")
|
||||
endif()
|
||||
unset(_ANDROID_CUR_TOOL)
|
||||
unset(_ANDROID_CUR_VERS)
|
||||
unset(_ANDROID_CUR_VERS_NDK)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
@ -206,10 +210,17 @@ 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}")
|
||||
|
||||
# _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}")
|
||||
|
@ -231,6 +242,7 @@ endif()
|
|||
if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
|
||||
message(STATUS "_ANDROID_TOOL_NAME=${_ANDROID_TOOL_NAME}")
|
||||
message(STATUS "_ANDROID_TOOL_VERS=${_ANDROID_TOOL_VERS}")
|
||||
message(STATUS "_ANDROID_TOOL_VERS_NDK=${_ANDROID_TOOL_VERS_NDK}")
|
||||
message(STATUS "_ANDROID_TOOL_PREFIX=${_ANDROID_TOOL_PREFIX}")
|
||||
message(STATUS "_ANDROID_TOOL_CLANG_NAME=${_ANDROID_TOOL_CLANG_NAME}")
|
||||
message(STATUS "_ANDROID_TOOL_CLANG_VERS=${_ANDROID_TOOL_CLANG_VERS}")
|
||||
|
@ -239,6 +251,7 @@ endif()
|
|||
|
||||
unset(_ANDROID_TOOL_NAME)
|
||||
unset(_ANDROID_TOOL_VERS)
|
||||
unset(_ANDROID_TOOL_VERS_NDK)
|
||||
unset(_ANDROID_TOOL_PREFIX)
|
||||
unset(_ANDROID_TOOL_CLANG_NAME)
|
||||
unset(_ANDROID_TOOL_CLANG_VERS)
|
||||
|
|
|
@ -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}")
|
||||
|
@ -57,3 +61,6 @@ else()
|
|||
set(_ANDROID_TOOL_CXX_COMPILER "${_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX}g++${_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX}")
|
||||
set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
|
||||
endif()
|
||||
|
||||
set(_ANDROID_TOOL_NDK_TOOLCHAIN_HOST_TAG "")
|
||||
set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "")
|
||||
|
|
|
@ -40,12 +40,16 @@ 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_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 "")
|
||||
|
@ -61,6 +65,9 @@ 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_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}\")
|
||||
|
|
|
@ -22,8 +22,23 @@ string(APPEND CMAKE_CXX_FLAGS " -Werror -Wno-attributes")
|
|||
string(APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-no-undefined")
|
||||
|
||||
if(CMAKE_ANDROID_NDK)
|
||||
if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION MATCHES "clang")
|
||||
if(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION)
|
||||
message(SEND_ERROR "CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION is not set!")
|
||||
elseif(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION MATCHES "^clang")
|
||||
add_definitions(-DCOMPILER_IS_CLANG)
|
||||
elseif(NOT "${CMAKE_C_COMPILER}" MATCHES "toolchains/[^/]+-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}/prebuilt")
|
||||
message(SEND_ERROR "CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION is\n"
|
||||
" ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}\n"
|
||||
"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(
|
||||
|
@ -37,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")
|
||||
|
|
Loading…
Reference in New Issue