Skip to content

Commit e6d6b19

Browse files
committed
Fixes for protobuf
1 parent bf8fcc4 commit e6d6b19

File tree

5 files changed

+71
-11
lines changed

5 files changed

+71
-11
lines changed

cmake/OpenCVFindLibsGrfmt.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ if(WITH_OPENEXR)
294294
ocv_clear_vars(HAVE_OPENEXR)
295295
if(NOT BUILD_OPENEXR)
296296
ocv_clear_internal_cache_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
297+
hunter_add_package(OpenEXR)
297298
include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
298299
endif()
299300

cmake/OpenCVFindOpenEXR.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111

1212
if(NOT OPENCV_SKIP_OPENEXR_FIND_PACKAGE)
1313
if(HUNTER_ENABLED)
14-
hunter_add_package(OpenEXR)
15-
find_package(OpenEXR CONFIG QUIET)
14+
find_package(OpenEXR CONFIG REQUIRED)
1615
else()
1716
find_package(OpenEXR 3 QUIET)
1817
endif()

cmake/OpenCVFindProtobuf.cmake

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,38 @@ ocv_option(PROTOBUF_UPDATE_FILES "Force rebuilding .proto files (protoc should b
1414
# - Protobuf_LIBRARY
1515
# - Protobuf_PROTOC_EXECUTABLE
1616

17+
function(generate_protobuf_files PROTO_FILES_INPUT)
18+
set(PROTO_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/Protobuf")
19+
20+
foreach(PROTO_FILE ${PROTO_FILES_INPUT})
21+
get_filename_component(PROTO_FILE_ABSOLUTE ${PROTO_FILE} ABSOLUTE)
22+
get_filename_component(PROTO_FILE_BASENAME ${PROTO_FILE} NAME_WE)
23+
get_filename_component(PROTO_FILE_DIR ${PROTO_FILE} DIRECTORY)
24+
25+
set(PB_SRC_OUT "${PROTO_OUTPUT_DIR}/${PROTO_FILE_BASENAME}.pb.cc")
26+
set(PB_HDR_OUT "${PROTO_OUTPUT_DIR}/${PROTO_FILE_BASENAME}.pb.h")
27+
28+
list(APPEND fw_srcs "${PB_SRC_OUT}")
29+
list(APPEND fw_hdrs "${PB_HDR_OUT}")
30+
31+
message("adding custom command for Generating ${PROTO_FILE_BASENAME}.pb.h/cc from ${PROTO_FILE}")
32+
33+
add_custom_command(
34+
OUTPUT ${PB_SRC_OUT} ${PB_HDR_OUT}
35+
COMMAND protobuf::protoc --cpp_out "${PROTO_OUTPUT_DIR}" -I ${PROTO_FILE_DIR} ${PROTO_FILE_ABSOLUTE}
36+
COMMENT "Generating ${PROTO_FILE_BASENAME}.pb.h/cc from ${PROTO_FILE}"
37+
DEPENDS ${PROTO_FILE}
38+
VERBATIM
39+
)
40+
endforeach()
41+
42+
if(NOT EXISTS "${PROTO_OUTPUT_DIR}")
43+
file(MAKE_DIRECTORY "${PROTO_OUTPUT_DIR}")
44+
endif()
45+
46+
set(fw_srcs "${fw_srcs}" PARENT_SCOPE)
47+
set(fw_hdrs "${fw_hdrs}" PARENT_SCOPE)
48+
endfunction()
1749

1850
function(get_protobuf_version version include)
1951
file(STRINGS "${include}/google/protobuf/stubs/common.h" ver REGEX "#define GOOGLE_PROTOBUF_VERSION [0-9]+")
@@ -31,6 +63,19 @@ if(BUILD_PROTOBUF)
3163
set(HAVE_PROTOBUF TRUE)
3264
else()
3365
unset(Protobuf_VERSION CACHE)
66+
67+
if(IOS OR ANDROID)
68+
# add cmake/host subdiretcory as host project to install protoc
69+
include(hunter_experimental_add_host_project)
70+
hunter_experimental_add_host_project("${OpenCV_SOURCE_DIR}/cmake/protobuf-host")
71+
72+
add_executable(protobuf::protoc IMPORTED)
73+
set_property(TARGET protobuf::protoc APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
74+
set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LOCATION_RELEASE "${HUNTER_HOST_ROOT}/bin/protoc")
75+
76+
message(STATUS "Using imported protoc from host: ${HUNTER_HOST_ROOT}/bin/protoc")
77+
endif(IOS OR ANDROID)
78+
3479
hunter_add_package(Protobuf)
3580
find_package(Protobuf CONFIG REQUIRED)
3681

@@ -68,14 +113,13 @@ else()
68113
endif()
69114
endif()
70115

71-
if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
72-
# message(FATAL_ERROR "Can't configure protobuf dependency (BUILD_PROTOBUF=${BUILD_PROTOBUF} PROTOBUF_UPDATE_FILES=${PROTOBUF_UPDATE_FILES})")
73-
hunter_add_package(Protobuf)
74-
find_package(Protobuf CONFIG REQUIRED)
75-
if(NOT COMMAND PROTOBUF_GENERATE_CPP)
76-
message(FATAL_ERROR "PROTOBUF_GENERATE_CPP command is not available")
77-
endif()
78-
endif()
116+
# if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
117+
# message(FATAL_ERROR "Can't configure protobuf dependency (BUILD_PROTOBUF=${BUILD_PROTOBUF} PROTOBUF_UPDATE_FILES=${PROTOBUF_UPDATE_FILES})")
118+
119+
# if(NOT COMMAND PROTOBUF_GENERATE_CPP)
120+
# message(FATAL_ERROR "PROTOBUF_GENERATE_CPP command is not available")
121+
# endif()
122+
# endif()
79123

80124
if(HAVE_PROTOBUF)
81125
list(APPEND CUSTOM_STATUS protobuf)

cmake/protobuf-host/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# CMake project to install protobuf::protoc from hunter Protobuf package
2+
cmake_minimum_required(VERSION 3.0)
3+
4+
# Emulate HunterGate:
5+
# * https://github.com/hunter-packages/gate
6+
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../../gate/cmake/HunterGate.cmake)
7+
HunterGate(URL "${HUNTER_HOST_URL}" SHA1 "${HUNTER_HOST_SHA1}")
8+
9+
project(download-Protobuf-host)
10+
11+
hunter_add_package(Protobuf)

modules/dnn/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,12 @@ set(libs "")
105105
if(PROTOBUF_UPDATE_FILES)
106106
file(GLOB proto_files "${CMAKE_CURRENT_LIST_DIR}/src/tensorflow/*.proto" "${CMAKE_CURRENT_LIST_DIR}/src/caffe/opencv-caffe.proto" "${CMAKE_CURRENT_LIST_DIR}/src/onnx/opencv-onnx.proto")
107107
set(PROTOBUF_GENERATE_CPP_APPEND_PATH ON) # required for tensorflow
108-
protobuf_generate_cpp(fw_srcs fw_hdrs ${proto_files})
108+
# protobuf_generate_cpp(fw_srcs fw_hdrs ${proto_files})
109+
set(fw_srcs "")
110+
set(fw_hdrs "")
111+
generate_protobuf_files("${proto_files}")
112+
113+
list(APPEND include_dirs "${CMAKE_CURRENT_BINARY_DIR}/Protobuf")
109114
else()
110115
file(GLOB fw_srcs "${CMAKE_CURRENT_LIST_DIR}/misc/tensorflow/*.cc" "${CMAKE_CURRENT_LIST_DIR}/misc/caffe/opencv-caffe.pb.cc" "${CMAKE_CURRENT_LIST_DIR}/misc/onnx/opencv-onnx.pb.cc")
111116
file(GLOB fw_hdrs "${CMAKE_CURRENT_LIST_DIR}/misc/tensorflow/*.h" "${CMAKE_CURRENT_LIST_DIR}/misc/caffe/opencv-caffe.pb.h" "${CMAKE_CURRENT_LIST_DIR}/misc/onnx/opencv-onnx.pb.h")

0 commit comments

Comments
 (0)