1 # Copyright (C) 2018-2019 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
5 function(set_ie_threading_interface_for TARGET_NAME)
6 function(ie_target_link_libraries TARGET_NAME)
7 get_target_property(target_type ${TARGET_NAME} TYPE)
9 if(NOT target_type STREQUAL "OBJECT_LIBRARY")
10 target_link_libraries(${TARGET_NAME} ${ARGN})
14 set(IE_THREAD_DEFINE "IE_THREAD_SEQ")
16 if (THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO")
17 if (DEFINED ENV{TBBROOT})
18 # Check TBB package in case if custom TBBROOT path configured
19 find_package(TBB QUIET PATHS "$ENV{TBBROOT}/cmake")
21 set(IE_THREAD_DEFINE "IE_THREAD_TBB")
23 ie_target_link_libraries(${TARGET_NAME} PUBLIC "-nodefaultlib:vcomp")
25 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${TBB_IMPORTED_TARGETS})
27 # TBB was not found by the configured TBBROOT path, SEQ method will be used
28 ext_message(WARNING "TBB not found by the configured TBBROOT path $ENV{TBBROOT}")
31 if (NOT (IE_MAIN_SOURCE_DIR))
32 set(incl_path ${IE_EXTERNAL_DIR}/tbb/include)
34 set(lib_rel_path ${IE_LIB_REL_DIR})
35 set(lib_dbg_path ${IE_LIB_DBG_DIR})
37 set(lib_rel_path ${IE_EXTERNAL_DIR}/tbb/lib)
38 set(lib_dbg_path ${lib_rel_path})
41 set(incl_path ${TBB}/include)
42 set(lib_rel_path ${TBB}/lib)
43 set(lib_dbg_path ${lib_rel_path})
46 if (NOT TBB_INCLUDE_DIRS OR NOT TBB_LIBRARIES_RELEASE)
47 find_path(TBB_INCLUDE_DIRS tbb/tbb.h ${incl_path} NO_DEFAULT_PATH)
48 find_library(TBB_LIBRARIES_RELEASE tbb ${lib_rel_path} NO_DEFAULT_PATH)
49 ext_message(STATUS "TBB include: ${TBB_INCLUDE_DIRS}")
50 ext_message(STATUS "TBB Release lib: ${TBB_LIBRARIES_RELEASE}")
52 find_library(TBB_LIBRARIES_DEBUG tbb_debug ${lib_dbg_path} NO_DEFAULT_PATH)
53 if (TBB_LIBRARIES_DEBUG)
54 ext_message(STATUS "TBB Debug lib: ${TBB_LIBRARIES_DEBUG}")
56 ext_message(WARNING "TBB Debug binaries are missed.")
61 if (NOT TBB_INCLUDE_DIRS OR NOT TBB_LIBRARIES_RELEASE)
62 ext_message(WARNING "TBB not found. TBB support will be disabled. ${IE_THREAD_DEFINE} is defined")
64 set(IE_THREAD_DEFINE "IE_THREAD_TBB")
66 target_include_directories(${TARGET_NAME} PUBLIC ${TBB_INCLUDE_DIRS})
68 ie_target_link_libraries(${TARGET_NAME} PUBLIC "-nodefaultlib:vcomp")
71 # Debug binaries are optional.
72 if (TBB_LIBRARIES_DEBUG AND NOT LINUX)
74 ie_target_link_libraries(${TARGET_NAME} PUBLIC "$<$<CONFIG:DEBUG>:${TBB_LIBRARIES_DEBUG}>;$<$<NOT:$<CONFIG:DEBUG>>:${TBB_LIBRARIES_RELEASE}>")
76 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
77 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${TBB_LIBRARIES_DEBUG})
79 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${TBB_LIBRARIES_RELEASE})
83 # Link Release library to all configurations.
84 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${TBB_LIBRARIES_RELEASE})
88 elseif (THREADING STREQUAL "OMP")
90 set(omp_lib_name libiomp5md)
92 set(omp_lib_name iomp5)
95 if (NOT(IE_MAIN_SOURCE_DIR))
97 set(lib_rel_path ${IE_LIB_REL_DIR})
98 set(lib_dbg_path ${IE_LIB_DBG_DIR})
100 set(lib_rel_path ${IE_EXTERNAL_DIR}/omp/lib)
101 set(lib_dbg_path ${lib_rel_path})
104 set(lib_rel_path ${OMP}/lib)
105 set(lib_dbg_path ${lib_rel_path})
108 if (NOT OMP_LIBRARIES_RELEASE)
109 find_library(OMP_LIBRARIES_RELEASE ${omp_lib_name} ${lib_rel_path} NO_DEFAULT_PATH)
110 ext_message(STATUS "OMP Release lib: ${OMP_LIBRARIES_RELEASE}")
112 find_library(OMP_LIBRARIES_DEBUG ${omp_lib_name} ${lib_dbg_path} NO_DEFAULT_PATH)
113 if (OMP_LIBRARIES_DEBUG)
114 ext_message(STATUS "OMP Debug lib: ${OMP_LIBRARIES_DEBUG}")
116 ext_message(WARNING "OMP Debug binaries are missed.")
121 if (NOT OMP_LIBRARIES_RELEASE)
122 ext_message(WARNING "Intel OpenMP not found. Intel OpenMP support will be disabled. ${IE_THREAD_DEFINE} is defined")
124 set(IE_THREAD_DEFINE "IE_THREAD_OMP")
127 target_compile_options(${TARGET_NAME} PUBLIC ${OpenMP_CXX_FLAGS} /openmp)
128 target_compile_options(${TARGET_NAME} PUBLIC ${OpenMP_CXX_FLAGS} /Qopenmp)
129 ie_target_link_libraries(${TARGET_NAME} PUBLIC "-nodefaultlib:vcomp")
131 target_compile_options(${TARGET_NAME} PUBLIC ${OpenMP_CXX_FLAGS} -fopenmp)
134 # Debug binaries are optional.
135 if (OMP_LIBRARIES_DEBUG AND NOT LINUX)
137 ie_target_link_libraries(${TARGET_NAME} PUBLIC "$<$<CONFIG:DEBUG>:${OMP_LIBRARIES_DEBUG}>;$<$<NOT:$<CONFIG:DEBUG>>:${OMP_LIBRARIES_RELEASE}>")
139 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
140 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${OMP_LIBRARIES_DEBUG})
142 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${OMP_LIBRARIES_RELEASE})
146 # Link Release library to all configurations.
147 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${OMP_LIBRARIES_RELEASE})
153 target_compile_definitions(${TARGET_NAME} PUBLIC -DIE_THREAD=${IE_THREAD_DEFINE})
155 if (NOT THREADING STREQUAL "SEQ")
156 find_package(Threads REQUIRED)
157 ie_target_link_libraries(${TARGET_NAME} PUBLIC ${CMAKE_THREAD_LIBS_INIT})
159 endfunction(set_ie_threading_interface_for)