mirror of https://github.com/opencv/opencv.git
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 buildpull/10758/head
parent
36222c9eed
commit
e56d6054aa
8 changed files with 113 additions and 67 deletions
@ -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() |
@ -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() |
Loading…
Reference in new issue