mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
Do not build protobuf without dnn (#10689)
* Do not build protobuf if dnn is disabled * Added BUILD_LIST cmake option to the cache * Moved protobuf to the top level * Fixed static build * Fixed world build * fixup! Fixed world build
This commit is contained in:
parent
36222c9eed
commit
e56d6054aa
7
3rdparty/protobuf/CMakeLists.txt
vendored
7
3rdparty/protobuf/CMakeLists.txt
vendored
@ -1,5 +1,4 @@
|
|||||||
project(libprotobuf)
|
project(libprotobuf)
|
||||||
|
|
||||||
include(CheckIncludeFiles)
|
include(CheckIncludeFiles)
|
||||||
|
|
||||||
if(HAVE_PTHREAD)
|
if(HAVE_PTHREAD)
|
||||||
@ -136,8 +135,7 @@ append_if_exist(Protobuf_SRCS
|
|||||||
)
|
)
|
||||||
|
|
||||||
add_library(libprotobuf STATIC ${Protobuf_SRCS})
|
add_library(libprotobuf STATIC ${Protobuf_SRCS})
|
||||||
ocv_include_directories(${PROTOBUF_ROOT}/src)
|
target_include_directories(libprotobuf SYSTEM PUBLIC $<BUILD_INTERFACE:${PROTOBUF_ROOT}/src>)
|
||||||
|
|
||||||
set_target_properties(libprotobuf
|
set_target_properties(libprotobuf
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
FOLDER "3rdparty"
|
FOLDER "3rdparty"
|
||||||
@ -146,6 +144,9 @@ set_target_properties(libprotobuf
|
|||||||
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
|
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
get_protobuf_version(Protobuf_VERSION "${PROTOBUF_ROOT}/src")
|
||||||
|
set(Protobuf_VERSION ${Protobuf_VERSION} CACHE INTERNAL "" FORCE)
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(libprotobuf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
ocv_install_target(libprotobuf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
@ -126,6 +126,8 @@ ocv_clear_vars(OpenCVModules_TARGETS)
|
|||||||
|
|
||||||
include(cmake/OpenCVDownload.cmake)
|
include(cmake/OpenCVDownload.cmake)
|
||||||
|
|
||||||
|
set(BUILD_LIST "" CACHE STRING "Build only listed modules (comma-separated, e.g. 'videoio,dnn,ts')")
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Break in case of popular CMake configuration mistakes
|
# Break in case of popular CMake configuration mistakes
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@ -625,6 +627,7 @@ include(cmake/OpenCVFindLibsGUI.cmake)
|
|||||||
include(cmake/OpenCVFindLibsVideo.cmake)
|
include(cmake/OpenCVFindLibsVideo.cmake)
|
||||||
include(cmake/OpenCVFindLibsPerf.cmake)
|
include(cmake/OpenCVFindLibsPerf.cmake)
|
||||||
include(cmake/OpenCVFindLAPACK.cmake)
|
include(cmake/OpenCVFindLAPACK.cmake)
|
||||||
|
include(cmake/OpenCVFindProtobuf.cmake)
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Detect other 3rd-party libraries/tools
|
# Detect other 3rd-party libraries/tools
|
||||||
@ -1359,6 +1362,10 @@ endif()
|
|||||||
|
|
||||||
status(" Custom HAL:" OpenCV_USED_HAL THEN "YES (${OpenCV_USED_HAL})" ELSE "NO")
|
status(" Custom HAL:" OpenCV_USED_HAL THEN "YES (${OpenCV_USED_HAL})" ELSE "NO")
|
||||||
|
|
||||||
|
foreach(s ${CUSTOM_STATUS})
|
||||||
|
status(${CUSTOM_STATUS_${s}})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
if(WITH_CUDA OR HAVE_CUDA)
|
if(WITH_CUDA OR HAVE_CUDA)
|
||||||
ocv_build_features_string(cuda_features
|
ocv_build_features_string(cuda_features
|
||||||
IF HAVE_CUFFT THEN "CUFFT"
|
IF HAVE_CUFFT THEN "CUFFT"
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
# By default, we use protobuf sources from 3rdparty subdirectory and pre-generated .proto files
|
|
||||||
# Note: In case of .proto model updates these variables should be used:
|
|
||||||
# - PROTOBUF_PROTOC_EXECUTABLE (required)
|
|
||||||
# - Protobuf_INCLUDE_DIRS
|
|
||||||
# - Protobuf_LIBRARIES or Protobuf_LIBRARY / Protobuf_LIBRARY_DEBUG for find_package()
|
|
||||||
OCV_OPTION(BUILD_PROTOBUF "Force to build libprotobuf from sources" ON)
|
|
||||||
OCV_OPTION(PROTOBUF_UPDATE_FILES "Force to rebuild .proto files" OFF)
|
|
||||||
|
|
||||||
if(PROTOBUF_UPDATE_FILES)
|
|
||||||
if(NOT COMMAND PROTOBUF_GENERATE_CPP)
|
|
||||||
find_package(Protobuf QUIET)
|
|
||||||
endif()
|
|
||||||
if(DEFINED PROTOBUF_PROTOC_EXECUTABLE AND EXISTS ${PROTOBUF_PROTOC_EXECUTABLE})
|
|
||||||
message(STATUS "The protocol buffer compiler is found (${PROTOBUF_PROTOC_EXECUTABLE})")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "The protocol buffer compiler is not found (PROTOBUF_PROTOC_EXECUTABLE='${PROTOBUF_PROTOC_EXECUTABLE}')")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT BUILD_PROTOBUF AND NOT (DEFINED Protobuf_INCLUDE_DIRS AND DEFINED Protobuf_LIBRARIES))
|
|
||||||
find_package(Protobuf QUIET)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(Protobuf_FOUND AND NOT BUILD_PROTOBUF)
|
|
||||||
# nothing
|
|
||||||
else()
|
|
||||||
set(Protobuf_LIBRARIES libprotobuf)
|
|
||||||
set(Protobuf_INCLUDE_DIRS "${OpenCV_SOURCE_DIR}/3rdparty/protobuf/src")
|
|
||||||
if(NOT TARGET ${Protobuf_LIBRARIES})
|
|
||||||
add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/protobuf" "${OpenCV_BINARY_DIR}/3rdparty/protobuf")
|
|
||||||
endif()
|
|
||||||
set(Protobuf_FOUND 1)
|
|
||||||
endif()
|
|
74
cmake/OpenCVFindProtobuf.cmake
Normal file
74
cmake/OpenCVFindProtobuf.cmake
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# If protobuf is found - libprotobuf target is available
|
||||||
|
|
||||||
|
ocv_option(WITH_PROTOBUF "Enable libprotobuf" ON)
|
||||||
|
ocv_option(BUILD_PROTOBUF "Force to build libprotobuf from sources" ON)
|
||||||
|
ocv_option(PROTOBUF_UPDATE_FILES "Force rebuilding .proto files (protoc should be available)" OFF)
|
||||||
|
|
||||||
|
set(HAVE_PROTOBUF FALSE)
|
||||||
|
|
||||||
|
if(NOT WITH_PROTOBUF)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(get_protobuf_version version include)
|
||||||
|
file(STRINGS "${include}/google/protobuf/stubs/common.h" ver REGEX "#define GOOGLE_PROTOBUF_VERSION [0-9]+")
|
||||||
|
string(REGEX MATCHALL "[0-9]+" ver ${ver})
|
||||||
|
math(EXPR major "${ver} / 1000000")
|
||||||
|
math(EXPR minor "${ver} / 1000 % 1000")
|
||||||
|
math(EXPR patch "${ver} % 1000")
|
||||||
|
set(${version} "${major}.${minor}.${patch}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(BUILD_PROTOBUF)
|
||||||
|
add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/protobuf")
|
||||||
|
set(HAVE_PROTOBUF TRUE)
|
||||||
|
else()
|
||||||
|
unset(Protobuf_VERSION CACHE)
|
||||||
|
find_package(Protobuf QUIET)
|
||||||
|
|
||||||
|
# Backwards compatibility
|
||||||
|
# Define camel case versions of input variables
|
||||||
|
foreach(UPPER
|
||||||
|
PROTOBUF_FOUND
|
||||||
|
PROTOBUF_LIBRARY
|
||||||
|
PROTOBUF_INCLUDE_DIR
|
||||||
|
PROTOBUF_VERSION
|
||||||
|
)
|
||||||
|
if (DEFINED ${UPPER})
|
||||||
|
string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
|
||||||
|
if (NOT DEFINED ${Camel})
|
||||||
|
set(${Camel} ${${UPPER}})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
# end of compatibility block
|
||||||
|
|
||||||
|
if(Protobuf_FOUND)
|
||||||
|
if(TARGET protobuf::libprotobuf)
|
||||||
|
add_library(libprotobuf INTERFACE)
|
||||||
|
target_link_libraries(libprotobuf INTERFACE protobuf::libprotobuf)
|
||||||
|
else()
|
||||||
|
add_library(libprotobuf UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(libprotobuf PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${Protobuf_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
get_protobuf_version(Protobuf_VERSION "${Protobuf_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
set(HAVE_PROTOBUF TRUE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
|
||||||
|
find_package(Protobuf QUIET)
|
||||||
|
if(NOT COMMAND PROTOBUF_GENERATE_CPP)
|
||||||
|
message(FATAL_ERROR "PROTOBUF_GENERATE_CPP command is not available")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(HAVE_PROTOBUF)
|
||||||
|
list(APPEND CUSTOM_STATUS protobuf)
|
||||||
|
list(APPEND CUSTOM_STATUS_protobuf " Protobuf:"
|
||||||
|
BUILD_PROTOBUF THEN "build (${Protobuf_VERSION})"
|
||||||
|
ELSE "${Protobuf_LIBRARY} (${Protobuf_VERSION})")
|
||||||
|
endif()
|
@ -653,7 +653,14 @@ macro(ocv_module_include_directories)
|
|||||||
"${OPENCV_MODULE_${the_module}_LOCATION}/src"
|
"${OPENCV_MODULE_${the_module}_LOCATION}/src"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}" # for precompiled headers
|
"${CMAKE_CURRENT_BINARY_DIR}" # for precompiled headers
|
||||||
)
|
)
|
||||||
ocv_target_include_modules(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${ARGN})
|
foreach(arg ${ARGN})
|
||||||
|
if(IS_ABSOLUTE "${arg}")
|
||||||
|
list(APPEND incs "${arg}")
|
||||||
|
else()
|
||||||
|
list(APPEND incs "${OPENCV_MODULE_${the_module}_LOCATION}/${arg}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
ocv_target_include_modules(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${incs})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,12 +2,7 @@ if(WINRT)
|
|||||||
ocv_module_disable(dnn)
|
ocv_module_disable(dnn)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED BUILD_opencv_dnn AND NOT BUILD_opencv_dnn)
|
if(NOT HAVE_PROTOBUF)
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(${OpenCV_SOURCE_DIR}/cmake/OpenCVFindLibProtobuf.cmake)
|
|
||||||
if(NOT Protobuf_FOUND)
|
|
||||||
ocv_module_disable(opencv_dnn)
|
ocv_module_disable(opencv_dnn)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -21,8 +16,6 @@ ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-shadow -Wno-parentheses -Wmaybe-uninit
|
|||||||
)
|
)
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4701 /wd4100)
|
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4701 /wd4100)
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/ocl4dnn/include ${OPENCL_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions( -D_CRT_SECURE_NO_WARNINGS=1 )
|
add_definitions( -D_CRT_SECURE_NO_WARNINGS=1 )
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146
|
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146
|
||||||
@ -45,8 +38,9 @@ if(ANDROID)
|
|||||||
add_definitions(-DDISABLE_POSIX_MEMALIGN -DTH_DISABLE_HEAP_TRACKING)
|
add_definitions(-DDISABLE_POSIX_MEMALIGN -DTH_DISABLE_HEAP_TRACKING)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#supress warnings in autogenerated caffe.pb.* files
|
|
||||||
add_definitions(-DHAVE_PROTOBUF=1)
|
add_definitions(-DHAVE_PROTOBUF=1)
|
||||||
|
|
||||||
|
#supress warnings in autogenerated caffe.pb.* files
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS
|
ocv_warnings_disable(CMAKE_CXX_FLAGS
|
||||||
-Wunused-parameter -Wundef -Wignored-qualifiers -Wno-enum-compare
|
-Wunused-parameter -Wundef -Wignored-qualifiers -Wno-enum-compare
|
||||||
-Wdeprecated-declarations
|
-Wdeprecated-declarations
|
||||||
@ -59,26 +53,18 @@ ocv_warnings_disable(CMAKE_CXX_FLAGS
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(PROTOBUF_UPDATE_FILES)
|
if(PROTOBUF_UPDATE_FILES)
|
||||||
file(GLOB proto_files ${CMAKE_CURRENT_SOURCE_DIR}/src/tensorflow/*.proto)
|
file(GLOB proto_files "${CMAKE_CURRENT_SOURCE_DIR}/src/tensorflow/*.proto" "${CMAKE_CURRENT_SOURCE_DIR}/src/caffe/opencv-caffe.proto")
|
||||||
list(APPEND proto_files ${CMAKE_CURRENT_SOURCE_DIR}/src/caffe/opencv-caffe.proto)
|
|
||||||
set(PROTOBUF_GENERATE_CPP_APPEND_PATH ON) # required for tensorflow
|
set(PROTOBUF_GENERATE_CPP_APPEND_PATH ON) # required for tensorflow
|
||||||
PROTOBUF_GENERATE_CPP(Protobuf_HDRS Protobuf_SRCS ${proto_files})
|
protobuf_generate_cpp(fw_srcs fw_hdrs ${proto_files})
|
||||||
else()
|
else()
|
||||||
file(GLOB fw_srcs ${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow/*.cc)
|
file(GLOB fw_srcs "${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow/*.cc" "${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/opencv-caffe.pb.cc")
|
||||||
file(GLOB fw_hdrs ${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow/*.h)
|
file(GLOB fw_hdrs "${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/opencv-caffe.pb.h")
|
||||||
list(APPEND fw_srcs ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/opencv-caffe.pb.cc)
|
set(fw_inc "misc/caffe" "misc/tensorflow")
|
||||||
list(APPEND fw_hdrs ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/opencv-caffe.pb.h)
|
|
||||||
list(APPEND Protobuf_SRCS ${fw_srcs})
|
|
||||||
list(APPEND Protobuf_HDRS ${fw_hdrs})
|
|
||||||
list(APPEND Protobuf_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe)
|
|
||||||
list(APPEND Protobuf_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/misc/tensorflow)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ocv_source_group("Src\\protobuf" FILES ${Protobuf_SRCS} ${Protobuf_HDRS})
|
ocv_module_include_directories(${fw_inc} src/ocl4dnn/include ${OPENCL_INCLUDE_DIRS})
|
||||||
ocv_module_include_directories(include ${Protobuf_INCLUDE_DIRS})
|
ocv_glob_module_sources(SOURCES ${fw_srcs})
|
||||||
|
ocv_create_module(libprotobuf ${LAPACK_LIBRARIES})
|
||||||
ocv_glob_module_sources(${Protobuf_SRCS} ${Protobuf_HDRS} ${CBLAS_H_PROXY_PATH})
|
|
||||||
ocv_create_module(${Protobuf_LIBRARIES} ${LAPACK_LIBRARIES})
|
|
||||||
ocv_add_samples()
|
ocv_add_samples()
|
||||||
ocv_add_accuracy_tests()
|
ocv_add_accuracy_tests()
|
||||||
ocv_add_perf_tests()
|
ocv_add_perf_tests()
|
||||||
|
@ -54,7 +54,11 @@ void shrinkCaffeModel(const String& src, const String& dst, const std::vector<St
|
|||||||
blob->set_raw_data_type(caffe::FLOAT16);
|
blob->set_raw_data_type(caffe::FLOAT16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if GOOGLE_PROTOBUF_VERSION < 3005000
|
||||||
|
size_t msgSize = saturate_cast<size_t>(net.ByteSize());
|
||||||
|
#else
|
||||||
size_t msgSize = net.ByteSizeLong();
|
size_t msgSize = net.ByteSizeLong();
|
||||||
|
#endif
|
||||||
std::vector<uint8_t> output(msgSize);
|
std::vector<uint8_t> output(msgSize);
|
||||||
net.SerializeWithCachedSizesToArray(&output[0]);
|
net.SerializeWithCachedSizesToArray(&output[0]);
|
||||||
|
|
||||||
|
@ -38,20 +38,20 @@ endif()
|
|||||||
|
|
||||||
ocv_add_module(world opencv_core)
|
ocv_add_module(world opencv_core)
|
||||||
|
|
||||||
set(headers_list "HEADERS")
|
set(headers_list)
|
||||||
set(sources_list "SOURCES")
|
set(sources_list)
|
||||||
set(link_deps "")
|
set(link_deps "")
|
||||||
foreach(m ${OPENCV_MODULE_${the_module}_DEPS} opencv_world)
|
foreach(m ${OPENCV_MODULE_${the_module}_DEPS} opencv_world)
|
||||||
if(OPENCV_MODULE_${m}_IS_PART_OF_WORLD)
|
if(OPENCV_MODULE_${m}_IS_PART_OF_WORLD)
|
||||||
set(headers_list "${headers_list};${OPENCV_MODULE_${m}_HEADERS}")
|
list(APPEND headers_list ${OPENCV_MODULE_${m}_HEADERS})
|
||||||
set(sources_list "${sources_list};${OPENCV_MODULE_${m}_SOURCES}")
|
list(APPEND sources_list ${OPENCV_MODULE_${m}_SOURCES})
|
||||||
endif()
|
endif()
|
||||||
if(NOT " ${OPENCV_MODULE_${m}_LINK_DEPS}" STREQUAL " ")
|
if(NOT " ${OPENCV_MODULE_${m}_LINK_DEPS}" STREQUAL " ")
|
||||||
list(APPEND link_deps ${OPENCV_MODULE_${m}_LINK_DEPS})
|
list(APPEND link_deps ${OPENCV_MODULE_${m}_LINK_DEPS})
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
ocv_glob_module_sources(${headers_list} ${sources_list})
|
ocv_glob_module_sources(HEADERS ${headers_list} SOURCES ${sources_list})
|
||||||
|
|
||||||
ocv_module_include_directories()
|
ocv_module_include_directories()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user