File: FindTBB.cmake

package info (click to toggle)
madness 0.10.1%2Bgit20200818.eee5fd9f-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 34,980 kB
  • sloc: cpp: 280,841; ansic: 12,626; python: 4,961; fortran: 4,245; xml: 1,053; makefile: 714; sh: 276; perl: 244; yacc: 227; lex: 188; asm: 141; csh: 55
file content (142 lines) | stat: -rw-r--r-- 5,168 bytes parent folder | download | duplicates (2)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# - Try to find Intel TBB
# Input variables:
#  TBB_ROOT_DIR     - The TBB install directory
#  TBB_INCLUDE_DIR  - The TBB include directory
#  TBB_LIBRARY      - The TBB library directory
# Output variables:
#  TBB_FOUND        - System has TBB
#  TBB_INCLUDE_DIRS - The tbb include directories
#  TBB_LIBRARIES    - The libraries needed to use TBB
#  TBB_VERSION      - The version string for TBB

include(FindPackageHandleStandardArgs)

if(NOT TBB_FOUND)

  # Set default sarch paths for TBB
  if(NOT TBB_ROOT_DIR AND NOT DEFINED TBB_ROOT_DIR)
    if(EXISTS $ENV{TBBROOT})
      set(TBB_ROOT_DIR "$ENV{TBBROOT}")
    elseif(EXISTS /opt/intel/tbb)
      set(TBB_ROOT_DIR /opt/intel/tbb)
    endif()
  endif()
  if(TBB_ROOT_DIR)
    # NOTE: Will not overwrite user defined include and library directory variables
    set(TBB_INCLUDE_DIR ${TBB_ROOT_DIR}/include 
        CACHE PATH "The include directory for TBB")
    if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
      set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib/libc++;${TBB_ROOT_DIR}/lib 
          CACHE PATH "The library directory for TBB")
    elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
      if (EXISTS ${TBB_ROOT_DIR}/lib/intel64/gcc4.8)  # Intel packaged TBB (2020+)
        set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib/intel64/gcc4.8
            CACHE PATH "The library directory for TBB")
      elseif (EXISTS ${TBB_ROOT_DIR}/lib/intel64/gcc4.7)  # Intel packaged TBB
        set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib/intel64/gcc4.7
            CACHE PATH "The library directory for TBB")
      elseif(EXISTS ${TBB_ROOT_DIR}/lib/intel64/gcc4.4) # Intel packaged TBB
        set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib/intel64/gcc4.4
                CACHE PATH "The library directory for TBB")
      elseif(EXISTS ${TBB_ROOT_DIR}/lib/intel64/gcc4.1) # Intel packaged TBB
        set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib/intel64/gcc4.1
                CACHE PATH "The library directory for TBB")
      else() # Intel OSS TBB
        set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib
                CACHE PATH "The library directory for TBB")
      endif()
    else()
      set(TBB_LIBRARY ${TBB_ROOT_DIR}/lib
          CACHE PATH "The library directory for TBB")
    endif()
  endif()
  
  if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
    set(TBB_USE_DEBUG TRUE)
  else()
    set(TBB_USE_DEBUG FALSE)
  endif()
  
  # Search for TBB include directory
  find_path(TBB_INCLUDE_DIRS NAMES tbb/task.h
      HINTS ${TBB_INCLUDE_DIR})
  
  # Search for TBB libraries
  find_library(TBB_tbb_LIBRARY tbb 
      HINTS ${TBB_LIBRARY})
  if(TBB_tbb_LIBRARY)
    get_filename_component(TBB_tbb_LIBRARY_DIR "${TBB_tbb_LIBRARY}" PATH)
    find_library(TBB_tbb_debug_LIBRARY tbb_debug 
        HINTS ${TBB_tbb_LIBRARY_DIR}
        NO_DEFAULT_PATH)
      
    foreach(_comp tbb_preview tbbmalloc tbbmalloc_proxy) 
      find_library(TBB_${_comp}_LIBRARY ${_comp} 
          HINTS ${TBB_tbb_LIBRARY_DIR}
          NO_DEFAULT_PATH)
      find_library(TBB_${_comp}_debug_LIBRARY ${_comp}_debug 
          HINTS ${TBB_tbb_LIBRARY_DIR}
          NO_DEFAULT_PATH)
    endforeach()
  endif()
  
  # Process TBB libaraies
  foreach(_lib tbb tbb_preview tbbmalloc tbbmalloc_proxy)
    # Set library found variables
    if(TBB_${_lib}_LIBRARY)
      set(TBB_${_lib}_FOUND TRUE)
    else()
      set(TBB_${_lib}_FOUND FALSE)
    endif()
    if(TBB_${_lib}_debug_LIBRARY)
      set(TBB_${_lib}_debug_FOUND TRUE)
    else()
      set(TBB_${_lib}_debug_FOUND FALSE)
    endif()

    # Set the build type TBB library variables
    if(_lib STREQUAL "tbb" OR ";${TBB_FIND_COMPONENTS};" MATCHES ";${_lib};")
      if(TBB_${_lib}_FOUND)
        set(TBB_LIBRARIES_RELEASE ${TBB_${_lib}_LIBRARY} ${TBB_LIBRARIES_RELEASE})
      endif()
      if(TBB_${_lib}_debug_FOUND)
        set(TBB_LIBRARIES_DEBUG ${TBB_${_lib}_debug_LIBRARY} ${TBB_LIBRARIES_DEBUG})
      endif()
    endif()
  endforeach()
  
  # Set the TBB_LIBRARIES variable
  if(TBB_USE_DEBUG AND TBB_LIBRARIES_DEBUG)
    set(TBB_LIBRARIES ${TBB_LIBRARIES_DEBUG})
  else()
    set(TBB_LIBRARIES ${TBB_LIBRARIES_RELEASE})
  endif()
  
  # Get TBB version
  if(TBB_INCLUDE_DIRS)
    file(READ "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" _tbb_version_file)
    string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
            TBB_VERSION_MAJOR "${_tbb_version_file}")
    string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1"
            TBB_VERSION_MINOR "${_tbb_version_file}")
    string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1"
            TBB_INTERFACE_VERSION "${_tbb_version_file}")
    set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}")
    unset(_tbb_version_header)
  endif()

  # handle the QUIETLY and REQUIRED arguments and set TBB_FOUND to TRUE
  # if all listed variables are TRUE
  find_package_handle_standard_args(TBB
      FOUND_VAR TBB_FOUND
      VERSION_VAR TBB_VERSION 
      REQUIRED_VARS TBB_LIBRARIES TBB_INCLUDE_DIRS
      HANDLE_COMPONENTS)

  if(TBB_LIBRARIES_DEBUG)
    set(TBB_COMPILE_FLAGS_DEBUG "-DTBB_USE_DEBUG=1")
  endif()

  mark_as_advanced(TBB_INCLUDE_DIR TBB_LIBRARY TBB_INCLUDE_DIRS TBB_LIBRARIES)

endif()