1# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2# file Copyright.txt or https://cmake.org/licensing for details.
3
4# This module is shared by multiple languages; use include blocker.
5if(__ANDROID_DETERMINE_COMPILER)
6  return()
7endif()
8set(__ANDROID_DETERMINE_COMPILER 1)
9
10# Include the NDK hook.
11# It can be used by NDK to inject necessary fixes for an earlier cmake.
12if(CMAKE_ANDROID_NDK)
13  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Determine-Compiler.cmake OPTIONAL)
14endif()
15
16# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
17# implemented in the CMake VS IDE generators.  Avoid interfering with
18# that functionality for now.  Later we may try to integrate this.
19if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
20  macro(__android_determine_compiler lang)
21  endmacro()
22  return()
23endif()
24
25# Commonly used Android toolchain files that pre-date CMake upstream support
26# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
27if(CMAKE_SYSTEM_VERSION EQUAL 1)
28  macro(__android_determine_compiler lang)
29  endmacro()
30  return()
31endif()
32
33# Identify the host platform.
34if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
35  set(_ANDROID_HOST_EXT "")
36elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
37  set(_ANDROID_HOST_EXT "")
38elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
39  set(_ANDROID_HOST_EXT ".exe")
40elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
41  # Natively compiling on an Android host doesn't use the NDK cross-compilation
42  # tools.
43  macro(__android_determine_compiler lang)
44    # Do nothing
45  endmacro()
46  if(NOT CMAKE_CXX_COMPILER_NAMES)
47    set(CMAKE_CXX_COMPILER_NAMES c++)
48  endif()
49  return()
50else()
51  message(FATAL_ERROR "Android: Builds hosted on '${CMAKE_HOST_SYSTEM_NAME}' not supported.")
52endif()
53
54if(CMAKE_ANDROID_NDK)
55  include(Platform/Android/Determine-Compiler-NDK)
56elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
57  include(Platform/Android/Determine-Compiler-Standalone)
58else()
59  set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "")
60  set(_ANDROID_TOOL_C_COMPILER "")
61  set(_ANDROID_TOOL_C_TOOLCHAIN_MACHINE "")
62  set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "")
63  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN "")
64  set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "")
65  set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "")
66  set(_ANDROID_TOOL_CXX_COMPILER "")
67  set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "")
68  set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "")
69  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
70  set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "")
71  set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "")
72endif()
73
74unset(_ANDROID_HOST_EXT)
75
76macro(__android_determine_compiler lang)
77  if(_ANDROID_TOOL_${lang}_COMPILER)
78    set(CMAKE_${lang}_COMPILER "${_ANDROID_TOOL_${lang}_COMPILER}")
79    set(CMAKE_${lang}_COMPILER_EXTERNAL_TOOLCHAIN "${_ANDROID_TOOL_${lang}_COMPILER_EXTERNAL_TOOLCHAIN}")
80
81    # Save the Android-specific information in CMake${lang}Compiler.cmake.
82    set(CMAKE_${lang}_COMPILER_CUSTOM_CODE "
83set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION \"${_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION}\")
84set(CMAKE_${lang}_ANDROID_TOOLCHAIN_MACHINE \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_MACHINE}\")
85set(CMAKE_${lang}_ANDROID_TOOLCHAIN_VERSION \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_VERSION}\")
86set(CMAKE_${lang}_COMPILER_EXTERNAL_TOOLCHAIN \"${_ANDROID_TOOL_${lang}_COMPILER_EXTERNAL_TOOLCHAIN}\")
87set(CMAKE_${lang}_ANDROID_TOOLCHAIN_PREFIX \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_PREFIX}\")
88set(CMAKE_${lang}_ANDROID_TOOLCHAIN_SUFFIX \"${_ANDROID_TOOL_${lang}_TOOLCHAIN_SUFFIX}\")
89")
90  endif()
91endmacro()
92
93# Include the NDK hook.
94# It can be used by NDK to inject necessary fixes for an earlier cmake.
95if(CMAKE_ANDROID_NDK)
96  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Determine-Compiler.cmake OPTIONAL)
97endif()
98