| Alexey Samsonov | 819045c | 2015-02-25 23:07:32 +0000 | [diff] [blame] | 1 | include(CMakePushCheckState) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 2 | include(CheckCXXCompilerFlag) | 
| Alexey Samsonov | d964e7c | 2014-03-04 13:28:21 +0000 | [diff] [blame] | 3 | include(CheckLibraryExists) | 
| Alexey Samsonov | e3e2a11 | 2014-02-27 06:52:41 +0000 | [diff] [blame] | 4 | include(CheckSymbolExists) | 
| Alexey Samsonov | 54a0e40 | 2015-02-10 01:42:44 +0000 | [diff] [blame] | 5 | include(TestBigEndian) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 6 |  | 
| Evgeniy Stepanov | 9196090 | 2015-05-05 20:13:39 +0000 | [diff] [blame] | 7 | function(check_linker_flag flag out_var) | 
|  | 8 | cmake_push_check_state() | 
|  | 9 | set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") | 
|  | 10 | check_cxx_compiler_flag("" ${out_var}) | 
|  | 11 | cmake_pop_check_state() | 
|  | 12 | endfunction() | 
|  | 13 |  | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 14 | # CodeGen options. | 
|  | 15 | check_cxx_compiler_flag(-fPIC                COMPILER_RT_HAS_FPIC_FLAG) | 
| Alexey Samsonov | 878a9a5 | 2014-02-18 08:07:09 +0000 | [diff] [blame] | 16 | check_cxx_compiler_flag(-fPIE                COMPILER_RT_HAS_FPIE_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 17 | check_cxx_compiler_flag(-fno-builtin         COMPILER_RT_HAS_FNO_BUILTIN_FLAG) | 
|  | 18 | check_cxx_compiler_flag(-fno-exceptions      COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG) | 
|  | 19 | check_cxx_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG) | 
|  | 20 | check_cxx_compiler_flag(-funwind-tables      COMPILER_RT_HAS_FUNWIND_TABLES_FLAG) | 
|  | 21 | check_cxx_compiler_flag(-fno-stack-protector COMPILER_RT_HAS_FNO_STACK_PROTECTOR_FLAG) | 
| Peter Collingbourne | b64d0b1 | 2015-06-15 21:08:47 +0000 | [diff] [blame] | 22 | check_cxx_compiler_flag(-fno-sanitize=safe-stack COMPILER_RT_HAS_FNO_SANITIZE_SAFE_STACK_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 23 | check_cxx_compiler_flag(-fvisibility=hidden  COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG) | 
| Filipe Cabecinhas | b08c76f | 2016-03-05 10:01:04 +0000 | [diff] [blame] | 24 | check_cxx_compiler_flag(-frtti               COMPILER_RT_HAS_FRTTI_FLAG) | 
| Alexey Samsonov | b73db72 | 2014-02-18 07:52:40 +0000 | [diff] [blame] | 25 | check_cxx_compiler_flag(-fno-rtti            COMPILER_RT_HAS_FNO_RTTI_FLAG) | 
| Alexey Samsonov | 878a9a5 | 2014-02-18 08:07:09 +0000 | [diff] [blame] | 26 | check_cxx_compiler_flag(-ffreestanding       COMPILER_RT_HAS_FFREESTANDING_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 27 | check_cxx_compiler_flag("-Werror -fno-function-sections" COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG) | 
| Alexey Samsonov | bcce197 | 2014-03-18 12:49:22 +0000 | [diff] [blame] | 28 | check_cxx_compiler_flag(-std=c++11           COMPILER_RT_HAS_STD_CXX11_FLAG) | 
| Alexey Samsonov | 56b6ee9 | 2014-04-01 13:16:30 +0000 | [diff] [blame] | 29 | check_cxx_compiler_flag(-ftls-model=initial-exec COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC) | 
| Rafael Espindola | 0dfd240 | 2014-12-31 18:20:52 +0000 | [diff] [blame] | 30 | check_cxx_compiler_flag(-fno-lto             COMPILER_RT_HAS_FNO_LTO_FLAG) | 
| Sumanth Gundapaneni | dbb8a1d | 2015-12-09 22:26:38 +0000 | [diff] [blame] | 31 | check_cxx_compiler_flag("-Werror -msse3" COMPILER_RT_HAS_MSSE3_FLAG) | 
| George Burgess IV | 362352c | 2015-11-20 05:02:08 +0000 | [diff] [blame] | 32 | check_cxx_compiler_flag(-std=c99             COMPILER_RT_HAS_STD_C99_FLAG) | 
| Alexey Samsonov | d20a130 | 2015-12-07 23:21:36 +0000 | [diff] [blame] | 33 | check_cxx_compiler_flag(--sysroot=.          COMPILER_RT_HAS_SYSROOT_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 34 |  | 
| Chris Bieneman | 9b6d4ff | 2015-11-30 17:42:30 +0000 | [diff] [blame] | 35 | if(NOT WIN32 AND NOT CYGWIN) | 
|  | 36 | # MinGW warns if -fvisibility-inlines-hidden is used. | 
|  | 37 | check_cxx_compiler_flag("-fvisibility-inlines-hidden" COMPILER_RT_HAS_FVISIBILITY_INLINES_HIDDEN_FLAG) | 
| Chris Bieneman | 9b6d4ff | 2015-11-30 17:42:30 +0000 | [diff] [blame] | 38 | endif() | 
|  | 39 |  | 
| Alexey Samsonov | b73db72 | 2014-02-18 07:52:40 +0000 | [diff] [blame] | 40 | check_cxx_compiler_flag(/GR COMPILER_RT_HAS_GR_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 41 | check_cxx_compiler_flag(/GS COMPILER_RT_HAS_GS_FLAG) | 
|  | 42 | check_cxx_compiler_flag(/MT COMPILER_RT_HAS_MT_FLAG) | 
|  | 43 | check_cxx_compiler_flag(/Oy COMPILER_RT_HAS_Oy_FLAG) | 
|  | 44 |  | 
|  | 45 | # Debug info flags. | 
|  | 46 | check_cxx_compiler_flag(-gline-tables-only COMPILER_RT_HAS_GLINE_TABLES_ONLY_FLAG) | 
|  | 47 | check_cxx_compiler_flag(-g COMPILER_RT_HAS_G_FLAG) | 
|  | 48 | check_cxx_compiler_flag(/Zi COMPILER_RT_HAS_Zi_FLAG) | 
| Alexey Samsonov | c91ffd2 | 2015-02-02 20:37:25 +0000 | [diff] [blame] | 49 |  | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 50 | # Warnings. | 
| Alexey Samsonov | 4a7e96e | 2014-03-06 12:25:02 +0000 | [diff] [blame] | 51 | check_cxx_compiler_flag(-Wall COMPILER_RT_HAS_WALL_FLAG) | 
| Alexey Samsonov | a2fee5d | 2014-02-24 11:32:49 +0000 | [diff] [blame] | 52 | check_cxx_compiler_flag(-Werror COMPILER_RT_HAS_WERROR_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 53 | check_cxx_compiler_flag("-Werror -Wframe-larger-than=512" COMPILER_RT_HAS_WFRAME_LARGER_THAN_FLAG) | 
|  | 54 | check_cxx_compiler_flag("-Werror -Wglobal-constructors"   COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG) | 
| Alexey Samsonov | 829da45 | 2014-11-13 21:19:53 +0000 | [diff] [blame] | 55 | check_cxx_compiler_flag("-Werror -Wc99-extensions"     COMPILER_RT_HAS_WC99_EXTENSIONS_FLAG) | 
|  | 56 | check_cxx_compiler_flag("-Werror -Wgnu"                COMPILER_RT_HAS_WGNU_FLAG) | 
|  | 57 | check_cxx_compiler_flag("-Werror -Wnon-virtual-dtor"   COMPILER_RT_HAS_WNON_VIRTUAL_DTOR_FLAG) | 
|  | 58 | check_cxx_compiler_flag("-Werror -Wvariadic-macros"    COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 59 |  | 
| Alexey Samsonov | fe7e28c | 2014-03-13 11:31:10 +0000 | [diff] [blame] | 60 | check_cxx_compiler_flag(/W3 COMPILER_RT_HAS_W3_FLAG) | 
| Alexey Samsonov | a2fee5d | 2014-02-24 11:32:49 +0000 | [diff] [blame] | 61 | check_cxx_compiler_flag(/WX COMPILER_RT_HAS_WX_FLAG) | 
| Aaron Ballman | 1d1f232 | 2014-10-23 20:39:58 +0000 | [diff] [blame] | 62 | check_cxx_compiler_flag(/wd4146 COMPILER_RT_HAS_WD4146_FLAG) | 
|  | 63 | check_cxx_compiler_flag(/wd4291 COMPILER_RT_HAS_WD4291_FLAG) | 
| Timur Iskhodzhanov | 4703047 | 2014-08-26 12:33:00 +0000 | [diff] [blame] | 64 | check_cxx_compiler_flag(/wd4391 COMPILER_RT_HAS_WD4391_FLAG) | 
| Alexey Samsonov | 9a1ffce | 2014-02-18 07:26:58 +0000 | [diff] [blame] | 65 | check_cxx_compiler_flag(/wd4722 COMPILER_RT_HAS_WD4722_FLAG) | 
| Aaron Ballman | 1d1f232 | 2014-10-23 20:39:58 +0000 | [diff] [blame] | 66 | check_cxx_compiler_flag(/wd4800 COMPILER_RT_HAS_WD4800_FLAG) | 
| Alexey Samsonov | e3e2a11 | 2014-02-27 06:52:41 +0000 | [diff] [blame] | 67 |  | 
|  | 68 | # Symbols. | 
|  | 69 | check_symbol_exists(__func__ "" COMPILER_RT_HAS_FUNC_SYMBOL) | 
| Alexey Samsonov | d964e7c | 2014-03-04 13:28:21 +0000 | [diff] [blame] | 70 |  | 
|  | 71 | # Libraries. | 
| Evgeniy Stepanov | 2ad0192 | 2015-12-10 00:47:50 +0000 | [diff] [blame] | 72 | check_library_exists(c fopen "" COMPILER_RT_HAS_LIBC) | 
| Alexey Samsonov | d964e7c | 2014-03-04 13:28:21 +0000 | [diff] [blame] | 73 | check_library_exists(dl dlopen "" COMPILER_RT_HAS_LIBDL) | 
| Evgeniy Stepanov | 8e9c70b | 2015-05-29 22:31:28 +0000 | [diff] [blame] | 74 | check_library_exists(rt shm_open "" COMPILER_RT_HAS_LIBRT) | 
| Timur Iskhodzhanov | f2d2447 | 2014-08-22 12:26:34 +0000 | [diff] [blame] | 75 | check_library_exists(m pow "" COMPILER_RT_HAS_LIBM) | 
| Alexey Samsonov | d964e7c | 2014-03-04 13:28:21 +0000 | [diff] [blame] | 76 | check_library_exists(pthread pthread_create "" COMPILER_RT_HAS_LIBPTHREAD) | 
| Timur Iskhodzhanov | f2d2447 | 2014-08-22 12:26:34 +0000 | [diff] [blame] | 77 | check_library_exists(stdc++ __cxa_throw "" COMPILER_RT_HAS_LIBSTDCXX) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 78 |  | 
| Evgeniy Stepanov | 9196090 | 2015-05-05 20:13:39 +0000 | [diff] [blame] | 79 | # Linker flags. | 
|  | 80 | if(ANDROID) | 
|  | 81 | check_linker_flag("-Wl,-z,global" COMPILER_RT_HAS_Z_GLOBAL) | 
| Evgeniy Stepanov | 7fb865e | 2015-07-24 19:00:16 +0000 | [diff] [blame] | 82 | check_library_exists(log __android_log_write "" COMPILER_RT_HAS_LIBLOG) | 
| Evgeniy Stepanov | 9196090 | 2015-05-05 20:13:39 +0000 | [diff] [blame] | 83 | endif() | 
|  | 84 |  | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 85 | # Architectures. | 
|  | 86 |  | 
|  | 87 | # List of all architectures we can target. | 
|  | 88 | set(COMPILER_RT_SUPPORTED_ARCH) | 
|  | 89 |  | 
|  | 90 | # Try to compile a very simple source file to ensure we can target the given | 
|  | 91 | # platform. We use the results of these tests to build only the various target | 
|  | 92 | # runtime libraries supported by our current compilers cross-compiling | 
|  | 93 | # abilities. | 
|  | 94 | set(SIMPLE_SOURCE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/simple.cc) | 
|  | 95 | file(WRITE ${SIMPLE_SOURCE} "#include <stdlib.h>\n#include <limits>\nint main() {}\n") | 
|  | 96 |  | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 97 | # Add $arch as supported with no additional flags. | 
|  | 98 | macro(add_default_target_arch arch) | 
|  | 99 | set(TARGET_${arch}_CFLAGS "") | 
|  | 100 | set(CAN_TARGET_${arch} 1) | 
|  | 101 | list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) | 
|  | 102 | endmacro() | 
|  | 103 |  | 
|  | 104 | macro(detect_target_arch) | 
|  | 105 | check_symbol_exists(__arm__ "" __ARM) | 
|  | 106 | check_symbol_exists(__aarch64__ "" __AARCH64) | 
|  | 107 | check_symbol_exists(__x86_64__ "" __X86_64) | 
| Evgeniy Stepanov | 0f7ab59 | 2014-10-01 12:55:06 +0000 | [diff] [blame] | 108 | check_symbol_exists(__i686__ "" __I686) | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 109 | check_symbol_exists(__i386__ "" __I386) | 
|  | 110 | check_symbol_exists(__mips__ "" __MIPS) | 
|  | 111 | check_symbol_exists(__mips64__ "" __MIPS64) | 
| Dan Gohman | 746cd84 | 2016-01-13 16:56:15 +0000 | [diff] [blame] | 112 | check_symbol_exists(__wasm32__ "" __WEBASSEMBLY32) | 
|  | 113 | check_symbol_exists(__wasm64__ "" __WEBASSEMBLY64) | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 114 | if(__ARM) | 
|  | 115 | add_default_target_arch(arm) | 
|  | 116 | elseif(__AARCH64) | 
|  | 117 | add_default_target_arch(aarch64) | 
|  | 118 | elseif(__X86_64) | 
|  | 119 | add_default_target_arch(x86_64) | 
| Evgeniy Stepanov | 0f7ab59 | 2014-10-01 12:55:06 +0000 | [diff] [blame] | 120 | elseif(__I686) | 
|  | 121 | add_default_target_arch(i686) | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 122 | elseif(__I386) | 
|  | 123 | add_default_target_arch(i386) | 
|  | 124 | elseif(__MIPS64) # must be checked before __MIPS | 
|  | 125 | add_default_target_arch(mips64) | 
|  | 126 | elseif(__MIPS) | 
|  | 127 | add_default_target_arch(mips) | 
| Dan Gohman | 746cd84 | 2016-01-13 16:56:15 +0000 | [diff] [blame] | 128 | elseif(__WEBASSEMBLY32) | 
|  | 129 | add_default_target_arch(wasm32) | 
|  | 130 | elseif(__WEBASSEMBLY64) | 
|  | 131 | add_default_target_arch(wasm64) | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 132 | endif() | 
|  | 133 | endmacro() | 
|  | 134 |  | 
| Alexey Samsonov | 807f1b5 | 2015-01-29 21:32:34 +0000 | [diff] [blame] | 135 | # Detect whether the current target platform is 32-bit or 64-bit, and setup | 
|  | 136 | # the correct commandline flags needed to attempt to target 32-bit and 64-bit. | 
|  | 137 | if (NOT CMAKE_SIZEOF_VOID_P EQUAL 4 AND | 
|  | 138 | NOT CMAKE_SIZEOF_VOID_P EQUAL 8) | 
|  | 139 | message(FATAL_ERROR "Please use architecture with 4 or 8 byte pointers.") | 
|  | 140 | endif() | 
|  | 141 |  | 
| Reid Kleckner | 747dc2e | 2016-03-30 18:31:14 +0000 | [diff] [blame] | 142 | # Find and run MSVC (not clang-cl) and get its version. This will tell clang-cl | 
|  | 143 | # what version of MSVC to pretend to be so that the STL works. | 
|  | 144 | set(MSVC_VERSION_FLAG "") | 
|  | 145 | if (MSVC) | 
|  | 146 | # Find and run MSVC (not clang-cl) and get its version. This will tell | 
|  | 147 | # clang-cl what version of MSVC to pretend to be so that the STL works. | 
|  | 148 | execute_process(COMMAND "$ENV{VSINSTALLDIR}/VC/bin/cl.exe" | 
|  | 149 | OUTPUT_QUIET | 
|  | 150 | ERROR_VARIABLE MSVC_COMPAT_VERSION | 
|  | 151 | ) | 
|  | 152 | string(REGEX REPLACE "^.*Compiler Version ([0-9.]+) for .*$" "\\1" | 
|  | 153 | MSVC_COMPAT_VERSION "${MSVC_COMPAT_VERSION}") | 
|  | 154 | if (MSVC_COMPAT_VERSION MATCHES "^[0-9].+$") | 
|  | 155 | set(MSVC_VERSION_FLAG "-fms-compatibility-version=${MSVC_COMPAT_VERSION}") | 
|  | 156 | # Add this flag into the host build if this is clang-cl. | 
|  | 157 | if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") | 
|  | 158 | append("${MSVC_VERSION_FLAG}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) | 
|  | 159 | endif() | 
|  | 160 | endif() | 
|  | 161 | endif() | 
|  | 162 |  | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 163 | # Generate the COMPILER_RT_SUPPORTED_ARCH list. | 
|  | 164 | if(ANDROID) | 
| Alexey Samsonov | 0d0200d | 2015-09-08 22:48:35 +0000 | [diff] [blame] | 165 | # Examine compiler output to determine target architecture. | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 166 | detect_target_arch() | 
|  | 167 | set(COMPILER_RT_OS_SUFFIX "-android") | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 168 | elseif(NOT APPLE) # Supported archs for Apple platforms are generated later | 
| Alexey Samsonov | 63eaeca | 2015-09-08 23:13:47 +0000 | [diff] [blame] | 169 | if("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "i[2-6]86|x86|amd64") | 
| Alexey Samsonov | 807f1b5 | 2015-01-29 21:32:34 +0000 | [diff] [blame] | 170 | if(NOT MSVC) | 
| Alexey Samsonov | 819045c | 2015-02-25 23:07:32 +0000 | [diff] [blame] | 171 | test_target_arch(x86_64 "" "-m64") | 
| Alexey Samsonov | 655bd02 | 2015-02-27 00:07:04 +0000 | [diff] [blame] | 172 | # FIXME: We build runtimes for both i686 and i386, as "clang -m32" may | 
|  | 173 | # target different variant than "$CMAKE_C_COMPILER -m32". This part should | 
|  | 174 | # be gone after we resolve PR14109. | 
| Nico Weber | e099213 | 2015-07-30 03:41:05 +0000 | [diff] [blame] | 175 | test_target_arch(i686 __i686__ "-m32") | 
| Alexey Samsonov | 655bd02 | 2015-02-27 00:07:04 +0000 | [diff] [blame] | 176 | test_target_arch(i386 __i386__ "-m32") | 
| Alexey Samsonov | 807f1b5 | 2015-01-29 21:32:34 +0000 | [diff] [blame] | 177 | else() | 
| Peter Collingbourne | d3b9917 | 2015-07-02 01:44:34 +0000 | [diff] [blame] | 178 | if (CMAKE_SIZEOF_VOID_P EQUAL 4) | 
| Reid Kleckner | 747dc2e | 2016-03-30 18:31:14 +0000 | [diff] [blame] | 179 | test_target_arch(i386 "" "${MSVC_VERSION_FLAG}") | 
| Peter Collingbourne | d3b9917 | 2015-07-02 01:44:34 +0000 | [diff] [blame] | 180 | else() | 
| Reid Kleckner | 747dc2e | 2016-03-30 18:31:14 +0000 | [diff] [blame] | 181 | test_target_arch(x86_64 "" "${MSVC_VERSION_FLAG}") | 
| Peter Collingbourne | d3b9917 | 2015-07-02 01:44:34 +0000 | [diff] [blame] | 182 | endif() | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 183 | endif() | 
| Alexey Samsonov | 63eaeca | 2015-09-08 23:13:47 +0000 | [diff] [blame] | 184 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "powerpc") | 
| Alexey Samsonov | 54a0e40 | 2015-02-10 01:42:44 +0000 | [diff] [blame] | 185 | TEST_BIG_ENDIAN(HOST_IS_BIG_ENDIAN) | 
|  | 186 | if(HOST_IS_BIG_ENDIAN) | 
| Alexey Samsonov | 819045c | 2015-02-25 23:07:32 +0000 | [diff] [blame] | 187 | test_target_arch(powerpc64 "" "-m64") | 
| Alexey Samsonov | 54a0e40 | 2015-02-10 01:42:44 +0000 | [diff] [blame] | 188 | else() | 
| Alexey Samsonov | 819045c | 2015-02-25 23:07:32 +0000 | [diff] [blame] | 189 | test_target_arch(powerpc64le "" "-m64") | 
| Alexey Samsonov | 54a0e40 | 2015-02-10 01:42:44 +0000 | [diff] [blame] | 190 | endif() | 
| Alexey Samsonov | 63eaeca | 2015-09-08 23:13:47 +0000 | [diff] [blame] | 191 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "mipsel|mips64el") | 
| Daniel Sanders | ffa272e | 2015-04-20 12:44:01 +0000 | [diff] [blame] | 192 | # Gcc doesn't accept -m32/-m64 so we do the next best thing and use | 
|  | 193 | # -mips32r2/-mips64r2. We don't use -mips1/-mips3 because we want to match | 
|  | 194 | # clang's default CPU's. In the 64-bit case, we must also specify the ABI | 
|  | 195 | # since the default ABI differs between gcc and clang. | 
|  | 196 | # FIXME: Ideally, we would build the N32 library too. | 
| Alexey Samsonov | 63eaeca | 2015-09-08 23:13:47 +0000 | [diff] [blame] | 197 | test_target_arch(mipsel "" "-mips32r2" "--target=mipsel-linux-gnu") | 
| Vasileios Kalintiris | 0943a95 | 2015-10-06 09:02:38 +0000 | [diff] [blame] | 198 | test_target_arch(mips64el "" "-mips64r2" "--target=mips64el-linux-gnu" "-mabi=n64") | 
| Alexey Samsonov | 63eaeca | 2015-09-08 23:13:47 +0000 | [diff] [blame] | 199 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "mips") | 
|  | 200 | test_target_arch(mips "" "-mips32r2" "--target=mips-linux-gnu") | 
| Vasileios Kalintiris | 0943a95 | 2015-10-06 09:02:38 +0000 | [diff] [blame] | 201 | test_target_arch(mips64 "" "-mips64r2" "--target=mips64-linux-gnu" "-mabi=n64") | 
| Alexey Samsonov | 0d0200d | 2015-09-08 22:48:35 +0000 | [diff] [blame] | 202 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "arm") | 
| Saleem Abdulrasool | f88e4fa | 2015-09-26 04:40:45 +0000 | [diff] [blame] | 203 | test_target_arch(arm "" "-march=armv7-a" "-mfloat-abi=soft") | 
|  | 204 | test_target_arch(armhf "" "-march=armv7-a" "-mfloat-abi=hard") | 
| Alexey Samsonov | 0d0200d | 2015-09-08 22:48:35 +0000 | [diff] [blame] | 205 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "aarch32") | 
| Alexey Samsonov | 819045c | 2015-02-25 23:07:32 +0000 | [diff] [blame] | 206 | test_target_arch(aarch32 "" "-march=armv8-a") | 
| Alexey Samsonov | 0d0200d | 2015-09-08 22:48:35 +0000 | [diff] [blame] | 207 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "aarch64") | 
| Alexey Samsonov | 819045c | 2015-02-25 23:07:32 +0000 | [diff] [blame] | 208 | test_target_arch(aarch64 "" "-march=armv8-a") | 
| Dan Gohman | 746cd84 | 2016-01-13 16:56:15 +0000 | [diff] [blame] | 209 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "wasm32") | 
|  | 210 | test_target_arch(wasm32 "" "--target=wasm32-unknown-unknown") | 
|  | 211 | elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "wasm64") | 
|  | 212 | test_target_arch(wasm64 "" "--target=wasm64-unknown-unknown") | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 213 | endif() | 
| Evgeniy Stepanov | 9e922e7 | 2014-09-29 13:18:55 +0000 | [diff] [blame] | 214 | set(COMPILER_RT_OS_SUFFIX "") | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 215 | endif() | 
|  | 216 |  | 
| Sagar Thakur | 3ee5bd9 | 2015-05-19 09:07:37 +0000 | [diff] [blame] | 217 | # Returns a list of architecture specific target cflags in @out_var list. | 
| Alexey Samsonov | 807f1b5 | 2015-01-29 21:32:34 +0000 | [diff] [blame] | 218 | function(get_target_flags_for_arch arch out_var) | 
|  | 219 | list(FIND COMPILER_RT_SUPPORTED_ARCH ${arch} ARCH_INDEX) | 
|  | 220 | if(ARCH_INDEX EQUAL -1) | 
|  | 221 | message(FATAL_ERROR "Unsupported architecture: ${arch}") | 
|  | 222 | else() | 
| Chris Bieneman | 5eae197 | 2015-08-20 17:32:06 +0000 | [diff] [blame] | 223 | if (NOT APPLE) | 
|  | 224 | set(${out_var} ${TARGET_${arch}_CFLAGS} PARENT_SCOPE) | 
|  | 225 | else() | 
|  | 226 | # This is only called in constructing cflags for tests executing on the | 
|  | 227 | # host. This will need to all be cleaned up to support building tests | 
|  | 228 | # for cross-targeted hardware (i.e. iOS). | 
|  | 229 | set(${out_var} -arch ${arch} PARENT_SCOPE) | 
|  | 230 | endif() | 
| Alexey Samsonov | 807f1b5 | 2015-01-29 21:32:34 +0000 | [diff] [blame] | 231 | endif() | 
|  | 232 | endfunction() | 
|  | 233 |  | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 234 | set(ARM64 aarch64) | 
| Saleem Abdulrasool | 96c5023 | 2015-09-26 03:26:01 +0000 | [diff] [blame] | 235 | set(ARM32 arm armhf) | 
| Vasileios Kalintiris | 22db068 | 2015-09-24 16:45:58 +0000 | [diff] [blame] | 236 | set(X86 i386 i686) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 237 | set(X86_64 x86_64) | 
| Vasileios Kalintiris | 22db068 | 2015-09-24 16:45:58 +0000 | [diff] [blame] | 238 | set(MIPS32 mips mipsel) | 
|  | 239 | set(MIPS64 mips64 mips64el) | 
|  | 240 | set(PPC64 powerpc64 powerpc64le) | 
| Dan Gohman | 746cd84 | 2016-01-13 16:56:15 +0000 | [diff] [blame] | 241 | set(WASM32 wasm32) | 
|  | 242 | set(WASM64 wasm64) | 
| Vasileios Kalintiris | 22db068 | 2015-09-24 16:45:58 +0000 | [diff] [blame] | 243 |  | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 244 | if(APPLE) | 
|  | 245 | set(ARM64 arm64) | 
| Anna Zaks | c77a080 | 2016-02-02 02:01:17 +0000 | [diff] [blame] | 246 | set(ARM32 armv7 armv7s armv7k) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 247 | set(X86_64 x86_64 x86_64h) | 
|  | 248 | endif() | 
|  | 249 |  | 
| Vasileios Kalintiris | 0943a95 | 2015-10-06 09:02:38 +0000 | [diff] [blame] | 250 | set(ALL_BUILTIN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} | 
| Dan Gohman | 746cd84 | 2016-01-13 16:56:15 +0000 | [diff] [blame] | 251 | ${MIPS32} ${MIPS64} ${WASM32} ${WASM64}) | 
| Vasileios Kalintiris | 22db068 | 2015-09-24 16:45:58 +0000 | [diff] [blame] | 252 | set(ALL_SANITIZER_COMMON_SUPPORTED_ARCH ${X86} ${X86_64} ${PPC64} | 
|  | 253 | ${ARM32} ${ARM64} ${MIPS32} ${MIPS64}) | 
|  | 254 | set(ALL_ASAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} | 
|  | 255 | ${MIPS32} ${MIPS64} ${PPC64}) | 
|  | 256 | set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) | 
| Adhemerval Zanella | b0d5dd0 | 2015-10-21 13:08:06 +0000 | [diff] [blame] | 257 | set(ALL_LSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) | 
| Vasileios Kalintiris | 22db068 | 2015-09-24 16:45:58 +0000 | [diff] [blame] | 258 | set(ALL_MSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) | 
|  | 259 | set(ALL_PROFILE_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${PPC64} | 
|  | 260 | ${MIPS32} ${MIPS64}) | 
| Bill Schmidt | 2979162 | 2015-12-08 21:54:39 +0000 | [diff] [blame] | 261 | set(ALL_TSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64} ${PPC64}) | 
| Vasileios Kalintiris | 22db068 | 2015-09-24 16:45:58 +0000 | [diff] [blame] | 262 | set(ALL_UBSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} | 
|  | 263 | ${MIPS32} ${MIPS64} ${PPC64}) | 
| Mohit K. Bhakkad | b87b2ec | 2016-03-04 06:15:59 +0000 | [diff] [blame] | 264 | set(ALL_SAFESTACK_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM64} ${MIPS32} ${MIPS64}) | 
| Evgeniy Stepanov | da1cf92 | 2015-12-15 23:00:33 +0000 | [diff] [blame] | 265 | set(ALL_CFI_SUPPORTED_ARCH ${X86} ${X86_64}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 266 |  | 
|  | 267 | if(APPLE) | 
|  | 268 | include(CompilerRTDarwinUtils) | 
|  | 269 |  | 
| Kuba Brecka | c47620a | 2015-11-11 14:53:57 +0000 | [diff] [blame] | 270 | # On Darwin if /usr/include doesn't exist, the user probably has Xcode but not | 
|  | 271 | # the command line tools. If this is the case, we need to find the OS X | 
|  | 272 | # sysroot to pass to clang. | 
|  | 273 | if(NOT EXISTS /usr/include) | 
|  | 274 | execute_process(COMMAND xcodebuild -version -sdk macosx Path | 
|  | 275 | OUTPUT_VARIABLE OSX_SYSROOT | 
|  | 276 | ERROR_QUIET | 
|  | 277 | OUTPUT_STRIP_TRAILING_WHITESPACE) | 
|  | 278 | set(OSX_SYSROOT_FLAG "-isysroot${OSX_SYSROOT}") | 
|  | 279 | endif() | 
|  | 280 |  | 
| Anna Zaks | c77a080 | 2016-02-02 02:01:17 +0000 | [diff] [blame] | 281 | option(COMPILER_RT_ENABLE_IOS "Enable building for iOS" Off) | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 282 | option(COMPILER_RT_ENABLE_WATCHOS "Enable building for watchOS - Experimental" Off) | 
|  | 283 | option(COMPILER_RT_ENABLE_TVOS "Enable building for tvOS - Experimental" Off) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 284 |  | 
| Chris Bieneman | 0d42798 | 2015-09-23 15:18:17 +0000 | [diff] [blame] | 285 | find_darwin_sdk_dir(DARWIN_osx_SYSROOT macosx) | 
|  | 286 | find_darwin_sdk_dir(DARWIN_iossim_SYSROOT iphonesimulator) | 
|  | 287 | find_darwin_sdk_dir(DARWIN_ios_SYSROOT iphoneos) | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 288 | find_darwin_sdk_dir(DARWIN_watchossim_SYSROOT watchsimulator) | 
|  | 289 | find_darwin_sdk_dir(DARWIN_watchos_SYSROOT watchos) | 
|  | 290 | find_darwin_sdk_dir(DARWIN_tvossim_SYSROOT appletvsimulator) | 
|  | 291 | find_darwin_sdk_dir(DARWIN_tvos_SYSROOT appletvos) | 
|  | 292 |  | 
|  | 293 | if(COMPILER_RT_ENABLE_IOS) | 
|  | 294 | list(APPEND DARWIN_EMBEDDED_PLATFORMS ios) | 
|  | 295 | set(DARWIN_ios_MIN_VER_FLAG -miphoneos-version-min) | 
|  | 296 | set(DARWIN_ios_SANITIZER_MIN_VER_FLAG | 
|  | 297 | ${DARWIN_ios_MIN_VER_FLAG}=7.0) | 
|  | 298 | set(DARWIN_ios_BUILTIN_MIN_VER 6.0) | 
|  | 299 | set(DARWIN_ios_BUILTIN_MIN_VER_FLAG | 
|  | 300 | ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER}) | 
|  | 301 | endif() | 
|  | 302 | if(COMPILER_RT_ENABLE_WATCHOS) | 
|  | 303 | list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos) | 
|  | 304 | set(DARWIN_watchos_MIN_VER_FLAG -mwatchos-version-min) | 
|  | 305 | set(DARWIN_watchos_SANITIZER_MIN_VER_FLAG | 
|  | 306 | ${DARWIN_watchos_MIN_VER_FLAG}=2.0) | 
|  | 307 | set(DARWIN_watchos_BUILTIN_MIN_VER 2.0) | 
|  | 308 | set(DARWIN_watchos_BUILTIN_MIN_VER_FLAG | 
|  | 309 | ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER}) | 
|  | 310 | endif() | 
|  | 311 | if(COMPILER_RT_ENABLE_TVOS) | 
|  | 312 | list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos) | 
|  | 313 | set(DARWIN_tvos_MIN_VER_FLAG -mtvos-version-min) | 
|  | 314 | set(DARWIN_tvos_SANITIZER_MIN_VER_FLAG | 
|  | 315 | ${DARWIN_tvos_MIN_VER_FLAG}=9.0) | 
|  | 316 | set(DARWIN_tvos_BUILTIN_MIN_VER 9.0) | 
|  | 317 | set(DARWIN_tvos_BUILTIN_MIN_VER_FLAG | 
|  | 318 | ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER}) | 
|  | 319 | endif() | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 320 |  | 
|  | 321 | # Note: In order to target x86_64h on OS X the minimum deployment target must | 
|  | 322 | # be 10.8 or higher. | 
|  | 323 | set(SANITIZER_COMMON_SUPPORTED_OS osx) | 
| Chris Bieneman | 9e6af15 | 2015-08-31 22:26:02 +0000 | [diff] [blame] | 324 | set(BUILTIN_SUPPORTED_OS osx) | 
| Chris Bieneman | b1ff6e4 | 2015-09-30 21:23:22 +0000 | [diff] [blame] | 325 | set(PROFILE_SUPPORTED_OS osx) | 
| Kuba Brecka | c924949 | 2015-11-03 14:13:59 +0000 | [diff] [blame] | 326 | set(TSAN_SUPPORTED_OS osx) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 327 | if(NOT SANITIZER_MIN_OSX_VERSION) | 
|  | 328 | string(REGEX MATCH "-mmacosx-version-min=([.0-9]+)" | 
|  | 329 | MACOSX_VERSION_MIN_FLAG "${CMAKE_CXX_FLAGS}") | 
|  | 330 | if(MACOSX_VERSION_MIN_FLAG) | 
|  | 331 | set(SANITIZER_MIN_OSX_VERSION "${CMAKE_MATCH_1}") | 
|  | 332 | elseif(CMAKE_OSX_DEPLOYMENT_TARGET) | 
|  | 333 | set(SANITIZER_MIN_OSX_VERSION ${CMAKE_OSX_DEPLOYMENT_TARGET}) | 
|  | 334 | else() | 
|  | 335 | set(SANITIZER_MIN_OSX_VERSION 10.9) | 
|  | 336 | endif() | 
|  | 337 | if(SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.7") | 
|  | 338 | message(FATAL_ERROR "Too old OS X version: ${SANITIZER_MIN_OSX_VERSION}") | 
|  | 339 | endif() | 
|  | 340 | endif() | 
|  | 341 |  | 
|  | 342 | # We're setting the flag manually for each target OS | 
|  | 343 | set(CMAKE_OSX_DEPLOYMENT_TARGET "") | 
|  | 344 |  | 
|  | 345 | set(DARWIN_COMMON_CFLAGS -stdlib=libc++) | 
|  | 346 | set(DARWIN_COMMON_LINKFLAGS | 
|  | 347 | -stdlib=libc++ | 
|  | 348 | -lc++ | 
|  | 349 | -lc++abi) | 
|  | 350 |  | 
| Anna Zaks | ef9a56f | 2016-01-06 23:15:04 +0000 | [diff] [blame] | 351 | check_linker_flag("-fapplication-extension" COMPILER_RT_HAS_APP_EXTENSION) | 
|  | 352 | if(COMPILER_RT_HAS_APP_EXTENSION) | 
|  | 353 | list(APPEND DARWIN_COMMON_LINKFLAGS "-fapplication-extension") | 
|  | 354 | endif() | 
|  | 355 |  | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 356 | set(DARWIN_osx_CFLAGS | 
|  | 357 | ${DARWIN_COMMON_CFLAGS} | 
|  | 358 | -mmacosx-version-min=${SANITIZER_MIN_OSX_VERSION}) | 
|  | 359 | set(DARWIN_osx_LINKFLAGS | 
|  | 360 | ${DARWIN_COMMON_LINKFLAGS} | 
|  | 361 | -mmacosx-version-min=${SANITIZER_MIN_OSX_VERSION}) | 
| Chris Bieneman | 0d42798 | 2015-09-23 15:18:17 +0000 | [diff] [blame] | 362 | set(DARWIN_osx_BUILTIN_MIN_VER 10.5) | 
|  | 363 | set(DARWIN_osx_BUILTIN_MIN_VER_FLAG | 
|  | 364 | -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 365 |  | 
| Chris Bieneman | 0d42798 | 2015-09-23 15:18:17 +0000 | [diff] [blame] | 366 | if(DARWIN_osx_SYSROOT) | 
|  | 367 | list(APPEND DARWIN_osx_CFLAGS -isysroot ${DARWIN_osx_SYSROOT}) | 
|  | 368 | list(APPEND DARWIN_osx_LINKFLAGS -isysroot ${DARWIN_osx_SYSROOT}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 369 | endif() | 
|  | 370 |  | 
|  | 371 | # Figure out which arches to use for each OS | 
|  | 372 | darwin_get_toolchain_supported_archs(toolchain_arches) | 
|  | 373 | message(STATUS "Toolchain supported arches: ${toolchain_arches}") | 
|  | 374 |  | 
|  | 375 | if(NOT MACOSX_VERSION_MIN_FLAG) | 
|  | 376 | darwin_test_archs(osx | 
|  | 377 | DARWIN_osx_ARCHS | 
|  | 378 | ${toolchain_arches}) | 
|  | 379 | message(STATUS "OSX supported arches: ${DARWIN_osx_ARCHS}") | 
|  | 380 | foreach(arch ${DARWIN_osx_ARCHS}) | 
|  | 381 | list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) | 
|  | 382 | set(CAN_TARGET_${arch} 1) | 
|  | 383 | endforeach() | 
|  | 384 |  | 
| Chris Bieneman | af01508 | 2015-09-30 20:26:14 +0000 | [diff] [blame] | 385 | # Need to build a 10.4 compatible libclang_rt | 
|  | 386 | set(DARWIN_10.4_SYSROOT ${DARWIN_osx_SYSROOT}) | 
|  | 387 | set(DARWIN_10.4_BUILTIN_MIN_VER 10.4) | 
|  | 388 | set(DARWIN_10.4_BUILTIN_MIN_VER_FLAG | 
|  | 389 | -mmacosx-version-min=${DARWIN_10.4_BUILTIN_MIN_VER}) | 
|  | 390 | set(DARWIN_10.4_SKIP_CC_KEXT On) | 
| Chris Bieneman | af01508 | 2015-09-30 20:26:14 +0000 | [diff] [blame] | 391 | darwin_test_archs(10.4 | 
|  | 392 | DARWIN_10.4_ARCHS | 
|  | 393 | ${toolchain_arches}) | 
| Chris Bieneman | 2917233 | 2015-10-01 18:58:59 +0000 | [diff] [blame] | 394 | message(STATUS "OSX 10.4 supported arches: ${DARWIN_10.4_ARCHS}") | 
| Chris Bieneman | 3a1ad39 | 2015-10-09 16:47:43 +0000 | [diff] [blame] | 395 | if(DARWIN_10.4_ARCHS) | 
| Chris Bieneman | 4ebd157 | 2015-10-09 18:32:34 +0000 | [diff] [blame] | 396 | # don't include the Haswell slice in the 10.4 compatibility library | 
|  | 397 | list(REMOVE_ITEM DARWIN_10.4_ARCHS x86_64h) | 
| Chris Bieneman | 2917233 | 2015-10-01 18:58:59 +0000 | [diff] [blame] | 398 | list(APPEND BUILTIN_SUPPORTED_OS 10.4) | 
|  | 399 | endif() | 
| Chris Bieneman | af01508 | 2015-09-30 20:26:14 +0000 | [diff] [blame] | 400 |  | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 401 | foreach(platform ${DARWIN_EMBEDDED_PLATFORMS}) | 
|  | 402 | if(DARWIN_${platform}sim_SYSROOT) | 
|  | 403 | set(DARWIN_${platform}sim_CFLAGS | 
|  | 404 | ${DARWIN_COMMON_CFLAGS} | 
|  | 405 | ${DARWIN_${platform}_SANITIZER_MIN_VER_FLAG} | 
|  | 406 | -isysroot ${DARWIN_iossim_SYSROOT}) | 
|  | 407 | set(DARWIN_${platform}sim_LINKFLAGS | 
|  | 408 | ${DARWIN_COMMON_LINKFLAGS} | 
|  | 409 | ${DARWIN_${platform}_SANITIZER_MIN_VER_FLAG} | 
|  | 410 | -isysroot ${DARWIN_${platform}sim_SYSROOT}) | 
|  | 411 | set(DARWIN_${platform}sim_BUILTIN_MIN_VER | 
|  | 412 | ${DARWIN_${platform}_BUILTIN_MIN_VER}) | 
|  | 413 | set(DARWIN_${platform}sim_BUILTIN_MIN_VER_FLAG | 
|  | 414 | ${DARWIN_${platform}_BUILTIN_MIN_VER_FLAG}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 415 |  | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 416 | set(DARWIN_${platform}sim_SKIP_CC_KEXT On) | 
|  | 417 | darwin_test_archs(${platform}sim | 
|  | 418 | DARWIN_${platform}sim_ARCHS | 
|  | 419 | ${toolchain_arches}) | 
|  | 420 | message(STATUS "${platform} Simulator supported arches: ${DARWIN_${platform}sim_ARCHS}") | 
|  | 421 | if(DARWIN_iossim_ARCHS) | 
|  | 422 | list(APPEND SANITIZER_COMMON_SUPPORTED_OS ${platform}sim) | 
|  | 423 | list(APPEND BUILTIN_SUPPORTED_OS ${platform}sim) | 
|  | 424 | list(APPEND PROFILE_SUPPORTED_OS ${platform}sim) | 
| Devin Coughlin | 7704720 | 2016-03-20 17:35:45 +0000 | [diff] [blame] | 425 | list(APPEND TSAN_SUPPORTED_OS ${platform}sim) | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 426 | endif() | 
|  | 427 | foreach(arch ${DARWIN_${platform}sim_ARCHS}) | 
|  | 428 | list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) | 
|  | 429 | set(CAN_TARGET_${arch} 1) | 
|  | 430 | endforeach() | 
| Chris Bieneman | 2917233 | 2015-10-01 18:58:59 +0000 | [diff] [blame] | 431 | endif() | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 432 |  | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 433 | if(DARWIN_${platform}_SYSROOT) | 
|  | 434 | set(DARWIN_${platform}_CFLAGS | 
|  | 435 | ${DARWIN_COMMON_CFLAGS} | 
|  | 436 | ${DARWIN_${platform}_SANITIZER_MIN_VER_FLAG} | 
|  | 437 | -isysroot ${DARWIN_${platform}_SYSROOT}) | 
|  | 438 | set(DARWIN_${platform}_LINKFLAGS | 
|  | 439 | ${DARWIN_COMMON_LINKFLAGS} | 
|  | 440 | ${DARWIN_${platform}_SANITIZER_MIN_VER_FLAG} | 
|  | 441 | -isysroot ${DARWIN_${platform}_SYSROOT}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 442 |  | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 443 | darwin_test_archs(${platform} | 
|  | 444 | DARWIN_${platform}_ARCHS | 
|  | 445 | ${toolchain_arches}) | 
|  | 446 | message(STATUS "${platform} supported arches: ${DARWIN_${platform}_ARCHS}") | 
|  | 447 | if(DARWIN_${platform}_ARCHS) | 
|  | 448 | list(APPEND SANITIZER_COMMON_SUPPORTED_OS ${platform}) | 
|  | 449 | list(APPEND BUILTIN_SUPPORTED_OS ${platform}) | 
|  | 450 | list(APPEND PROFILE_SUPPORTED_OS ${platform}) | 
|  | 451 | endif() | 
|  | 452 | foreach(arch ${DARWIN_${platform}_ARCHS}) | 
|  | 453 | list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) | 
|  | 454 | set(CAN_TARGET_${arch} 1) | 
|  | 455 | endforeach() | 
| Chris Bieneman | 2917233 | 2015-10-01 18:58:59 +0000 | [diff] [blame] | 456 | endif() | 
| Chris Bieneman | 1a4ae60 | 2016-01-12 23:51:03 +0000 | [diff] [blame] | 457 | endforeach() | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 458 | endif() | 
|  | 459 |  | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 460 | # for list_intersect | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 461 | include(CompilerRTUtils) | 
|  | 462 |  | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 463 | list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH toolchain_arches) | 
| Chris Bieneman | b38affa | 2015-08-31 21:24:50 +0000 | [diff] [blame] | 464 |  | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 465 | list_intersect(SANITIZER_COMMON_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 466 | ALL_SANITIZER_COMMON_SUPPORTED_ARCH | 
|  | 467 | COMPILER_RT_SUPPORTED_ARCH | 
|  | 468 | ) | 
|  | 469 | set(LSAN_COMMON_SUPPORTED_ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}) | 
|  | 470 | set(UBSAN_COMMON_SUPPORTED_ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 471 | list_intersect(ASAN_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 472 | ALL_ASAN_SUPPORTED_ARCH | 
|  | 473 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 474 | list_intersect(DFSAN_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 475 | ALL_DFSAN_SUPPORTED_ARCH | 
|  | 476 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 477 | list_intersect(LSAN_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 478 | ALL_LSAN_SUPPORTED_ARCH | 
|  | 479 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 480 | list_intersect(MSAN_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 481 | ALL_MSAN_SUPPORTED_ARCH | 
|  | 482 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 483 | list_intersect(PROFILE_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 484 | ALL_PROFILE_SUPPORTED_ARCH | 
| Chris Bieneman | b1ff6e4 | 2015-09-30 21:23:22 +0000 | [diff] [blame] | 485 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 486 | list_intersect(TSAN_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 487 | ALL_TSAN_SUPPORTED_ARCH | 
|  | 488 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 489 | list_intersect(UBSAN_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 490 | ALL_UBSAN_SUPPORTED_ARCH | 
|  | 491 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 492 | list_intersect(SAFESTACK_SUPPORTED_ARCH | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 493 | ALL_SAFESTACK_SUPPORTED_ARCH | 
|  | 494 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Daniel Sanders | de098c9 | 2016-01-27 09:28:01 +0000 | [diff] [blame] | 495 | list_intersect(CFI_SUPPORTED_ARCH | 
| Evgeniy Stepanov | da1cf92 | 2015-12-15 23:00:33 +0000 | [diff] [blame] | 496 | ALL_CFI_SUPPORTED_ARCH | 
|  | 497 | SANITIZER_COMMON_SUPPORTED_ARCH) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 498 | else() | 
|  | 499 | # Architectures supported by compiler-rt libraries. | 
| Chris Bieneman | b38affa | 2015-08-31 21:24:50 +0000 | [diff] [blame] | 500 | filter_available_targets(BUILTIN_SUPPORTED_ARCH | 
|  | 501 | ${ALL_BUILTIN_SUPPORTED_ARCH}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 502 | filter_available_targets(SANITIZER_COMMON_SUPPORTED_ARCH | 
|  | 503 | ${ALL_SANITIZER_COMMON_SUPPORTED_ARCH}) | 
|  | 504 | # LSan and UBSan common files should be available on all architectures | 
|  | 505 | # supported by other sanitizers (even if they build into dummy object files). | 
|  | 506 | filter_available_targets(LSAN_COMMON_SUPPORTED_ARCH | 
|  | 507 | ${SANITIZER_COMMON_SUPPORTED_ARCH}) | 
|  | 508 | filter_available_targets(UBSAN_COMMON_SUPPORTED_ARCH | 
|  | 509 | ${SANITIZER_COMMON_SUPPORTED_ARCH}) | 
|  | 510 | filter_available_targets(ASAN_SUPPORTED_ARCH ${ALL_ASAN_SUPPORTED_ARCH}) | 
|  | 511 | filter_available_targets(DFSAN_SUPPORTED_ARCH ${ALL_DFSAN_SUPPORTED_ARCH}) | 
|  | 512 | filter_available_targets(LSAN_SUPPORTED_ARCH ${ALL_LSAN_SUPPORTED_ARCH}) | 
|  | 513 | filter_available_targets(MSAN_SUPPORTED_ARCH ${ALL_MSAN_SUPPORTED_ARCH}) | 
|  | 514 | filter_available_targets(PROFILE_SUPPORTED_ARCH ${ALL_PROFILE_SUPPORTED_ARCH}) | 
|  | 515 | filter_available_targets(TSAN_SUPPORTED_ARCH ${ALL_TSAN_SUPPORTED_ARCH}) | 
|  | 516 | filter_available_targets(UBSAN_SUPPORTED_ARCH ${ALL_UBSAN_SUPPORTED_ARCH}) | 
|  | 517 | filter_available_targets(SAFESTACK_SUPPORTED_ARCH | 
|  | 518 | ${ALL_SAFESTACK_SUPPORTED_ARCH}) | 
| Evgeniy Stepanov | da1cf92 | 2015-12-15 23:00:33 +0000 | [diff] [blame] | 519 | filter_available_targets(CFI_SUPPORTED_ARCH ${ALL_CFI_SUPPORTED_ARCH}) | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 520 | endif() | 
|  | 521 |  | 
| Nico Weber | 6a4e0dd | 2016-01-22 20:26:10 +0000 | [diff] [blame] | 522 | if (MSVC) | 
|  | 523 | # See if the DIA SDK is available and usable. | 
|  | 524 | set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK") | 
|  | 525 | if (IS_DIRECTORY ${MSVC_DIA_SDK_DIR}) | 
|  | 526 | set(CAN_SYMBOLIZE 1) | 
|  | 527 | else() | 
|  | 528 | set(CAN_SYMBOLIZE 0) | 
|  | 529 | endif() | 
|  | 530 | else() | 
|  | 531 | set(CAN_SYMBOLIZE 1) | 
|  | 532 | endif() | 
|  | 533 |  | 
| Chris Bieneman | 361231e | 2015-08-13 20:38:16 +0000 | [diff] [blame] | 534 | message(STATUS "Compiler-RT supported architectures: ${COMPILER_RT_SUPPORTED_ARCH}") | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 535 |  | 
|  | 536 | if(ANDROID) | 
|  | 537 | set(OS_NAME "Android") | 
|  | 538 | else() | 
|  | 539 | set(OS_NAME "${CMAKE_SYSTEM_NAME}") | 
|  | 540 | endif() | 
|  | 541 |  | 
|  | 542 | if (SANITIZER_COMMON_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND | 
|  | 543 | (OS_NAME MATCHES "Android|Darwin|Linux|FreeBSD" OR | 
| Peter Collingbourne | d3b9917 | 2015-07-02 01:44:34 +0000 | [diff] [blame] | 544 | (OS_NAME MATCHES "Windows" AND MSVC))) | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 545 | set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE) | 
|  | 546 | else() | 
|  | 547 | set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 548 | endif() | 
|  | 549 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 550 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND | 
| Peter Collingbourne | d3b9917 | 2015-07-02 01:44:34 +0000 | [diff] [blame] | 551 | (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4)) | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 552 | set(COMPILER_RT_HAS_INTERCEPTION TRUE) | 
|  | 553 | else() | 
|  | 554 | set(COMPILER_RT_HAS_INTERCEPTION FALSE) | 
|  | 555 | endif() | 
|  | 556 |  | 
|  | 557 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND ASAN_SUPPORTED_ARCH AND | 
|  | 558 | (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4)) | 
|  | 559 | set(COMPILER_RT_HAS_ASAN TRUE) | 
|  | 560 | else() | 
|  | 561 | set(COMPILER_RT_HAS_ASAN FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 562 | endif() | 
|  | 563 |  | 
| Alexey Samsonov | 9cea2c1 | 2015-02-03 18:40:34 +0000 | [diff] [blame] | 564 | if (OS_NAME MATCHES "Linux|FreeBSD|Windows") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 565 | set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME TRUE) | 
|  | 566 | else() | 
|  | 567 | set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME FALSE) | 
| Alexey Samsonov | 969902b | 2014-12-17 23:14:01 +0000 | [diff] [blame] | 568 | endif() | 
|  | 569 |  | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 570 | # TODO: Add builtins support. | 
|  | 571 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 572 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 573 | OS_NAME MATCHES "Linux") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 574 | set(COMPILER_RT_HAS_DFSAN TRUE) | 
|  | 575 | else() | 
|  | 576 | set(COMPILER_RT_HAS_DFSAN FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 577 | endif() | 
|  | 578 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 579 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND LSAN_SUPPORTED_ARCH AND | 
|  | 580 | OS_NAME MATCHES "Linux|FreeBSD") | 
|  | 581 | set(COMPILER_RT_HAS_LSAN TRUE) | 
|  | 582 | else() | 
|  | 583 | set(COMPILER_RT_HAS_LSAN FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 584 | endif() | 
|  | 585 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 586 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND MSAN_SUPPORTED_ARCH AND | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 587 | OS_NAME MATCHES "Linux") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 588 | set(COMPILER_RT_HAS_MSAN TRUE) | 
|  | 589 | else() | 
|  | 590 | set(COMPILER_RT_HAS_MSAN FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 591 | endif() | 
|  | 592 |  | 
|  | 593 | if (PROFILE_SUPPORTED_ARCH AND | 
| Nathan Slingerland | ba86c92 | 2016-01-05 17:27:01 +0000 | [diff] [blame] | 594 | OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 595 | set(COMPILER_RT_HAS_PROFILE TRUE) | 
|  | 596 | else() | 
|  | 597 | set(COMPILER_RT_HAS_PROFILE FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 598 | endif() | 
|  | 599 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 600 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND | 
| Kuba Brecka | 74775eb | 2015-12-03 11:02:43 +0000 | [diff] [blame] | 601 | OS_NAME MATCHES "Darwin|Linux|FreeBSD") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 602 | set(COMPILER_RT_HAS_TSAN TRUE) | 
|  | 603 | else() | 
|  | 604 | set(COMPILER_RT_HAS_TSAN FALSE) | 
| Alexey Samsonov | 68b9e74 | 2014-08-08 22:01:20 +0000 | [diff] [blame] | 605 | endif() | 
|  | 606 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 607 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND | 
| Peter Collingbourne | d3b9917 | 2015-07-02 01:44:34 +0000 | [diff] [blame] | 608 | OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 609 | set(COMPILER_RT_HAS_UBSAN TRUE) | 
|  | 610 | else() | 
|  | 611 | set(COMPILER_RT_HAS_UBSAN FALSE) | 
| Chris Bieneman | e82ad46 | 2015-12-09 22:45:03 +0000 | [diff] [blame] | 612 | endif() | 
| Chris Bieneman | e82ad46 | 2015-12-09 22:45:03 +0000 | [diff] [blame] | 613 |  | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 614 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND SAFESTACK_SUPPORTED_ARCH AND | 
| Chris Bieneman | e82ad46 | 2015-12-09 22:45:03 +0000 | [diff] [blame] | 615 | OS_NAME MATCHES "Darwin|Linux|FreeBSD") | 
| Chris Bieneman | 5c64ddf | 2015-12-10 00:40:58 +0000 | [diff] [blame] | 616 | set(COMPILER_RT_HAS_SAFESTACK TRUE) | 
|  | 617 | else() | 
|  | 618 | set(COMPILER_RT_HAS_SAFESTACK FALSE) | 
| Peter Collingbourne | b64d0b1 | 2015-06-15 21:08:47 +0000 | [diff] [blame] | 619 | endif() | 
| Evgeniy Stepanov | da1cf92 | 2015-12-15 23:00:33 +0000 | [diff] [blame] | 620 |  | 
|  | 621 | if (COMPILER_RT_HAS_SANITIZER_COMMON AND CFI_SUPPORTED_ARCH AND | 
|  | 622 | OS_NAME MATCHES "Linux") | 
|  | 623 | set(COMPILER_RT_HAS_CFI TRUE) | 
|  | 624 | else() | 
|  | 625 | set(COMPILER_RT_HAS_CFI FALSE) | 
|  | 626 | endif() |