Salome HOME
Fix for "#18972 [CEA][Windows] Cannot compile SMESH"
[tools/configuration.git] / cmake / FindTBB.cmake
1 # - Find TBB
2 # Sets the following variables:
3 #   TBB_INCLUDE_DIRS - path to the TBB include directory
4 #   TBB_LIBRARIES    - path to the TBB libraries to be linked against
5 #
6
7 #########################################################################
8 # Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
9 #
10 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
11 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
12 #
13 # This library is free software; you can redistribute it and/or
14 # modify it under the terms of the GNU Lesser General Public
15 # License as published by the Free Software Foundation; either
16 # version 2.1 of the License, or (at your option) any later version.
17 #
18 # This library is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 # Lesser General Public License for more details.
22 #
23 # You should have received a copy of the GNU Lesser General Public
24 # License along with this library; if not, write to the Free Software
25 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
26 #
27 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
28 #
29
30 # ------
31
32 MESSAGE(STATUS "Check for TBB ...")
33
34 # ------
35
36 SET(TBB_ROOT_DIR $ENV{TBB_ROOT_DIR})
37
38 IF(TBB_ROOT_DIR)
39   LIST(APPEND CMAKE_PREFIX_PATH "${TBB_ROOT_DIR}")
40 ENDIF(TBB_ROOT_DIR)
41
42 FIND_PATH(TBB_INCLUDE_DIRS tbb/tbb.h PATH_SUFFIXES include)
43
44 IF(MACHINE_IS_64)
45   SET(PLT_SUFFIX intel64)
46 ELSE(MACHINE_IS_64)
47   SET(PLT_SUFFIX ia32)
48 ENDIF(MACHINE_IS_64)
49
50 include(CheckCXXSourceCompiles)
51
52 SET(_PATH_SUFFIXES)
53 IF(TBB_ROOT_DIR)
54   FOREACH(_PATH cc4.1.0_libc2.4_kernel2.6.16.21 gcc4.4 gcc4.1)
55     LIST(APPEND _PATH_SUFFIXES ${PLT_SUFFIX}/${_PATH})
56   ENDFOREACH()
57 ENDIF()
58
59 FIND_LIBRARY(_tbb_library_tbb       
60              NAMES tbb   
61              PATH_SUFFIXES ${_PATH_SUFFIXES})
62 FIND_LIBRARY(_tbb_library_tbbmalloc 
63              NAMES tbbmalloc 
64              PATH_SUFFIXES ${_PATH_SUFFIXES})
65
66 SET(_tbb_libraries ${_tbb_library_tbb} ${_tbb_library_tbbmalloc})
67
68 IF(_tbb_libraries)
69
70   SET(CMAKE_REQUIRED_INCLUDES_SAVE  ${CMAKE_REQUIRED_INCLUDES})
71   SET(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
72   SET(CMAKE_REQUIRED_INCLUDES  "${CMAKE_REQUIRED_INCLUDES} ${TBB_INCLUDE_DIRS}")
73   SET(CMAKE_REQUIRED_LIBRARIES "${_tbb_libraries}")
74
75   CHECK_CXX_SOURCE_COMPILES("
76     #include <tbb/tbb.h>
77     using namespace tbb;
78     size_t testme(size_t n)
79     {
80       return n*n;
81     }
82     int main(int argc, char* argv[])
83     {
84       parallel_for<size_t>( 1, 10, 1, testme );
85     }
86     "
87     _tbb_link_ok
88     )
89     
90   SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
91   SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
92
93   IF(_tbb_link_ok)
94     SET(TBB_LIBRARY_tbb       ${_tbb_library_tbb}       CACHE FILEPATH "Path to a library")
95     SET(TBB_LIBRARY_tbbmalloc ${_tbb_library_tbbmalloc} CACHE FILEPATH "Path to a library")
96     SET(TBB_LIBRARIES ${TBB_LIBRARY_tbb} ${TBB_LIBRARY_tbbmalloc})
97   ENDIF()
98
99 ENDIF(_tbb_libraries)
100
101 INCLUDE(FindPackageHandleStandardArgs)
102 FIND_PACKAGE_HANDLE_STANDARD_ARGS(TBB REQUIRED_VARS TBB_INCLUDE_DIRS TBB_LIBRARY_tbb TBB_LIBRARY_tbbmalloc)