@@ -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
1850function (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 )
3264else ()
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 ()
69114endif ()
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
80124if (HAVE_PROTOBUF)
81125 list (APPEND CUSTOM_STATUS protobuf)
0 commit comments