Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 1 | # |
| 2 | #//===----------------------------------------------------------------------===// |
| 3 | #// |
Chandler Carruth | 57b08b0 | 2019-01-19 10:56:40 +0000 | [diff] [blame] | 4 | #// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 5 | #// See https://llvm.org/LICENSE.txt for license information. |
| 6 | #// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 7 | #// |
| 8 | #//===----------------------------------------------------------------------===// |
| 9 | # |
| 10 | |
| 11 | include(CheckCCompilerFlag) |
| 12 | include(CheckCSourceCompiles) |
| 13 | include(CheckCXXCompilerFlag) |
Jonathan Peyton | 01dcf36 | 2015-11-30 20:02:59 +0000 | [diff] [blame] | 14 | include(CheckIncludeFile) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 15 | include(CheckLibraryExists) |
Jonathan Peyton | 69e596a | 2015-10-29 20:56:24 +0000 | [diff] [blame] | 16 | include(CheckIncludeFiles) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 17 | include(LibompCheckLinkerFlag) |
| 18 | include(LibompCheckFortranFlag) |
| 19 | |
| 20 | # Check for versioned symbols |
| 21 | function(libomp_check_version_symbols retval) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 22 | set(source_code |
| 23 | "#include <stdio.h> |
| 24 | void func1() { printf(\"Hello\"); } |
| 25 | void func2() { printf(\"World\"); } |
| 26 | __asm__(\".symver func1, func@VER1\"); |
| 27 | __asm__(\".symver func2, func@VER2\"); |
| 28 | int main() { |
| 29 | func1(); |
| 30 | func2(); |
| 31 | return 0; |
| 32 | }") |
| 33 | set(version_script_source "VER1 { }; VER2 { } VER1;") |
| 34 | file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/__version_script.txt "${version_script_source}") |
| 35 | set(CMAKE_REQUIRED_FLAGS -Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/__version_script.txt) |
| 36 | check_c_source_compiles("${source_code}" ${retval}) |
| 37 | set(${retval} ${${retval}} PARENT_SCOPE) |
| 38 | file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/__version_script.txt) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 39 | endfunction() |
| 40 | |
| 41 | # Includes the architecture flag in both compile and link phase |
| 42 | function(libomp_check_architecture_flag flag retval) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 43 | set(CMAKE_REQUIRED_FLAGS "${flag}") |
| 44 | check_c_compiler_flag("${flag}" ${retval}) |
| 45 | set(${retval} ${${retval}} PARENT_SCOPE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 46 | endfunction() |
| 47 | |
Jonas Hahnfeld | dc23c83 | 2019-08-15 13:11:50 +0000 | [diff] [blame] | 48 | # Checking CXX, Linker Flags |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 49 | check_cxx_compiler_flag(-fno-exceptions LIBOMP_HAVE_FNO_EXCEPTIONS_FLAG) |
Jonathan Peyton | 1cdd87a | 2016-11-14 21:08:35 +0000 | [diff] [blame] | 50 | check_cxx_compiler_flag(-fno-rtti LIBOMP_HAVE_FNO_RTTI_FLAG) |
Jonas Hahnfeld | dc23c83 | 2019-08-15 13:11:50 +0000 | [diff] [blame] | 51 | check_cxx_compiler_flag(-Wno-class-memaccess LIBOMP_HAVE_WNO_CLASS_MEMACCESS_FLAG) |
| 52 | check_cxx_compiler_flag(-Wno-covered-switch-default LIBOMP_HAVE_WNO_COVERED_SWITCH_DEFAULT_FLAG) |
| 53 | check_cxx_compiler_flag(-Wno-frame-address LIBOMP_HAVE_WNO_FRAME_ADDRESS_FLAG) |
Jonas Hahnfeld | dc23c83 | 2019-08-15 13:11:50 +0000 | [diff] [blame] | 54 | check_cxx_compiler_flag(-Wno-strict-aliasing LIBOMP_HAVE_WNO_STRICT_ALIASING_FLAG) |
| 55 | check_cxx_compiler_flag(-Wstringop-overflow=0 LIBOMP_HAVE_WSTRINGOP_OVERFLOW_FLAG) |
| 56 | check_cxx_compiler_flag(-Wno-stringop-truncation LIBOMP_HAVE_WNO_STRINGOP_TRUNCATION_FLAG) |
| 57 | check_cxx_compiler_flag(-Wno-switch LIBOMP_HAVE_WNO_SWITCH_FLAG) |
| 58 | check_cxx_compiler_flag(-Wno-uninitialized LIBOMP_HAVE_WNO_UNINITIALIZED_FLAG) |
| 59 | check_cxx_compiler_flag(-Wno-unused-but-set-variable LIBOMP_HAVE_WNO_UNUSED_BUT_SET_VARIABLE_FLAG) |
| 60 | check_cxx_compiler_flag(-msse2 LIBOMP_HAVE_MSSE2_FLAG) |
| 61 | check_cxx_compiler_flag(-ftls-model=initial-exec LIBOMP_HAVE_FTLS_MODEL_FLAG) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 62 | libomp_check_architecture_flag(-mmic LIBOMP_HAVE_MMIC_FLAG) |
| 63 | libomp_check_architecture_flag(-m32 LIBOMP_HAVE_M32_FLAG) |
| 64 | if(WIN32) |
Andrey Churbanov | f700e9e | 2018-12-10 13:45:00 +0000 | [diff] [blame] | 65 | if(MSVC) |
| 66 | # Check Windows MSVC style flags. |
Andrey Churbanov | f700e9e | 2018-12-10 13:45:00 +0000 | [diff] [blame] | 67 | check_cxx_compiler_flag(/EHsc LIBOMP_HAVE_EHSC_FLAG) |
| 68 | check_cxx_compiler_flag(/GS LIBOMP_HAVE_GS_FLAG) |
| 69 | check_cxx_compiler_flag(/Oy- LIBOMP_HAVE_Oy__FLAG) |
| 70 | check_cxx_compiler_flag(/arch:SSE2 LIBOMP_HAVE_ARCH_SSE2_FLAG) |
| 71 | check_cxx_compiler_flag(/Qsafeseh LIBOMP_HAVE_QSAFESEH_FLAG) |
| 72 | endif() |
Jonas Hahnfeld | dc23c83 | 2019-08-15 13:11:50 +0000 | [diff] [blame] | 73 | check_cxx_compiler_flag(-mrtm LIBOMP_HAVE_MRTM_FLAG) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 74 | # It is difficult to create a dummy masm assembly file |
| 75 | # and then check the MASM assembler to see if these flags exist and work, |
| 76 | # so we assume they do for Windows. |
| 77 | set(LIBOMP_HAVE_SAFESEH_MASM_FLAG TRUE) |
| 78 | set(LIBOMP_HAVE_COFF_MASM_FLAG TRUE) |
| 79 | # Change Windows flags /MDx to /MTx |
| 80 | foreach(libomp_lang IN ITEMS C CXX) |
| 81 | foreach(libomp_btype IN ITEMS DEBUG RELWITHDEBINFO RELEASE MINSIZEREL) |
| 82 | string(REPLACE "/MD" "/MT" |
| 83 | CMAKE_${libomp_lang}_FLAGS_${libomp_btype} |
| 84 | "${CMAKE_${libomp_lang}_FLAGS_${libomp_btype}}" |
| 85 | ) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 86 | endforeach() |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 87 | endforeach() |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 88 | else() |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 89 | # It is difficult to create a dummy assembly file that compiles into an |
| 90 | # exectuable for every architecture and then check the C compiler to |
| 91 | # see if -x assembler-with-cpp exists and works, so we assume it does for non-Windows. |
| 92 | set(LIBOMP_HAVE_X_ASSEMBLER_WITH_CPP_FLAG TRUE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 93 | endif() |
| 94 | if(${LIBOMP_FORTRAN_MODULES}) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 95 | libomp_check_fortran_flag(-m32 LIBOMP_HAVE_M32_FORTRAN_FLAG) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 96 | endif() |
| 97 | |
| 98 | # Check linker flags |
| 99 | if(WIN32) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 100 | libomp_check_linker_flag(/SAFESEH LIBOMP_HAVE_SAFESEH_FLAG) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 101 | elseif(NOT APPLE) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 102 | libomp_check_linker_flag(-Wl,-x LIBOMP_HAVE_X_FLAG) |
| 103 | libomp_check_linker_flag(-Wl,--warn-shared-textrel LIBOMP_HAVE_WARN_SHARED_TEXTREL_FLAG) |
| 104 | libomp_check_linker_flag(-Wl,--as-needed LIBOMP_HAVE_AS_NEEDED_FLAG) |
| 105 | libomp_check_linker_flag("-Wl,--version-script=${LIBOMP_SRC_DIR}/exports_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG) |
| 106 | libomp_check_linker_flag(-static-libgcc LIBOMP_HAVE_STATIC_LIBGCC_FLAG) |
| 107 | libomp_check_linker_flag(-Wl,-z,noexecstack LIBOMP_HAVE_Z_NOEXECSTACK_FLAG) |
| 108 | libomp_check_linker_flag(-Wl,-fini=__kmp_internal_end_fini LIBOMP_HAVE_FINI_FLAG) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 109 | endif() |
| 110 | |
| 111 | # Check Intel(R) C Compiler specific flags |
| 112 | if(CMAKE_C_COMPILER_ID STREQUAL "Intel") |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 113 | check_cxx_compiler_flag(/Qlong_double LIBOMP_HAVE_LONG_DOUBLE_FLAG) |
| 114 | check_cxx_compiler_flag(/Qdiag-disable:177 LIBOMP_HAVE_DIAG_DISABLE_177_FLAG) |
| 115 | check_cxx_compiler_flag(/Qinline-min-size=1 LIBOMP_HAVE_INLINE_MIN_SIZE_FLAG) |
| 116 | check_cxx_compiler_flag(-Qoption,cpp,--extended_float_types LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG) |
| 117 | check_cxx_compiler_flag(-falign-stack=maintain-16-byte LIBOMP_HAVE_FALIGN_STACK_FLAG) |
| 118 | check_cxx_compiler_flag("-opt-streaming-stores never" LIBOMP_HAVE_OPT_STREAMING_STORES_FLAG) |
| 119 | libomp_check_linker_flag(-static-intel LIBOMP_HAVE_STATIC_INTEL_FLAG) |
| 120 | libomp_check_linker_flag(-no-intel-extensions LIBOMP_HAVE_NO_INTEL_EXTENSIONS_FLAG) |
| 121 | check_library_exists(irc_pic _intel_fast_memcpy "" LIBOMP_HAVE_IRC_PIC_LIBRARY) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 122 | endif() |
| 123 | |
| 124 | # Checking Threading requirements |
| 125 | find_package(Threads REQUIRED) |
| 126 | if(WIN32) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 127 | if(NOT CMAKE_USE_WIN32_THREADS_INIT) |
| 128 | libomp_error_say("Need Win32 thread interface on Windows.") |
| 129 | endif() |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 130 | else() |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 131 | if(NOT CMAKE_USE_PTHREADS_INIT) |
| 132 | libomp_error_say("Need pthread interface on Unix-like systems.") |
| 133 | endif() |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 134 | endif() |
| 135 | |
| 136 | # Find perl executable |
| 137 | # Perl is used to create omp.h (and other headers) along with kmp_i18n_id.inc and kmp_i18n_default.inc |
| 138 | find_package(Perl REQUIRED) |
Jonathan Peyton | 4c91ad1 | 2016-01-26 19:44:31 +0000 | [diff] [blame] | 139 | # The perl scripts take the --os=/--arch= flags which expect a certain format for operating systems and arch's. |
| 140 | # Until the perl scripts are removed, the most portable way to handle this is to have all operating systems that |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 141 | # are neither Windows nor Mac (Most Unix flavors) be considered lin to the perl scripts. This is rooted |
| 142 | # in that all the Perl scripts check the operating system and will fail if it isn't "valid". This |
| 143 | # temporary solution lets us avoid trying to enumerate all the possible OS values inside the Perl modules. |
| 144 | if(WIN32) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 145 | set(LIBOMP_PERL_SCRIPT_OS win) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 146 | elseif(APPLE) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 147 | set(LIBOMP_PERL_SCRIPT_OS mac) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 148 | else() |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 149 | set(LIBOMP_PERL_SCRIPT_OS lin) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 150 | endif() |
Jonathan Peyton | 4c91ad1 | 2016-01-26 19:44:31 +0000 | [diff] [blame] | 151 | if(IA32) |
| 152 | set(LIBOMP_PERL_SCRIPT_ARCH 32) |
| 153 | elseif(MIC) |
| 154 | set(LIBOMP_PERL_SCRIPT_ARCH mic) |
| 155 | elseif(INTEL64) |
| 156 | set(LIBOMP_PERL_SCRIPT_ARCH 32e) |
| 157 | else() |
| 158 | set(LIBOMP_PERL_SCRIPT_ARCH ${LIBOMP_ARCH}) |
| 159 | endif() |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 160 | |
| 161 | # Checking features |
| 162 | # Check if version symbol assembler directives are supported |
| 163 | libomp_check_version_symbols(LIBOMP_HAVE_VERSION_SYMBOLS) |
| 164 | |
| 165 | # Check if quad precision types are available |
| 166 | if(CMAKE_C_COMPILER_ID STREQUAL "GNU") |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 167 | set(LIBOMP_HAVE_QUAD_PRECISION TRUE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 168 | elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel") |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 169 | if(LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG) |
| 170 | set(LIBOMP_HAVE_QUAD_PRECISION TRUE) |
| 171 | else() |
| 172 | set(LIBOMP_HAVE_QUAD_PRECISION TRUE) |
| 173 | endif() |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 174 | else() |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 175 | set(LIBOMP_HAVE_QUAD_PRECISION FALSE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 176 | endif() |
| 177 | |
| 178 | # Check if adaptive locks are available |
| 179 | if((${IA32} OR ${INTEL64}) AND NOT MSVC) |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 180 | set(LIBOMP_HAVE_ADAPTIVE_LOCKS TRUE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 181 | else() |
Jonathan Peyton | 5b4acbd | 2015-07-15 16:57:19 +0000 | [diff] [blame] | 182 | set(LIBOMP_HAVE_ADAPTIVE_LOCKS FALSE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 183 | endif() |
| 184 | |
| 185 | # Check if stats-gathering is available |
Jonathan Peyton | b9e8326 | 2015-12-18 16:19:35 +0000 | [diff] [blame] | 186 | if(${LIBOMP_STATS}) |
| 187 | check_c_source_compiles( |
| 188 | "__thread int x; |
Jonathan Peyton | 975dabc | 2016-05-17 20:51:24 +0000 | [diff] [blame] | 189 | int main(int argc, char** argv) |
Jonathan Peyton | b9e8326 | 2015-12-18 16:19:35 +0000 | [diff] [blame] | 190 | { x = argc; return x; }" |
| 191 | LIBOMP_HAVE___THREAD) |
| 192 | check_c_source_compiles( |
Jonathan Peyton | 975dabc | 2016-05-17 20:51:24 +0000 | [diff] [blame] | 193 | "int main(int argc, char** argv) |
Jonathan Peyton | b9e8326 | 2015-12-18 16:19:35 +0000 | [diff] [blame] | 194 | { unsigned long long t = __builtin_readcyclecounter(); return 0; }" |
| 195 | LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER) |
| 196 | if(NOT LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER) |
Jonathan Peyton | 316af8d | 2016-03-28 18:53:10 +0000 | [diff] [blame] | 197 | if(${IA32} OR ${INTEL64} OR ${MIC}) |
Jonathan Peyton | b9e8326 | 2015-12-18 16:19:35 +0000 | [diff] [blame] | 198 | check_include_file(x86intrin.h LIBOMP_HAVE_X86INTRIN_H) |
| 199 | libomp_append(CMAKE_REQUIRED_DEFINITIONS -DLIBOMP_HAVE_X86INTRIN_H LIBOMP_HAVE_X86INTRIN_H) |
| 200 | check_c_source_compiles( |
| 201 | "#ifdef LIBOMP_HAVE_X86INTRIN_H |
| 202 | # include <x86intrin.h> |
| 203 | #endif |
| 204 | int main(int argc, char** argv) { unsigned long long t = __rdtsc(); return 0; }" LIBOMP_HAVE___RDTSC) |
| 205 | set(CMAKE_REQUIRED_DEFINITIONS) |
| 206 | endif() |
| 207 | endif() |
| 208 | if(LIBOMP_HAVE___THREAD AND (LIBOMP_HAVE___RDTSC OR LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER)) |
| 209 | set(LIBOMP_HAVE_STATS TRUE) |
| 210 | else() |
| 211 | set(LIBOMP_HAVE_STATS FALSE) |
| 212 | endif() |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 213 | endif() |
| 214 | |
| 215 | # Check if OMPT support is available |
Jonathan Peyton | 69e596a | 2015-10-29 20:56:24 +0000 | [diff] [blame] | 216 | # Currently, __builtin_frame_address() is required for OMPT |
Jonas Hahnfeld | d0ef19e | 2017-11-11 13:59:48 +0000 | [diff] [blame] | 217 | # Weak attribute is required for Unices (except Darwin), LIBPSAPI is used for Windows |
Jonathan Peyton | 69e596a | 2015-10-29 20:56:24 +0000 | [diff] [blame] | 218 | check_c_source_compiles("int main(int argc, char** argv) { |
| 219 | void* p = __builtin_frame_address(0); |
| 220 | return 0;}" LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS) |
| 221 | check_c_source_compiles("__attribute__ ((weak)) int foo(int a) { return a*a; } |
| 222 | int main(int argc, char** argv) { |
| 223 | return foo(argc);}" LIBOMP_HAVE_WEAK_ATTRIBUTE) |
| 224 | check_include_files("windows.h;psapi.h" LIBOMP_HAVE_PSAPI_H) |
| 225 | check_library_exists(psapi EnumProcessModules "" LIBOMP_HAVE_LIBPSAPI) |
| 226 | if(LIBOMP_HAVE_PSAPI_H AND LIBOMP_HAVE_LIBPSAPI) |
| 227 | set(LIBOMP_HAVE_PSAPI TRUE) |
Jonathan Peyton | 2e01335 | 2015-07-15 16:05:30 +0000 | [diff] [blame] | 228 | endif() |
Jonathan Peyton | 69e596a | 2015-10-29 20:56:24 +0000 | [diff] [blame] | 229 | if(NOT LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS) |
| 230 | set(LIBOMP_HAVE_OMPT_SUPPORT FALSE) |
| 231 | else() |
Joachim Protze | e5e4afd | 2018-01-02 21:09:00 +0000 | [diff] [blame] | 232 | if( # hardware architecture supported? |
| 233 | ((LIBOMP_ARCH STREQUAL x86_64) OR |
| 234 | (LIBOMP_ARCH STREQUAL i386) OR |
| 235 | # (LIBOMP_ARCH STREQUAL arm) OR |
| 236 | (LIBOMP_ARCH STREQUAL aarch64) OR |
| 237 | (LIBOMP_ARCH STREQUAL ppc64le) OR |
Jonas Hahnfeld | 2488ae9 | 2019-07-25 14:36:20 +0000 | [diff] [blame] | 238 | (LIBOMP_ARCH STREQUAL ppc64) OR |
| 239 | (LIBOMP_ARCH STREQUAL riscv64)) |
Joachim Protze | e5e4afd | 2018-01-02 21:09:00 +0000 | [diff] [blame] | 240 | AND # OS supported? |
| 241 | ((WIN32 AND LIBOMP_HAVE_PSAPI) OR APPLE OR (NOT WIN32 AND LIBOMP_HAVE_WEAK_ATTRIBUTE))) |
Jonathan Peyton | 69e596a | 2015-10-29 20:56:24 +0000 | [diff] [blame] | 242 | set(LIBOMP_HAVE_OMPT_SUPPORT TRUE) |
| 243 | else() |
| 244 | set(LIBOMP_HAVE_OMPT_SUPPORT FALSE) |
| 245 | endif() |
| 246 | endif() |
| 247 | |
Jonathan Peyton | 01dcf36 | 2015-11-30 20:02:59 +0000 | [diff] [blame] | 248 | # Check if HWLOC support is available |
| 249 | if(${LIBOMP_USE_HWLOC}) |
Jonathan Peyton | 0f3c2b9 | 2016-06-16 20:23:11 +0000 | [diff] [blame] | 250 | set(CMAKE_REQUIRED_INCLUDES ${LIBOMP_HWLOC_INSTALL_DIR}/include) |
| 251 | check_include_file(hwloc.h LIBOMP_HAVE_HWLOC_H) |
| 252 | set(CMAKE_REQUIRED_INCLUDES) |
| 253 | find_library(LIBOMP_HWLOC_LIBRARY |
| 254 | NAMES hwloc libhwloc |
| 255 | HINTS ${LIBOMP_HWLOC_INSTALL_DIR}/lib) |
| 256 | if(LIBOMP_HWLOC_LIBRARY) |
| 257 | check_library_exists(${LIBOMP_HWLOC_LIBRARY} hwloc_topology_init |
Jonathan Peyton | 01dcf36 | 2015-11-30 20:02:59 +0000 | [diff] [blame] | 258 | ${LIBOMP_HWLOC_INSTALL_DIR}/lib LIBOMP_HAVE_LIBHWLOC) |
Jonathan Peyton | 01dcf36 | 2015-11-30 20:02:59 +0000 | [diff] [blame] | 259 | get_filename_component(LIBOMP_HWLOC_LIBRARY_DIR ${LIBOMP_HWLOC_LIBRARY} PATH) |
Jonathan Peyton | 0f3c2b9 | 2016-06-16 20:23:11 +0000 | [diff] [blame] | 260 | endif() |
| 261 | if(LIBOMP_HAVE_HWLOC_H AND LIBOMP_HAVE_LIBHWLOC AND LIBOMP_HWLOC_LIBRARY) |
| 262 | set(LIBOMP_HAVE_HWLOC TRUE) |
| 263 | else() |
| 264 | set(LIBOMP_HAVE_HWLOC FALSE) |
| 265 | libomp_say("Could not find hwloc") |
Jonathan Peyton | 01dcf36 | 2015-11-30 20:02:59 +0000 | [diff] [blame] | 266 | endif() |
| 267 | endif() |
| 268 | |
Jonas Hahnfeld | 50fed04 | 2016-11-07 15:58:36 +0000 | [diff] [blame] | 269 | # Check if ThreadSanitizer support is available |
| 270 | if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux" AND ${INTEL64}) |
| 271 | set(LIBOMP_HAVE_TSAN_SUPPORT TRUE) |
| 272 | else() |
| 273 | set(LIBOMP_HAVE_TSAN_SUPPORT FALSE) |
| 274 | endif() |