cmake: support searching for TBB via cmake package mechanism

This commit is contained in:
Maksim Shabunin 2018-02-03 13:51:54 +03:00
parent 403c3c3d03
commit 34a9ce6eb3
2 changed files with 25 additions and 4 deletions

View File

@ -18,7 +18,24 @@
# - HAVE_TBB set to TRUE
# - "tbb" target exists and added to OPENCV_LINKER_LIBS
function(ocv_tbb_verify)
function(ocv_tbb_cmake_guess _found)
find_package(TBB QUIET COMPONENTS tbb PATHS "$ENV{TBBROOT}/cmake")
if(TBB_FOUND)
if(NOT TARGET TBB::tbb)
message(WARNING "No TBB::tbb target found!")
return()
endif()
get_target_property(_lib TBB::tbb IMPORTED_LOCATION_RELEASE)
message(STATUS "Found TBB (cmake): ${_lib}")
get_target_property(_inc TBB::tbb INTERFACE_INCLUDE_DIRECTORIES)
ocv_tbb_read_version("${_inc}")
add_library(tbb INTERFACE)
target_link_libraries(tbb INTERFACE TBB::tbb)
set(${_found} TRUE PARENT_SCOPE)
endif()
endfunction()
function(ocv_tbb_env_verify)
if (NOT "$ENV{TBBROOT}" STREQUAL "")
# check that library and include dir are inside TBBROOT location
get_filename_component(_root "$ENV{TBBROOT}" ABSOLUTE)
@ -46,7 +63,7 @@ function(ocv_tbb_env_guess _found)
find_library(TBB_ENV_LIB_DEBUG NAMES "tbb_debug" PATHS ENV LIBRARY_PATH NO_DEFAULT_PATH)
find_library(TBB_ENV_LIB_DEBUG NAMES "tbb_debug")
if (TBB_ENV_INCLUDE AND (TBB_ENV_LIB OR TBB_ENV_LIB_DEBUG))
ocv_tbb_verify()
ocv_tbb_env_verify()
ocv_tbb_read_version("${TBB_ENV_INCLUDE}")
add_library(tbb UNKNOWN IMPORTED)
set_target_properties(tbb PROPERTIES
@ -54,7 +71,7 @@ function(ocv_tbb_env_guess _found)
IMPORTED_LOCATION_DEBUG "${TBB_ENV_LIB_DEBUG}"
INTERFACE_INCLUDE_DIRECTORIES "${TBB_ENV_INCLUDE}"
)
message(STATUS "Found TBB: ${TBB_ENV_LIB}")
message(STATUS "Found TBB (env): ${TBB_ENV_LIB}")
set(${_found} TRUE PARENT_SCOPE)
endif()
endfunction()
@ -74,6 +91,10 @@ if(BUILD_TBB)
set(HAVE_TBB TRUE)
endif()
if(NOT HAVE_TBB)
ocv_tbb_cmake_guess(HAVE_TBB)
endif()
if(NOT HAVE_TBB)
ocv_tbb_env_guess(HAVE_TBB)
endif()

View File

@ -1238,7 +1238,7 @@ macro(ocv_get_all_libs _modules _extra _3rdparty)
endif()
if (TARGET ${dep})
get_target_property(_type ${dep} TYPE)
if(_type STREQUAL "STATIC_LIBRARY" AND BUILD_SHARED_LIBS)
if(_type STREQUAL "STATIC_LIBRARY" AND BUILD_SHARED_LIBS OR _type STREQUAL "INTERFACE_LIBRARY")
# nothing
else()
get_target_property(_output ${dep} IMPORTED_LOCATION)