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