Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / cmake / ie_parallel.cmake
1 # Copyright (C) 2018-2019 Intel Corporation
2 #
3 # SPDX-License-Identifier: Apache-2.0
4 #
5
6 function(set_ie_threading_interface_for TARGET_NAME)
7     set(IE_THREAD_DEFINE "IE_THREAD_SEQ")
8
9     if (THREADING STREQUAL "TBB")
10         if (NOT (IE_MAIN_SOURCE_DIR))
11             set(incl_path ${IE_EXTERNAL_DIR}/tbb/include)
12             if (WIN32)
13                 set(lib_rel_path ${IE_LIB_REL_DIR})
14                 set(lib_dbg_path ${IE_LIB_DBG_DIR})
15             else ()
16                 set(lib_rel_path ${IE_EXTERNAL_DIR}/tbb/lib)
17                 set(lib_dbg_path ${lib_rel_path})
18             endif ()
19         else ()
20             set(incl_path ${TBB}/include)
21             set(lib_rel_path ${TBB}/lib)
22             set(lib_dbg_path ${lib_rel_path})
23         endif ()
24
25         if (NOT TBB_INCLUDE_DIRS OR NOT TBB_LIBRARIES_RELEASE OR NOT TBB_LIBRARIES_DEBUG)
26             find_path(TBB_INCLUDE_DIRS tbb/tbb.h ${incl_path} NO_DEFAULT_PATH)
27             find_library(TBB_LIBRARIES_RELEASE tbb ${lib_rel_path} NO_DEFAULT_PATH)
28             find_library(TBB_LIBRARIES_DEBUG tbb_debug ${lib_dbg_path} NO_DEFAULT_PATH)
29             ext_message(STATUS "TBB include: ${TBB_INCLUDE_DIRS}")
30             ext_message(STATUS "TBB Release lib: ${TBB_LIBRARIES_RELEASE}")
31             ext_message(STATUS "TBB Debug lib: ${TBB_LIBRARIES_DEBUG}")
32         endif ()
33
34         if (NOT TBB_INCLUDE_DIRS OR NOT TBB_LIBRARIES_RELEASE OR NOT TBB_LIBRARIES_DEBUG)
35             ext_message(WARNING "TBB not found. TBB support will be disabled. ${IE_THREAD_DEFINE} is defined")
36         else ()
37             set(IE_THREAD_DEFINE "IE_THREAD_TBB")
38             target_include_directories(${TARGET_NAME} PUBLIC ${TBB_INCLUDE_DIRS})
39             if (WIN32)
40                 target_link_libraries(${TARGET_NAME} PUBLIC "-nodefaultlib:vcomp")
41                 target_link_libraries(${TARGET_NAME} PUBLIC "$<$<CONFIG:DEBUG>:${TBB_LIBRARIES_DEBUG}>;$<$<NOT:$<CONFIG:DEBUG>>:${TBB_LIBRARIES_RELEASE}>")
42             else()
43                 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
44                     target_link_libraries(${TARGET_NAME} PUBLIC ${TBB_LIBRARIES_DEBUG})
45                 else()
46                     target_link_libraries(${TARGET_NAME} PUBLIC ${TBB_LIBRARIES_RELEASE})
47                 endif ()
48             endif ()
49         endif ()
50     elseif (THREADING STREQUAL "OMP")
51         if (WIN32)
52             set(omp_lib_name libiomp5md)
53         else ()
54             set(omp_lib_name iomp5)
55         endif ()
56
57         if (NOT(IE_MAIN_SOURCE_DIR))
58             if (WIN32)
59                 set(lib_rel_path ${IE_LIB_REL_DIR})
60                 set(lib_dbg_path ${IE_LIB_DBG_DIR})
61             else ()
62                 set(lib_rel_path ${IE_EXTERNAL_DIR}/omp/lib)
63                 set(lib_dbg_path ${lib_rel_path})
64             endif ()
65         else ()
66             set(lib_rel_path ${OMP}/lib)
67             set(lib_dbg_path ${lib_rel_path})
68         endif ()
69
70         if (NOT OMP_LIBRARIES_RELEASE OR NOT OMP_LIBRARIES_DEBUG)
71             find_library(OMP_LIBRARIES_RELEASE ${omp_lib_name} ${lib_rel_path} NO_DEFAULT_PATH)
72             find_library(OMP_LIBRARIES_DEBUG ${omp_lib_name} ${lib_dbg_path} NO_DEFAULT_PATH)
73             ext_message(STATUS "OMP Release lib: ${OMP_LIBRARIES_RELEASE}")
74             ext_message(STATUS "OMP Debug lib: ${OMP_LIBRARIES_DEBUG}")
75         endif ()
76
77         if (NOT OMP_LIBRARIES_RELEASE OR NOT OMP_LIBRARIES_DEBUG)
78             ext_message(WARNING "Intel OpenMP not found. Intel OpenMP support will be disabled. ${IE_THREAD_DEFINE} is defined")
79         else ()
80             set(IE_THREAD_DEFINE "IE_THREAD_OMP")
81             
82             if (WIN32)
83                 target_compile_options(${TARGET_NAME} PUBLIC ${OpenMP_CXX_FLAGS} /openmp)
84                 target_compile_options(${TARGET_NAME} PUBLIC ${OpenMP_CXX_FLAGS} /Qopenmp)
85
86                 target_link_libraries(${TARGET_NAME} PUBLIC "-nodefaultlib:vcomp")
87                 target_link_libraries(${TARGET_NAME} PUBLIC "$<$<CONFIG:DEBUG>:${OMP_LIBRARIES_DEBUG}>;$<$<NOT:$<CONFIG:DEBUG>>:${OMP_LIBRARIES_RELEASE}>")
88             else()
89                 target_compile_options(${TARGET_NAME} PUBLIC ${OpenMP_CXX_FLAGS} -fopenmp)
90                 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
91                     target_link_libraries(${TARGET_NAME} PUBLIC ${OMP_LIBRARIES_DEBUG})
92                 else()
93                     target_link_libraries(${TARGET_NAME} PUBLIC ${OMP_LIBRARIES_RELEASE})
94                 endif ()
95             endif ()
96         endif ()
97
98     endif ()
99
100     target_compile_definitions(${TARGET_NAME} PUBLIC -DIE_THREAD=${IE_THREAD_DEFINE})
101
102     if (NOT THREADING STREQUAL "SEQ")
103         find_package(Threads REQUIRED)
104         target_link_libraries(${TARGET_NAME} PUBLIC ${CMAKE_THREAD_LIBS_INIT})
105     endif()
106 endfunction(set_ie_threading_interface_for)