parent
f2af57c6d7
commit
57d63db9c3
4 changed files with 172 additions and 146 deletions
@ -1,34 +1,46 @@ |
||||
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() |
||||
#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) |
||||
|
@ -0,0 +1,51 @@ |
||||
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) |
Loading…
Reference in new issue