Commit 772fcf40 authored by Alexander Smorkalov's avatar Alexander Smorkalov

Merge pull request #3893 from SpecLad:cuda-imported-targets

parents ba0a8dc7 6e121b2e
...@@ -540,9 +540,6 @@ if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA) ...@@ -540,9 +540,6 @@ if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA)
if(HAVE_CUFFT) if(HAVE_CUFFT)
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY}) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
endif() endif()
foreach(p ${CUDA_LIBS_PATH})
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
endforeach()
endif() endif()
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
......
...@@ -218,40 +218,18 @@ else() ...@@ -218,40 +218,18 @@ else()
endif() endif()
if(HAVE_CUDA) if(HAVE_CUDA)
set(CUDA_LIBS_PATH "")
foreach(p ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
get_filename_component(_tmp ${p} PATH)
list(APPEND CUDA_LIBS_PATH ${_tmp})
endforeach()
if(HAVE_CUBLAS)
foreach(p ${CUDA_cublas_LIBRARY})
get_filename_component(_tmp ${p} PATH)
list(APPEND CUDA_LIBS_PATH ${_tmp})
endforeach()
endif()
if(HAVE_CUFFT)
foreach(p ${CUDA_cufft_LIBRARY})
get_filename_component(_tmp ${p} PATH)
list(APPEND CUDA_LIBS_PATH ${_tmp})
endforeach()
endif()
list(REMOVE_DUPLICATES CUDA_LIBS_PATH)
link_directories(${CUDA_LIBS_PATH})
set(CUDA_LIBRARIES_ABS ${CUDA_LIBRARIES}) set(CUDA_LIBRARIES_ABS ${CUDA_LIBRARIES})
ocv_convert_to_lib_name(CUDA_LIBRARIES ${CUDA_LIBRARIES}) ocv_create_imported_targets(CUDA_LIBRARIES ${CUDA_LIBRARIES})
set(CUDA_npp_LIBRARY_ABS ${CUDA_npp_LIBRARY}) set(CUDA_npp_LIBRARY_ABS ${CUDA_npp_LIBRARY})
ocv_convert_to_lib_name(CUDA_npp_LIBRARY ${CUDA_npp_LIBRARY}) ocv_create_imported_targets(CUDA_npp_LIBRARY ${CUDA_npp_LIBRARY})
if(HAVE_CUBLAS) if(HAVE_CUBLAS)
set(CUDA_cublas_LIBRARY_ABS ${CUDA_cublas_LIBRARY}) set(CUDA_cublas_LIBRARY_ABS ${CUDA_cublas_LIBRARY})
ocv_convert_to_lib_name(CUDA_cublas_LIBRARY ${CUDA_cublas_LIBRARY}) ocv_create_imported_targets(CUDA_cublas_LIBRARY ${CUDA_cublas_LIBRARY})
endif() endif()
if(HAVE_CUFFT) if(HAVE_CUFFT)
set(CUDA_cufft_LIBRARY_ABS ${CUDA_cufft_LIBRARY}) set(CUDA_cufft_LIBRARY_ABS ${CUDA_cufft_LIBRARY})
ocv_convert_to_lib_name(CUDA_cufft_LIBRARY ${CUDA_cufft_LIBRARY}) ocv_create_imported_targets(CUDA_cufft_LIBRARY ${CUDA_cufft_LIBRARY})
endif() endif()
endif() endif()
...@@ -63,22 +63,23 @@ endforeach() ...@@ -63,22 +63,23 @@ endforeach()
# add extra dependencies required for OpenCV # add extra dependencies required for OpenCV
if(OpenCV_EXTRA_COMPONENTS) if(OpenCV_EXTRA_COMPONENTS)
foreach(extra_component ${OpenCV_EXTRA_COMPONENTS}) foreach(extra_component ${OpenCV_EXTRA_COMPONENTS})
if(TARGET "${extra_component}")
get_target_property(extra_component_is_imported "${extra_component}" IMPORTED)
if(extra_component_is_imported)
get_target_property(extra_component "${extra_component}" LOCATION)
endif()
endif()
if(extra_component MATCHES "^-[lL]") if(extra_component MATCHES "^-l")
set(libprefix "") list(APPEND OpenCV_LIB_COMPONENTS_ "${extra_component}")
set(libname "${extra_component}")
elseif(extra_component MATCHES "[\\/]") elseif(extra_component MATCHES "[\\/]")
get_filename_component(libdir "${extra_component}" PATH) get_filename_component(libdir "${extra_component}" PATH)
list(APPEND OpenCV_LIB_COMPONENTS_ "-L${libdir}")
get_filename_component(libname "${extra_component}" NAME_WE) get_filename_component(libname "${extra_component}" NAME_WE)
string(REGEX REPLACE "^lib" "" libname "${libname}") string(REGEX REPLACE "^lib" "" libname "${libname}")
set(libprefix "-l") list(APPEND OpenCV_LIB_COMPONENTS_ "-L${libdir}" "-l${libname}")
else() else()
set(libprefix "-l") list(APPEND OpenCV_LIB_COMPONENTS_ "-l${extra_component}")
set(libname "${extra_component}")
endif() endif()
list(APPEND OpenCV_LIB_COMPONENTS_ "${libprefix}${libname}")
endforeach() endforeach()
endif() endif()
......
...@@ -919,25 +919,28 @@ macro(__ocv_track_module_link_dependencies the_module optkind) ...@@ -919,25 +919,28 @@ macro(__ocv_track_module_link_dependencies the_module optkind)
list(REMOVE_AT __mod_depends 0) list(REMOVE_AT __mod_depends 0)
if(__dep STREQUAL the_module) if(__dep STREQUAL the_module)
set(__has_cycle TRUE) set(__has_cycle TRUE)
else()#if("${OPENCV_MODULES_BUILD}" MATCHES "(^|;)${__dep}(;|$)") else()
ocv_regex_escape(__rdep "${__dep}") ocv_regex_escape(__rdep "${__dep}")
if(__resolved_deps MATCHES "(^|;)${__rdep}(;|$)") if(__resolved_deps MATCHES "(^|;)${__rdep}(;|$)")
#all dependencies of this module are already resolved #all dependencies of this module are already resolved
list(APPEND ${the_module}_MODULE_DEPS_${optkind} "${__dep}") list(APPEND ${the_module}_MODULE_DEPS_${optkind} "${__dep}")
elseif(TARGET ${__dep}) elseif(TARGET ${__dep})
get_target_property(__module_type ${__dep} TYPE) get_target_property(__dep_imported ${__dep} IMPORTED)
if(__module_type STREQUAL "STATIC_LIBRARY") if(__dep_imported)
if(NOT DEFINED ${__dep}_LIB_DEPENDS_${optkind}) list(APPEND ${the_module}_EXTRA_DEPS_${optkind} "${__dep}")
ocv_split_libs_list(${__dep}_LIB_DEPENDS ${__dep}_LIB_DEPENDS_DBG ${__dep}_LIB_DEPENDS_OPT) else()
get_target_property(__module_type ${__dep} TYPE)
if(__module_type STREQUAL "STATIC_LIBRARY")
if(NOT DEFINED ${__dep}_LIB_DEPENDS_${optkind})
ocv_split_libs_list(${__dep}_LIB_DEPENDS ${__dep}_LIB_DEPENDS_DBG ${__dep}_LIB_DEPENDS_OPT)
endif()
list(INSERT __mod_depends 0 ${${__dep}_LIB_DEPENDS_${optkind}} ${__dep})
list(APPEND __resolved_deps "${__dep}")
endif() endif()
list(INSERT __mod_depends 0 ${${__dep}_LIB_DEPENDS_${optkind}} ${__dep})
list(APPEND __resolved_deps "${__dep}")
endif() endif()
else() else()
list(APPEND ${the_module}_EXTRA_DEPS_${optkind} "${__dep}") list(APPEND ${the_module}_EXTRA_DEPS_${optkind} "${__dep}")
endif() endif()
#else()
# get_target_property(__dep_location "${__dep}" LOCATION)
endif() endif()
endwhile() endwhile()
...@@ -951,7 +954,7 @@ macro(__ocv_track_module_link_dependencies the_module optkind) ...@@ -951,7 +954,7 @@ macro(__ocv_track_module_link_dependencies the_module optkind)
list(APPEND ${the_module}_MODULE_DEPS_${optkind} "${the_module}") list(APPEND ${the_module}_MODULE_DEPS_${optkind} "${the_module}")
endif() endif()
unset(__dep_location) unset(__dep_imported)
unset(__mod_depends) unset(__mod_depends)
unset(__resolved_deps) unset(__resolved_deps)
unset(__has_cycle) unset(__has_cycle)
......
...@@ -449,18 +449,29 @@ endmacro() ...@@ -449,18 +449,29 @@ endmacro()
# convert list of paths to libraries names without lib prefix # convert list of paths to libraries names without lib prefix
macro(ocv_convert_to_lib_name var) function(ocv_convert_to_lib_name var)
set(__tmp "") set(tmp "")
foreach(path ${ARGN}) foreach(path ${ARGN})
get_filename_component(__tmp_name "${path}" NAME_WE) get_filename_component(tmp_name "${path}" NAME_WE)
string(REGEX REPLACE "^lib" "" __tmp_name ${__tmp_name}) string(REGEX REPLACE "^lib" "" tmp_name "${tmp_name}")
list(APPEND __tmp "${__tmp_name}") list(APPEND tmp "${tmp_name}")
endforeach() endforeach()
set(${var} ${__tmp}) set(${var} ${tmp} PARENT_SCOPE)
unset(__tmp) endfunction()
unset(__tmp_name)
endmacro()
# create imported targets for a list of external libraries
function(ocv_create_imported_targets var)
set(target_list "")
foreach(library ${ARGN})
ocv_convert_to_lib_name(libname "${library}")
add_library("opencv_dep_${libname}" UNKNOWN IMPORTED)
set_target_properties("opencv_dep_${libname}" PROPERTIES IMPORTED_LOCATION "${library}")
list(APPEND target_list "opencv_dep_${libname}")
endforeach()
set("${var}" "${target_list}" PARENT_SCOPE)
endfunction()
# add install command # add install command
function(ocv_install_target) function(ocv_install_target)
......
...@@ -104,7 +104,7 @@ endef ...@@ -104,7 +104,7 @@ endef
define add_cuda_module define add_cuda_module
include $(CLEAR_VARS) include $(CLEAR_VARS)
LOCAL_MODULE:=$1 LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(CUDA_TOOLKIT_DIR)/targets/armv7-linux-androideabi/lib/lib$1.so LOCAL_SRC_FILES:=$(CUDA_TOOLKIT_DIR)/targets/armv7-linux-androideabi/lib/lib$(1:opencv_dep_%=%).so
include $(PREBUILT_SHARED_LIBRARY) include $(PREBUILT_SHARED_LIBRARY)
endef endef
...@@ -202,7 +202,8 @@ ifeq ($(OPENCV_USE_GPU_MODULE),on) ...@@ -202,7 +202,8 @@ ifeq ($(OPENCV_USE_GPU_MODULE),on)
ifeq ($(INSTALL_CUDA_LIBRARIES),on) ifeq ($(INSTALL_CUDA_LIBRARIES),on)
LOCAL_SHARED_LIBRARIES += $(foreach mod, $(CUDA_RUNTIME_LIBS), $(mod)) LOCAL_SHARED_LIBRARIES += $(foreach mod, $(CUDA_RUNTIME_LIBS), $(mod))
else else
LOCAL_LDLIBS += -L$(CUDA_TOOLKIT_DIR)/targets/armv7-linux-androideabi/lib $(foreach lib, $(CUDA_RUNTIME_LIBS), -l$(lib)) LOCAL_LDLIBS += -L$(CUDA_TOOLKIT_DIR)/targets/armv7-linux-androideabi/lib \
$(foreach lib, $(CUDA_RUNTIME_LIBS), -l$(lib:opencv_dep_%=%))
endif endif
LOCAL_STATIC_LIBRARIES+=libopencv_gpu LOCAL_STATIC_LIBRARIES+=libopencv_gpu
endif endif
......
...@@ -234,54 +234,54 @@ endif() ...@@ -234,54 +234,54 @@ endif()
foreach(__opttype OPT DBG) foreach(__opttype OPT DBG)
SET(OpenCV_LIBS_${__opttype} "${OpenCV_LIBS}") SET(OpenCV_LIBS_${__opttype} "${OpenCV_LIBS}")
SET(OpenCV_EXTRA_LIBS_${__opttype} "") SET(OpenCV_EXTRA_LIBS_${__opttype} "")
endforeach()
# CUDA # Configure CUDA targets
if(OpenCV_CUDA_VERSION) if(OpenCV_CUDA_VERSION)
if(NOT CUDA_FOUND) if(NOT CUDA_FOUND)
find_host_package(CUDA ${OpenCV_CUDA_VERSION} EXACT REQUIRED) find_host_package(CUDA ${OpenCV_CUDA_VERSION} EXACT REQUIRED)
else() else()
if(NOT CUDA_VERSION_STRING VERSION_EQUAL OpenCV_CUDA_VERSION) if(NOT CUDA_VERSION_STRING VERSION_EQUAL OpenCV_CUDA_VERSION)
message(FATAL_ERROR "OpenCV static library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the same version or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") message(FATAL_ERROR "OpenCV static library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the same version or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}")
endif()
endif()
set(OpenCV_CUDA_LIBS_ABSPATH ${CUDA_LIBRARIES})
if(${CUDA_VERSION} VERSION_LESS "5.5")
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_npp_LIBRARY})
else()
find_cuda_helper_libs(nppc)
find_cuda_helper_libs(nppi)
find_cuda_helper_libs(npps)
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nppc_LIBRARY} ${CUDA_nppi_LIBRARY} ${CUDA_npps_LIBRARY})
endif() endif()
endif()
if(OpenCV_USE_CUBLAS) set(OpenCV_CUDA_LIBS_ABSPATH ${CUDA_LIBRARIES})
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_CUBLAS_LIBRARIES})
endif()
if(OpenCV_USE_CUFFT) if(${CUDA_VERSION} VERSION_LESS "5.5")
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_CUFFT_LIBRARIES}) list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_npp_LIBRARY})
endif() else()
find_cuda_helper_libs(nppc)
find_cuda_helper_libs(nppi)
find_cuda_helper_libs(npps)
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nppc_LIBRARY} ${CUDA_nppi_LIBRARY} ${CUDA_npps_LIBRARY})
endif()
if(OpenCV_USE_NVCUVID) if(OpenCV_USE_CUBLAS)
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nvcuvid_LIBRARIES}) list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_CUBLAS_LIBRARIES})
endif() endif()
if(WIN32) if(OpenCV_USE_CUFFT)
list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nvcuvenc_LIBRARIES}) list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_CUFFT_LIBRARIES})
endif() endif()
set(OpenCV_CUDA_LIBS_RELPATH "") if(OpenCV_USE_NVCUVID)
foreach(l ${OpenCV_CUDA_LIBS_ABSPATH}) list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nvcuvid_LIBRARIES})
get_filename_component(_tmp ${l} PATH) endif()
list(APPEND OpenCV_CUDA_LIBS_RELPATH ${_tmp})
endforeach()
list(REMOVE_DUPLICATES OpenCV_CUDA_LIBS_RELPATH) if(WIN32)
link_directories(${OpenCV_CUDA_LIBS_RELPATH}) list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nvcuvenc_LIBRARIES})
endif() endif()
endforeach()
foreach(l ${OpenCV_CUDA_LIBS_ABSPATH})
get_filename_component(_tmp "${l}" NAME_WE)
string(REGEX REPLACE "^lib" "" _tmp "${_tmp}")
if(NOT TARGET "opencv_dep_${_tmp}") # protect against repeated inclusions
add_library("opencv_dep_${_tmp}" UNKNOWN IMPORTED)
set_target_properties("opencv_dep_${_tmp}" PROPERTIES IMPORTED_LOCATION "${l}")
endif()
endforeach()
endif()
# ============================================================== # ==============================================================
# Android camera helper macro # Android camera helper macro
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment