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