Skip to content

Commit 1c4c58d

Browse files
committed
3rdparty: update CMake scripts for protobuf
1 parent 63b3055 commit 1c4c58d

File tree

3 files changed

+187
-0
lines changed

3 files changed

+187
-0
lines changed

3rdparty/protobuf/CMakeLists.txt

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
project(libprotobuf)
2+
3+
include(CheckIncludeFiles)
4+
5+
if(NOT MSVC)
6+
check_include_files("pthread.h" HAVE_PTHREAD)
7+
if(HAVE_PTHREAD)
8+
add_definitions(-DHAVE_PTHREAD=1)
9+
endif()
10+
endif()
11+
12+
if(MSVC)
13+
add_definitions( -D_CRT_SECURE_NO_WARNINGS=1 )
14+
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146
15+
/wd4305 /wd4127 /wd4100 /wd4512 /wd4125 /wd4389 /wd4510 /wd4610
16+
/wd4702 /wd4456 /wd4457 /wd4065 /wd4310 /wd4661 /wd4506
17+
)
18+
else()
19+
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated -Wmissing-prototypes -Wmissing-declarations -Wshadow
20+
-Wunused-parameter -Wunused-local-typedefs -Wsign-compare -Wsign-promo
21+
-Wundef -Wtautological-undefined-compare -Wignored-qualifiers -Wextra
22+
-Wunused-function -Wunused-const-variable -Wshorten-64-to-32
23+
)
24+
endif()
25+
if(CV_ICC)
26+
ocv_warnings_disable(CMAKE_CXX_FLAGS
27+
-wd265 -wd858 -wd873 -wd2196
28+
)
29+
endif()
30+
31+
# Easier to support different versions of protobufs
32+
function(append_if_exist OUTPUT_LIST)
33+
set(${OUTPUT_LIST})
34+
foreach(fil ${ARGN})
35+
if(EXISTS ${fil})
36+
list(APPEND ${OUTPUT_LIST} "${fil}")
37+
else()
38+
message(WARNING "file missing: ${fil}")
39+
endif()
40+
endforeach()
41+
set(${OUTPUT_LIST} ${${OUTPUT_LIST}} PARENT_SCOPE)
42+
endfunction()
43+
44+
set(PROTOBUF_ROOT "${CMAKE_CURRENT_LIST_DIR}")
45+
46+
if(MSVC)
47+
set(ATOMICOPS_INTERNALS ${PROTOBUF_ROOT}/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc)
48+
else()
49+
set(ATOMICOPS_INTERNALS ${PROTOBUF_ROOT}/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc)
50+
endif()
51+
52+
53+
append_if_exist(Protobuf_SRCS
54+
# libprotobuf-lite
55+
${PROTOBUF_ROOT}/src/google/protobuf/arena.cc
56+
${PROTOBUF_ROOT}/src/google/protobuf/arenastring.cc
57+
${PROTOBUF_ROOT}/src/google/protobuf/extension_set.cc
58+
${PROTOBUF_ROOT}/src/google/protobuf/generated_message_util.cc
59+
${PROTOBUF_ROOT}/src/google/protobuf/io/coded_stream.cc
60+
${PROTOBUF_ROOT}/src/google/protobuf/io/zero_copy_stream.cc
61+
${PROTOBUF_ROOT}/src/google/protobuf/io/zero_copy_stream_impl_lite.cc
62+
${PROTOBUF_ROOT}/src/google/protobuf/message_lite.cc
63+
${PROTOBUF_ROOT}/src/google/protobuf/repeated_field.cc
64+
${ATOMICOPS_INTERNALS}
65+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/bytestream.cc
66+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/common.cc
67+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/int128.cc
68+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/once.cc
69+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/status.cc
70+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/statusor.cc
71+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/stringpiece.cc
72+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/stringprintf.cc
73+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/structurally_valid.cc
74+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/strutil.cc
75+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/time.cc
76+
${PROTOBUF_ROOT}/src/google/protobuf/wire_format_lite.cc
77+
# libprotobuf
78+
${PROTOBUF_ROOT}/src/google/protobuf/any.cc
79+
${PROTOBUF_ROOT}/src/google/protobuf/any.pb.cc
80+
${PROTOBUF_ROOT}/src/google/protobuf/api.pb.cc
81+
# ${PROTOBUF_ROOT}/src/google/protobuf/compiler/importer.cc
82+
# ${PROTOBUF_ROOT}/src/google/protobuf/compiler/parser.cc
83+
${PROTOBUF_ROOT}/src/google/protobuf/descriptor.cc
84+
${PROTOBUF_ROOT}/src/google/protobuf/descriptor.pb.cc
85+
${PROTOBUF_ROOT}/src/google/protobuf/descriptor_database.cc
86+
${PROTOBUF_ROOT}/src/google/protobuf/duration.pb.cc
87+
${PROTOBUF_ROOT}/src/google/protobuf/dynamic_message.cc
88+
${PROTOBUF_ROOT}/src/google/protobuf/empty.pb.cc
89+
${PROTOBUF_ROOT}/src/google/protobuf/extension_set_heavy.cc
90+
${PROTOBUF_ROOT}/src/google/protobuf/field_mask.pb.cc
91+
${PROTOBUF_ROOT}/src/google/protobuf/generated_message_reflection.cc
92+
${PROTOBUF_ROOT}/src/google/protobuf/io/gzip_stream.cc
93+
${PROTOBUF_ROOT}/src/google/protobuf/io/printer.cc
94+
${PROTOBUF_ROOT}/src/google/protobuf/io/strtod.cc
95+
${PROTOBUF_ROOT}/src/google/protobuf/io/tokenizer.cc
96+
${PROTOBUF_ROOT}/src/google/protobuf/io/zero_copy_stream_impl.cc
97+
${PROTOBUF_ROOT}/src/google/protobuf/map_field.cc
98+
${PROTOBUF_ROOT}/src/google/protobuf/message.cc
99+
${PROTOBUF_ROOT}/src/google/protobuf/reflection_ops.cc
100+
${PROTOBUF_ROOT}/src/google/protobuf/service.cc
101+
${PROTOBUF_ROOT}/src/google/protobuf/source_context.pb.cc
102+
${PROTOBUF_ROOT}/src/google/protobuf/struct.pb.cc
103+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/mathlimits.cc
104+
${PROTOBUF_ROOT}/src/google/protobuf/stubs/substitute.cc
105+
${PROTOBUF_ROOT}/src/google/protobuf/text_format.cc
106+
${PROTOBUF_ROOT}/src/google/protobuf/timestamp.pb.cc
107+
${PROTOBUF_ROOT}/src/google/protobuf/type.pb.cc
108+
${PROTOBUF_ROOT}/src/google/protobuf/unknown_field_set.cc
109+
${PROTOBUF_ROOT}/src/google/protobuf/util/field_comparator.cc
110+
${PROTOBUF_ROOT}/src/google/protobuf/util/field_mask_util.cc
111+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/datapiece.cc
112+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/default_value_objectwriter.cc
113+
# ${PROTOBUF_ROOT}/src/google/protobuf/util/internal/error_listener.cc
114+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/field_mask_utility.cc
115+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/json_escaping.cc
116+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/json_objectwriter.cc
117+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/json_stream_parser.cc
118+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/object_writer.cc
119+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/proto_writer.cc
120+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/protostream_objectsource.cc
121+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/protostream_objectwriter.cc
122+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/type_info.cc
123+
# ${PROTOBUF_ROOT}/src/google/protobuf/util/internal/type_info_test_helper.cc
124+
${PROTOBUF_ROOT}/src/google/protobuf/util/internal/utility.cc
125+
${PROTOBUF_ROOT}/src/google/protobuf/util/json_util.cc
126+
${PROTOBUF_ROOT}/src/google/protobuf/util/message_differencer.cc
127+
${PROTOBUF_ROOT}/src/google/protobuf/util/time_util.cc
128+
${PROTOBUF_ROOT}/src/google/protobuf/util/type_resolver_util.cc
129+
${PROTOBUF_ROOT}/src/google/protobuf/wire_format.cc
130+
${PROTOBUF_ROOT}/src/google/protobuf/wrappers.pb.cc
131+
)
132+
133+
if(CMAKE_VERSION VERSION_LESS 2.8.9 AND UNIX)
134+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
135+
endif()
136+
137+
add_library(libprotobuf STATIC ${Protobuf_SRCS})
138+
ocv_include_directories(${PROTOBUF_ROOT}/src)
139+
140+
set_target_properties(libprotobuf
141+
PROPERTIES
142+
FOLDER "3rdparty"
143+
POSITION_INDEPENDENT_CODE 1 # CMake 2.8.9+
144+
OUTPUT_NAME libprotobuf
145+
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
146+
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
147+
)
148+
149+
if(NOT BUILD_SHARED_LIBS)
150+
ocv_install_target(libprotobuf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
151+
endif()

3rdparty/protobuf/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Project: Protocol Buffers - Google's data interchange format
2+
Source code: https://github.com/google/protobuf
3+
Version: 3.1.0

cmake/OpenCVFindLibProtobuf.cmake

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# By default, we use protobuf sources from 3rdparty subdirectory and pre-generated .proto files
2+
# Note: In case of .proto model updates these variables should be used:
3+
# - Protobuf_PROTOC_EXECUTABLE (required)
4+
# - Protobuf_INCLUDE_DIRS
5+
# - Protobuf_LIBRARIES or Protobuf_LIBRARY / Protobuf_LIBRARY_DEBUG for find_package()
6+
OCV_OPTION(BUILD_PROTOBUF "Force to build libprotobuf from sources" ON)
7+
OCV_OPTION(PROTOBUF_UPDATE_FILES "Force to rebuild .proto files" OFF)
8+
9+
if(PROTOBUF_UPDATE_FILES)
10+
if(NOT DEFINED Protobuf_PROTOC_EXECUTABLE)
11+
find_package(Protobuf QUIET)
12+
endif()
13+
if(DEFINED Protobuf_PROTOC_EXECUTABLE AND EXISTS ${Protobuf_PROTOC_EXECUTABLE})
14+
message(STATUS "The protocol buffer compiler is found (${Protobuf_PROTOC_EXECUTABLE})")
15+
else()
16+
message(FATAL_ERROR "The protocol buffer compiler is not found (Protobuf_PROTOC_EXECUTABLE='${Protobuf_PROTOC_EXECUTABLE}')")
17+
endif()
18+
endif()
19+
20+
if(NOT BUILD_PROTOBUF AND NOT (DEFINED Protobuf_INCLUDE_DIRS AND DEFINED Protobuf_LIBRARIES))
21+
find_package(Protobuf QUIET)
22+
endif()
23+
24+
if(Protobuf_FOUND)
25+
# nothing
26+
else()
27+
set(Protobuf_LIBRARIES libprotobuf)
28+
set(Protobuf_INCLUDE_DIRS "${OpenCV_SOURCE_DIR}/3rdparty/protobuf/src")
29+
if(NOT TARGET ${Protobuf_LIBRARIES})
30+
add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/protobuf" "${OpenCV_BINARY_DIR}/3rdparty/protobuf")
31+
endif()
32+
set(Protobuf_FOUND 1)
33+
endif()

0 commit comments

Comments
 (0)