Fix protobuf compilation error (#9881)

resolves:#9876

Signed-off-by: yangxuan <xuan.yang@zilliz.com>
This commit is contained in:
XuanYang-cn 2021-10-14 18:14:32 +08:00 committed by GitHub
parent 47a6f538f1
commit ea7abf49c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 79 deletions

View File

@ -14,4 +14,4 @@ set(exceptions_files
) )
add_library(milvus_exceptions ${exceptions_files}) add_library(milvus_exceptions ${exceptions_files})
target_link_libraries(milvus_exceptions milvus_proto) target_link_libraries(milvus_exceptions PRIVATE milvus_proto)

View File

@ -9,33 +9,33 @@
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under the License # or implied. See the License for the specific language governing permissions and limitations under the License
get_property(PROTOC_EXCUTABLE GLOBAL PROPERTY PROTOC_EXCUTABLE ) set( proto_file_names
segcore.proto
index_cgo_msg.proto
plan.proto
etcd_meta.proto
milvus.proto
schema.proto
common.proto
)
set( PROTO_PATH "${MILVUS_SOURCE_DIR}/../proto/" )
set(proto_file_names common.proto etcd_meta.proto schema.proto milvus.proto index_cgo_msg.proto plan.proto segcore.proto)
set( PROTO_PATH "${MILVUS_SOURCE_DIR}/../proto/" )
FOREACH(proto_file ${proto_file_names}) FOREACH(proto_file ${proto_file_names})
STRING(REGEX REPLACE "[^/]proto" "" proto_src_file_name ${proto_file}) STRING( REGEX REPLACE "[^/]proto" "" proto_src_file_name ${proto_file} )
LIST(APPEND MILVUS_PROTO_SRCS "${proto_src_file_name}.pb.cc") LIST( APPEND milvus_proto_srcs "${proto_src_file_name}.pb.cc" )
ADD_CUSTOM_COMMAND( ADD_CUSTOM_COMMAND(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${proto_src_file_name}.pb.h" "${CMAKE_CURRENT_SOURCE_DIR}/${proto_src_file_name}.pb.cc" OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${proto_src_file_name}.pb.h"
COMMAND ${PROTOC_EXCUTABLE} --proto_path=${PROTO_PATH}/ "${CMAKE_CURRENT_SOURCE_DIR}/${proto_src_file_name}.pb.cc"
--cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/ ${proto_file} COMMAND protobuf::protoc --proto_path=${PROTO_PATH}/
DEPENDS ${PROTO_PATH}/${proto_file} --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/
) ${proto_file}
DEPENDS ${PROTO_PATH}/${proto_file} )
ENDFOREACH(proto_file) ENDFOREACH(proto_file)
add_library(milvus_proto STATIC add_library(milvus_proto STATIC ${milvus_proto_srcs})
${MILVUS_PROTO_SRCS} message(STATUS "milvus proto sources: " ${milvus_proto_srcs})
)
message(${MILVUS_PROTO_SRCS})
target_link_libraries(milvus_proto target_link_libraries( milvus_proto PUBLIC protobuf::libprotobuf)
libprotobuf
)
add_dependencies( milvus_proto protoc )

View File

@ -1,8 +1,10 @@
# Copyright 2017 gRPC authors. # Licensed to the LF AI & Data foundation under one
# # or more contributor license agreements. See the NOTICE file
# Licensed under the Apache License, Version 2.0 (the "License"); # distributed with this work for additional information
# you may not use this file except in compliance with the License. # regarding copyright ownership. The ASF licenses this file
# You may obtain a copy of the License at # to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
# #
# http://www.apache.org/licenses/LICENSE-2.0 # http://www.apache.org/licenses/LICENSE-2.0
# #
@ -12,70 +14,34 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
if ( DEFINED ENV{MILVUS_GTEST_URL} ) set( PROTOBUF_SOURCE_URL
set( GTEST_SOURCE_URL "$ENV{MILVUS_GTEST_URL}" ) "https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protobuf-cpp-3.9.0.zip" )
else()
set( GTEST_SOURCE_URL
"https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protobuf-cpp-3.9.0.zip")
endif()
message( STATUS "Building protobuf-cpp-3.9.0 from source" ) message( STATUS "Building protobuf-cpp-3.9.0 from source" )
FetchContent_Declare( FetchContent_Declare( protobuf
protobuf URL ${PROTOBUF_SOURCE_URL}
URL ${GTEST_SOURCE_URL} URL_MD5 "9562b27cc6ac5ebd087f201f1310c885"
URL_MD5 "9562b27cc6ac5ebd087f201f1310c885"
DOWNLOAD_DIR ${THIRDPARTY_DOWNLOAD_PATH} DOWNLOAD_DIR ${THIRDPARTY_DOWNLOAD_PATH}
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf-src SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf-build BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf-build
) )
set( protobuf_BUILD_TESTS CACHE BOOL OFF FORCE ) set( protobuf_BUILD_TESTS CACHE BOOL OFF FORCE )
set( protobuf_WITH_ZLIB CACHE BOOL OFF FORCE )
if ( NOT protobuf_POPULATED ) if ( NOT protobuf_POPULATED )
FetchContent_Populate( protobuf ) FetchContent_Populate( protobuf )
add_subdirectory(${protobuf_SOURCE_DIR}/cmake # Adding the following targets:
${protobuf_BINARY_DIR} # protobuf::libprotobuf - static target
EXCLUDE_FROM_ALL) # protobuf::protoc - executable target
add_subdirectory( ${protobuf_SOURCE_DIR}/cmake
${protobuf_BINARY_DIR}
EXCLUDE_FROM_ALL )
endif() endif()
get_target_property( PROTOBUF_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES )
message( STATUS "protobuf interface include dir" ${PROTOBUF_INCLUDE_DIR} )
set(_PROTOBUF_LIBRARY_NAME "libprotobuf") get_target_property( PROTOC_INCLUDE_DIR protobuf::protoc INCLUDE_DIRECTORIES )
message( STATUS "protoc interface include dir" ${PROTOC_INCLUDE_DIR} )
#if(TARGET libprotoc)
set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc)
#endif()
set(gRPC_PROTOBUF_PROVIDER "module" CACHE STRING "Provider of protobuf library")
set_property(CACHE gRPC_PROTOBUF_PROVIDER PROPERTY STRINGS "module" "package")
#if(TARGET protoc)
set(_gRPC_PROTOBUF_PROTOC protoc)
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>)
#endif()
# Building the protobuf tests require gmock what is not part of a standard protobuf checkout.
# Disable them unless they are explicitly requested from the cmake command line (when we assume
# gmock is downloaded to the right location inside protobuf).
if(NOT protobuf_BUILD_TESTS)
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
endif()
# Disable building protobuf with zlib. Building protobuf with zlib breaks
# the build if zlib is not installed on the system.
if(NOT protobuf_WITH_ZLIB)
set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.")
endif()
if(NOT PROTOBUF_ROOT_DIR)
#set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf)
set(PROTOBUF_ROOT_DIR ${protobuf_SOURCE_DIR})
endif()
set( PROTOC_EXCUTABLE $<TARGET_FILE:protoc> )
set_property( GLOBAL PROPERTY PROTOC_EXCUTABLE ${PROTOC_EXCUTABLE})