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_COMPILER_CLANG) 6 return() 7endif() 8set(__ANDROID_COMPILER_CLANG 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/Android-Clang.cmake OPTIONAL) 14endif() 15 16# Load flags from NDK. This file may provides the following variables: 17# _ANDROID_NDK_INIT_CFLAGS 18# _ANDROID_NDK_INIT_CFLAGS_DEBUG 19# _ANDROID_NDK_INIT_CFLAGS_RELEASE 20# _ANDROID_NDK_INIT_LDFLAGS 21# _ANDROID_NDK_INIT_LDFLAGS_EXE 22if(CMAKE_ANDROID_NDK) 23 include(${CMAKE_ANDROID_NDK}/build/cmake/flags.cmake OPTIONAL 24 RESULT_VARIABLE _INCLUDED_FLAGS) 25endif() 26 27# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously 28# implemented in the CMake VS IDE generators. Avoid interfering with 29# that functionality for now. Later we may try to integrate this. 30if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android") 31 macro(__android_compiler_clang lang) 32 endmacro() 33 return() 34endif() 35 36# Commonly used Android toolchain files that pre-date CMake upstream support 37# set CMAKE_SYSTEM_VERSION to 1. Avoid interfering with them. 38if(CMAKE_SYSTEM_VERSION EQUAL 1) 39 macro(__android_compiler_clang lang) 40 endmacro() 41 return() 42endif() 43 44# Natively compiling on an Android host doesn't use the NDK cross-compilation 45# tools. 46if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android") 47 macro(__android_compiler_clang lang) 48 endmacro() 49 return() 50endif() 51 52include(Platform/Android-Common) 53 54if(_INCLUDED_FLAGS) 55 # NDK provides the flags. 56 set(_ANDROID_ABI_INIT_CFLAGS "${_ANDROID_NDK_INIT_CFLAGS}") 57 set(_ANDROID_ABI_INIT_CFLAGS_DEBUG "${_ANDROID_NDK_INIT_CFLAGS_DEBUG}") 58 set(_ANDROID_ABI_INIT_CFLAGS_RELEASE "${_ANDROID_NDK_INIT_CFLAGS_RELEASE}") 59 set(_ANDROID_ABI_INIT_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS}") 60 set(_ANDROID_ABI_INIT_EXE_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS_EXE}") 61else() 62 # The NDK toolchain configuration files at: 63 # 64 # <ndk>/[build/core/]toolchains/*-clang*/setup.mk 65 # 66 # contain logic to set LLVM_TRIPLE for Clang-based toolchains for each target. 67 # We need to produce the same target here to produce compatible binaries. 68 include(Platform/Android/abi-${CMAKE_ANDROID_ARCH_ABI}-Clang) 69endif() 70 71macro(__android_compiler_clang lang) 72 if(NOT "x${lang}" STREQUAL "xASM") 73 __android_compiler_common(${lang}) 74 endif() 75 if(NOT CMAKE_${lang}_COMPILER_TARGET) 76 set(CMAKE_${lang}_COMPILER_TARGET "${CMAKE_ANDROID_ARCH_LLVM_TRIPLE}") 77 if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED) 78 string(APPEND CMAKE_${lang}_COMPILER_TARGET "${CMAKE_SYSTEM_VERSION}") 79 endif() 80 list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}") 81 endif() 82 if(CMAKE_GENERATOR MATCHES "Visual Studio") 83 set(_ANDROID_STL_NOSTDLIBXX 1) 84 endif() 85endmacro() 86 87# Include the NDK hook. 88# It can be used by NDK to inject necessary fixes for an earlier cmake. 89if(CMAKE_ANDROID_NDK) 90 include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Clang.cmake OPTIONAL) 91endif() 92