File: CheckTLSSupport.cmake

package info (click to toggle)
igraph 0.10.2%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 16,176 kB
  • sloc: ansic: 121,500; cpp: 21,699; xml: 2,734; python: 411; makefile: 147; javascript: 20; sh: 9
file content (36 lines) | stat: -rw-r--r-- 1,053 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
include(CheckCSourceCompiles)
include(CMakePushCheckState)

macro(check_tls_support VAR)
  if(NOT DEFINED "${VAR}")
    cmake_push_check_state()
    set(CMAKE_REQUIRED_QUIET 1)

    check_c_source_compiles("
    __thread int tls;

    int main(void) {
        return 0;
    }" HAVE_GCC_TLS)

    if(HAVE_GCC_TLS)
      message(STATUS "Thread-local storage: supported (__thread)")
      set(${VAR} "__thread" CACHE INTERNAL "Thread-local storage support keyword in compiler")
    else()
      check_c_source_compiles("
      __declspec(thread) int tls;

      int main(void) {
          return 0;
      }" HAVE_MSVC_TLS)
      if(HAVE_MSVC_TLS)
        message(STATUS "Thread-local storage: supported (__declspec(thread))")
        set(${VAR} "__declspec(thread)" CACHE INTERNAL "Thread-local storage keyword in compiler")
      else()
        message(STATUS "Thread-local storage: not supported")
        set(${VAR} "" CACHE INTERNAL "Thread-local storage keyword in compiler")
      endif()
    endif()
    cmake_pop_check_state()
  endif()
endmacro()