| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file LICENSE.rst or https://cmake.org/licensing for details. | |
| # This module is shared by multiple languages; use include blocker. | |
| if(__ANDROID_COMPILER_CLANG) | |
| return() | |
| endif() | |
| set(__ANDROID_COMPILER_CLANG 1) | |
| # Include the NDK hook. | |
| # It can be used by NDK to inject necessary fixes for an earlier cmake. | |
| if(CMAKE_ANDROID_NDK) | |
| include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Clang.cmake OPTIONAL) | |
| endif() | |
| # Load flags from NDK. This file may provides the following variables: | |
| # _ANDROID_NDK_INIT_CFLAGS | |
| # _ANDROID_NDK_INIT_CFLAGS_DEBUG | |
| # _ANDROID_NDK_INIT_CFLAGS_RELEASE | |
| # _ANDROID_NDK_INIT_LDFLAGS | |
| # _ANDROID_NDK_INIT_LDFLAGS_EXE | |
| if(CMAKE_ANDROID_NDK) | |
| include(${CMAKE_ANDROID_NDK}/build/cmake/flags.cmake OPTIONAL | |
| RESULT_VARIABLE _INCLUDED_FLAGS) | |
| endif() | |
| # Support for NVIDIA Nsight Tegra Visual Studio Edition was previously | |
| # implemented in the CMake VS IDE generators. Avoid interfering with | |
| # that functionality for now. Later we may try to integrate this. | |
| if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android") | |
| macro(__android_compiler_clang lang) | |
| endmacro() | |
| return() | |
| endif() | |
| # Commonly used Android toolchain files that pre-date CMake upstream support | |
| # set CMAKE_SYSTEM_VERSION to 1. Avoid interfering with them. | |
| if(CMAKE_SYSTEM_VERSION EQUAL 1) | |
| macro(__android_compiler_clang lang) | |
| endmacro() | |
| return() | |
| endif() | |
| # Natively compiling on an Android host doesn't use the NDK cross-compilation | |
| # tools. | |
| if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android") | |
| macro(__android_compiler_clang lang) | |
| endmacro() | |
| return() | |
| endif() | |
| include(Platform/Android-Common) | |
| if(_INCLUDED_FLAGS) | |
| # NDK provides the flags. | |
| set(_ANDROID_ABI_INIT_CFLAGS "${_ANDROID_NDK_INIT_CFLAGS}") | |
| set(_ANDROID_ABI_INIT_CFLAGS_DEBUG "${_ANDROID_NDK_INIT_CFLAGS_DEBUG}") | |
| set(_ANDROID_ABI_INIT_CFLAGS_RELEASE "${_ANDROID_NDK_INIT_CFLAGS_RELEASE}") | |
| set(_ANDROID_ABI_INIT_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS}") | |
| set(_ANDROID_ABI_INIT_EXE_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS_EXE}") | |
| else() | |
| # The NDK toolchain configuration files at: | |
| # | |
| # <ndk>/[build/core/]toolchains/*-clang*/setup.mk | |
| # | |
| # contain logic to set LLVM_TRIPLE for Clang-based toolchains for each target. | |
| # We need to produce the same target here to produce compatible binaries. | |
| include(Platform/Android/abi-${CMAKE_ANDROID_ARCH_ABI}-Clang) | |
| endif() | |
| macro(__android_compiler_clang lang) | |
| if(NOT "x${lang}" STREQUAL "xASM") | |
| __android_compiler_common(${lang}) | |
| endif() | |
| if(NOT CMAKE_${lang}_COMPILER_TARGET) | |
| set(CMAKE_${lang}_COMPILER_TARGET "${CMAKE_ANDROID_ARCH_LLVM_TRIPLE}") | |
| if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED) | |
| string(APPEND CMAKE_${lang}_COMPILER_TARGET "${CMAKE_SYSTEM_VERSION}") | |
| endif() | |
| if("${lang}" STREQUAL "CXX") | |
| list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}") | |
| endif() | |
| endif() | |
| if(CMAKE_GENERATOR MATCHES "Visual Studio") | |
| set(_ANDROID_STL_NOSTDLIBXX 1) | |
| endif() | |
| endmacro() | |
| # Include the NDK hook. | |
| # It can be used by NDK to inject necessary fixes for an earlier cmake. | |
| if(CMAKE_ANDROID_NDK) | |
| include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Clang.cmake OPTIONAL) | |
| endif() |