OpenCVDetectTBB.cmake 3.14 KB
Newer Older
1
if(BUILD_TBB)
2
  add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/tbb")
3
  include_directories(SYSTEM ${TBB_INCLUDE_DIRS})
4
  set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb)
5 6 7 8
  add_definitions(-DTBB_USE_GCC_BUILTINS=1 -D__TBB_GCC_BUILTIN_ATOMICS_PRESENT=1)
  if(tbb_need_GENERIC_DWORD_LOAD_STORE)
    add_definitions(-D__TBB_USE_GENERIC_DWORD_LOAD_STORE=1)
  endif()
9
  set(HAVE_TBB 1)
10
elseif(UNIX AND NOT APPLE)
11 12 13 14 15
  PKG_CHECK_MODULES(TBB tbb)

  if(TBB_FOUND)
    set(HAVE_TBB 1)
    if(NOT ${TBB_INCLUDE_DIRS} STREQUAL "")
Andrey Kamaev's avatar
Andrey Kamaev committed
16
      ocv_include_directories(${TBB_INCLUDE_DIRS})
17 18 19 20 21 22 23
    endif()
    link_directories(${TBB_LIBRARY_DIRS})
    set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${TBB_LIBRARIES})
  endif()
endif()

if(NOT HAVE_TBB)
24
  set(TBB_DEFAULT_INCLUDE_DIRS
25
    "/opt/intel/tbb/include" "/usr/local/include" "/usr/include"
26 27 28
    "C:/Program Files/Intel/TBB" "C:/Program Files (x86)/Intel/TBB"
    "C:/Program Files (x86)/tbb/include"
    "C:/Program Files (x86)/tbb/include"
Anatoly Baksheev's avatar
Anatoly Baksheev committed
29
    "${CMAKE_INSTALL_PREFIX}/include")
30

31 32
  find_path(TBB_INCLUDE_DIRS "tbb/tbb.h" PATHS ${TBB_INCLUDE_DIR} ${TBB_DEFAULT_INCLUDE_DIRS} DOC "The path to TBB headers")
  if(TBB_INCLUDE_DIRS)
33
    if(UNIX)
34
      set(TBB_LIB_DIR "${TBB_INCLUDE_DIRS}/../lib" CACHE PATH "Full path of TBB library directory")
35 36 37 38 39 40 41 42 43 44 45
      link_directories("${TBB_LIB_DIR}")
    endif()
    if(APPLE)
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} libtbb.dylib)
    elseif(ANDROID)
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS}  tbb)
      add_definitions(-DTBB_USE_GCC_BUILTINS)
    elseif (UNIX)
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb)
    elseif (WIN32)
      if(CMAKE_COMPILER_IS_GNUCXX)
46
        set(TBB_LIB_DIR "${TBB_INCLUDE_DIRS}/../lib" CACHE PATH "Full path of TBB library directory")
47 48 49
        link_directories("${TBB_LIB_DIR}")
        set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb)
      else()
50
        get_filename_component(_TBB_LIB_PATH "${TBB_INCLUDE_DIRS}/../lib" ABSOLUTE)
51 52 53

        if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64*|x86_64* OR MSVC64)
          set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/intel64")
54
        else()
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
          set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/ia32")
        endif()

        if(MSVC80)
          set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc8")
        elseif(MSVC90)
          set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc9")
        elseif(MSVC10)
          set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc10")
        elseif(MSVC11)
          set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc11")
        endif()
        set(TBB_LIB_DIR "${_TBB_LIB_PATH}" CACHE PATH "Full path of TBB library directory")
        link_directories("${TBB_LIB_DIR}")
      endif()
    endif()

    set(HAVE_TBB 1)
73
    if(NOT "${TBB_INCLUDE_DIRS}" STREQUAL "")
Andrey Kamaev's avatar
Andrey Kamaev committed
74
      ocv_include_directories("${TBB_INCLUDE_DIRS}")
75
    endif()
76
  endif(TBB_INCLUDE_DIRS)
77
endif(NOT HAVE_TBB)
78 79 80 81

# get TBB version
if(HAVE_TBB)
  find_file(TBB_STDDEF_PATH tbb/tbb_stddef.h "${TBB_INCLUDE_DIRS}")
Anatoly Baksheev's avatar
Anatoly Baksheev committed
82
  mark_as_advanced(TBB _STDDEF_PATH)
83 84 85 86 87 88 89 90
endif()
if(HAVE_TBB AND TBB_STDDEF_PATH)
  ocv_parse_header("${TBB_STDDEF_PATH}" TBB_VERSION_LINES TBB_VERSION_MAJOR TBB_VERSION_MINOR TBB_INTERFACE_VERSION)
else()
  unset(TBB_VERSION_MAJOR)
  unset(TBB_VERSION_MINOR)
  unset(TBB_INTERFACE_VERSION)
endif()