Commit 57d63db9 authored by Alexander Alekhin's avatar Alexander Alekhin

3rdparty: libprotobuf v3.1.0

parent f2af57c6
......@@ -10,8 +10,10 @@ set(the_description "Deep neural network module. It allows to load models from d
set(OPENCV_MODULE_IS_PART_OF_WORLD OFF)
ocv_add_module(dnn opencv_core opencv_imgproc WRAP python matlab)
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-shadow -Wno-parentheses -Wmaybe-uninitialized -Wsign-promo -Wmissing-declarations -Wmissing-prototypes)
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4701)
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-shadow -Wno-parentheses -Wmaybe-uninitialized -Wsign-promo
-Wmissing-declarations -Wmissing-prototypes
)
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4701 /wd4100)
# ----------------------------------------------------------------------------
# Resolve libprotobuf dependency
......
OCV_OPTION(BUILD_LIBPROTOBUF_FROM_SOURCES "Force to build libprotobuf from sources (don't try to find it in system)" OFF)
# By default, we use built-in protobuf sources and pre-generated .proto files
# Note: In case of .proto model updates these variables should be used:
# - PROTOBUF_PROTOC_EXECUTABLE (required)
# - PROTOBUF_INCLUDE_DIR
# - PROTOBUF_LIBRARIES or PROTOBUF_LIBRARY / PROTOBUF_LIBRARY_DEBUG for find_package()
OCV_OPTION(BUILD_PROTOBUF "Force to build libprotobuf from sources" ON)
OCV_OPTION(UPDATE_PROTO_FILES "Force to rebuild .proto files" OFF)
if(NOT BUILD_LIBPROTOBUF_FROM_SOURCES)
find_package(Protobuf)
endif()
if(NOT BUILD_LIBPROTOBUF_FROM_SOURCES AND PROTOBUF_FOUND AND EXISTS ${PROTOBUF_PROTOC_EXECUTABLE})
message(STATUS "The protocol buffer compiler and libprotobuf were found")
PROTOBUF_GENERATE_CPP(PROTOBUF_HDRS PROTOBUF_SRCS src/caffe/caffe.proto)
add_definitions(-DHAVE_PROTOBUF=1)
else()
message(STATUS "Build libprotobuf from sources:")
if(NOT PROTOBUF_FOUND)
message(STATUS " libprotobuf not found into system")
if(UPDATE_PROTO_FILES)
if(NOT DEFINED PROTOBUF_PROTOC_EXECUTABLE)
find_package(Protobuf QUIET)
endif()
if(NOT EXISTS ${PROTOBUF_PROTOC_EXECUTABLE})
message(STATUS " The protocol buffer compiler not found")
if(DEFINED PROTOBUF_PROTOC_EXECUTABLE AND EXISTS ${PROTOBUF_PROTOC_EXECUTABLE})
message(STATUS "The protocol buffer compiler is found (${PROTOBUF_PROTOC_EXECUTABLE})")
PROTOBUF_GENERATE_CPP(PROTOBUF_HDRS PROTOBUF_SRCS
src/caffe/caffe.proto
)
else()
message(FATAL_ERROR "The protocol buffer compiler is not found (PROTOBUF_PROTOC_EXECUTABLE='${PROTOBUF_PROTOC_EXECUTABLE}')")
endif()
endif()
#take into account OpenCV two-pass module addition scheme
if(NOT OPENCV_INITIAL_PASS) #TODO: it looks like a hack
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/protobuf)
endif()
if(NOT BUILD_PROTOBUF AND NOT (DEFINED PROTOBUF_INCLUDE_DIR AND DEFINED PROTOBUF_LIBRARIES))
find_package(Protobuf QUIET)
endif()
if(PROTOBUF_FOUND)
# nothing
else()
include(${CMAKE_CURRENT_LIST_DIR}/download_protobuf.cmake)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/protobuf)
set(PROTOBUF_LIBRARIES libprotobuf)
set(PROTOBUF_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/protobuf/src ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe)
set(PROTOBUF_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/caffe.pb.cc)
set(PROTOBUF_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/caffe.pb.h)
add_definitions(-DHAVE_PROTOBUF=1)
set(PROTOBUF_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/protobuf/sources/protobuf-3.1.0/src)
endif()
if(NOT UPDATE_PROTO_FILES)
list(APPEND PROTOBUF_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/caffe.pb.cc)
list(APPEND PROTOBUF_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe/caffe.pb.h)
list(APPEND PROTOBUF_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/misc/caffe)
endif()
add_definitions(-DHAVE_PROTOBUF=1)
#supress warnings in autogenerated caffe.pb.* files
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-parameter)
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4125 /wd4267 /wd4127 /wd4244 /wd4512 /wd4702)
endif()
\ No newline at end of file
#supress warnings in autogenerated caffe.pb.* files
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-parameter -Wundef)
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4125 /wd4267 /wd4127 /wd4244 /wd4512 /wd4702)
set(PROTOBUF_CPP_NAME "libprotobuf")
set(PROTOBUF_CPP_DOWNLOAD_HASH "bd5e3eed635a8d32e2b99658633815ef")
set(PROTOBUF_CPP_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/protobuf/sources") # /protobuf-3.1.0 subdirectory
set(OPENCV_PROTOBUF_CPP_DOWNLOAD_URL ${OPENCV_PROTOBUF_URL};$ENV{OPENCV_PROTOBUF_URL};https://github.com/google/protobuf/releases/download/)
function(ocv_protobuf_download file ID)
if(DEFINED ${ID}_DOWNLOADED_HASH
AND ${ID}_DOWNLOADED_HASH STREQUAL ${ID}_DOWNLOAD_HASH
AND EXISTS ${${ID}_PATH})
# Files have been downloaded and checked by the previous CMake run
return()
else()
if(EXISTS ${${ID}_PATH})
message(STATUS "${${ID}_NAME}: Removing previous unpacked files: ${${ID}_PATH}")
file(REMOVE_RECURSE ${${ID}_PATH})
endif()
endif()
unset(${ID}_DOWNLOADED_HASH CACHE)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.download)
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/.download/.gitignore" "*\n")
ocv_download(PACKAGE ${file}
HASH ${${ID}_DOWNLOAD_HASH}
URL ${OPENCV_${ID}_DOWNLOAD_URL}
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.download)
set(${ID}_ARCHIVE "${DOWNLOAD_PACKAGE_LOCATION}")
ocv_assert(EXISTS "${${ID}_ARCHIVE}")
ocv_assert(NOT EXISTS "${${ID}_PATH}")
file(MAKE_DIRECTORY ${${ID}_PATH})
ocv_assert(EXISTS "${${ID}_PATH}")
file(WRITE "${${ID}_PATH}/.gitignore" "*\n")
message(STATUS "${${ID}_NAME}: Unpacking ${file} to ${${ID}_PATH}...")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${${ID}_ARCHIVE}"
WORKING_DIRECTORY "${${ID}_PATH}"
RESULT_VARIABLE __result)
if(NOT __result EQUAL 0)
message(FATAL_ERROR "${${ID}_NAME}: Failed to unpack ${ID} archive from ${${ID}_ARCHIVE} to ${${ID}_PATH} with error ${__result}")
endif()
ocv_assert(EXISTS "${${ID}_PATH}")
set(${ID}_DOWNLOADED_HASH "${${ID}_DOWNLOAD_HASH}" CACHE INTERNAL "${ID} hash")
#message(STATUS "${${ID}_NAME}: Successfully downloaded")
endfunction()
ocv_protobuf_download(v3.1.0/protobuf-cpp-3.1.0.tar.gz PROTOBUF_CPP)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment