Browse Source

2024.5.14 测试Findgrpc

master
Administrator 1 year ago
parent
commit
6facc7168e
4 changed files with 88 additions and 89 deletions
  1. +18
    -15
      bin_test_grpc/CMakeLists.txt
  2. +42
    -41
      cmake-linux/grpc.cmake
  3. +24
    -28
      patch/grpc/FindgRPC.cmake
  4. +4
    -5
      patch/grpc/Findprotobuf.cmake

+ 18
- 15
bin_test_grpc/CMakeLists.txt

@ -7,18 +7,16 @@ set(ColourReset "${Esc}[m")
set(BoldGreen "${Esc}[1;32m") set(BoldGreen "${Esc}[1;32m")
set(BoldRed "${Esc}[31m") set(BoldRed "${Esc}[31m")
set(LIB_BASE_DIR /root/CXX_ENVS/wenet_runtime) set(LIB_BASE_DIR /root/CXX_ENVS/wenet_runtime)
# GRPC and Protocol Buffers libraries location
set(GRPC_ROOT ${LIB_BASE_DIR}/grpc-build)
# #
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -pthread -fPIC")
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}")
find_package(Threads REQUIRED)
message("${BoldGreen} ${CMAKE_PREFIX_PATH} ${ColourReset}")
find_package(gRPC CONFIG REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fPIC")
include(../cmake-linux/grpc.cmake)
message(${BoldGreen} message(${BoldGreen}
GRPC_LIBRARY_DIR:${GRPC_LIBRARY_DIR} \n GRPC_LIBRARY_DIR:${GRPC_LIBRARY_DIR} \n
grpc_cpp_plugin${grpc_BINARY_DIR}/grpc_cpp_plugin${ColourReset})
GRPC_INCLUDE_DIR:${GRPC_INCLUDE_DIR} \n
PROTOBUF_INCLUDE_DIR:${PROTOBUF_INCLUDE_DIR} \n
grpc_cpp_plugin${GRPC_BINARY_DIR}/grpc_cpp_plugin${ColourReset})
set(PROTO_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(PROTO_DIR ${CMAKE_CURRENT_SOURCE_DIR})
@ -27,24 +25,29 @@ add_custom_command(
${PROTO_DIR}/helloworld.pb.h ${PROTO_DIR}/helloworld.pb.h
${PROTO_DIR}/helloworld.grpc.pb.cc ${PROTO_DIR}/helloworld.grpc.pb.cc
${PROTO_DIR}/helloworld.grpc.pb.h ${PROTO_DIR}/helloworld.grpc.pb.h
COMMAND ${GRPC_ROOT}/bin/protoc
COMMAND ${PROTOBUF_PROTOC}
ARGS --grpc_out "${PROTO_DIR}" ARGS --grpc_out "${PROTO_DIR}"
--cpp_out "${PROTO_DIR}" --cpp_out "${PROTO_DIR}"
-I "${PROTO_DIR}" -I "${PROTO_DIR}"
--plugin=protoc-gen-grpc=${GRPC_ROOT}/bin/grpc_cpp_plugin
--plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN_EXECUTABLE}
helloworld.proto) helloworld.proto)
add_library(hello_proto STATIC
add_library(hello_proto
${PROTO_DIR}/helloworld.pb.cc ${PROTO_DIR}/helloworld.pb.cc
${PROTO_DIR}/helloworld.pb.h ${PROTO_DIR}/helloworld.pb.h
${PROTO_DIR}/helloworld.grpc.pb.cc ${PROTO_DIR}/helloworld.grpc.pb.cc
${PROTO_DIR}/helloworld.grpc.pb.h) ${PROTO_DIR}/helloworld.grpc.pb.h)
target_include_directories(hello_proto PUBLIC ${GRPC_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR})
target_link_libraries(hello_proto ${GRPC_CLIENT_LIBS})
target_link_libraries(hello_proto
${REFLECTION}
${GRPC_GRPCPP}
${PROTOBUF_LIBPROTOBUF})
foreach(_target foreach(_target
greeter_client greeter_server greeter_client greeter_server
greeter_async_client greeter_async_client2 greeter_async_server) greeter_async_client greeter_async_client2 greeter_async_server)
add_executable(${_target} "${_target}.cc") add_executable(${_target} "${_target}.cc")
target_link_libraries(${_target} hello_proto ${GRPC_CLIENT_LIBS})
target_link_libraries(${_target} hello_proto
${REFLECTION}
${GRPC_GRPCPP}
${PROTOBUF_LIBPROTOBUF})
endforeach() endforeach()

+ 42
- 41
cmake-linux/grpc.cmake

@ -1,27 +1,21 @@
# On how to build grpc, you may refer to https://github.com/grpc/grpc # On how to build grpc, you may refer to https://github.com/grpc/grpc
# grpc version : v1.37.1
set(grpc_build_dir "${LIB_BASE_DIR}/grpc-build")
if(NOT EXISTS ${grpc_build_dir})
# grpc version : v1.47.3
set(GRPC_ROOT "${LIB_BASE_DIR}/grpc-build")
function(GRPC_INSTALL DEST)
# install grpc # install grpc
execute_process(COMMAND mkdir -p "${grpc_build_dir}")
execute_process(COMMAND mkdir -p "${LIB_BASE_DIR}/grpc-subbuild")
if(NOT EXISTS ${GRPC_ROOT})
execute_process(COMMAND mkdir -p "${GRPC_ROOT}")
else ()
execute_process(COMMAND rm -rf "${GRPC_ROOT}/*")
endif ()
if(NOT EXISTS ${LIB_BASE_DIR}/grpc-subbuild)
execute_process(COMMAND mkdir -p "${LIB_BASE_DIR}/grpc-subbuild")
else ()
execute_process(COMMAND rm -rf "${LIB_BASE_DIR}/grpc-subbuild/*")
endif ()
message(STATUS "${BoldGreen}Install grpc third party library${ColourReset}") message(STATUS "${BoldGreen}Install grpc third party library${ColourReset}")
execute_process( execute_process(
COMMAND cmake
-DgRPC_INSTALL=ON
-DCMAKE_BUILD_TYPE=Release
-DgRPC_PROTOBUF_PROVIDER=module
-DgRPC_CARES_PROVIDER=module
-DgRPC_ABSL_PROVIDER=module
-DgRPC_RE2_PROVIDER=module
-DgRPC_SSL_PROVIDER=module
-DgRPC_ZLIB_PROVIDER=module
-DgRPC_BUILD_TESTS=OFF
-DCMAKE_INSTALL_PREFIX=${grpc_build_dir}
-j6
-fPIC
-S ${LIB_BASE_DIR}/grpc-src
-B ${LIB_BASE_DIR}/grpc-subbuild
COMMAND cmake -DABSL_ENABLE_INSTALL=ON -DgRPC_INSTALL=ON -DCMAKE_CXX_STANDARD=17 -DABSL_CXX_STANDARD=17 -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_MODULE_LINKER_FLAGS="-Wl,--no-undefined -fPIC" -DCMAKE_INSTALL_PREFIX="/root/CXX_ENVS/wenet_runtime/grpc-build" -S ../grpc-v1.47.2 -B .
WORKING_DIRECTORY ${LIB_BASE_DIR}/grpc-subbuild) WORKING_DIRECTORY ${LIB_BASE_DIR}/grpc-subbuild)
execute_process( execute_process(
COMMAND make -j6 COMMAND make -j6
@ -29,30 +23,37 @@ if(NOT EXISTS ${grpc_build_dir})
execute_process( execute_process(
COMMAND make install COMMAND make install
WORKING_DIRECTORY ${grpc_build_dir}) WORKING_DIRECTORY ${grpc_build_dir})
execute_process(COMMAND cp -rf ${LIB_BASE_DIR}/grpc-src/third_party/abseil-cpp/absl ${grpc_build_dir}/include)
execute_process(
COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/patch/grpc ${LIB_BASE_DIR}/grpc-build
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
message("${BoldGreen}GRPC Installed !${ColourReset}") message("${BoldGreen}GRPC Installed !${ColourReset}")
endif()
endfunction()
set(gRPC_DIR ${grpc_build_dir})
find_package(Threads REQUIRED)
find_package(protobuf REQUIRED)
set(CMAKE_CXX_STANDARD 14)
set(protobuf_MODULE_COMPATIBLE TRUE)
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}/lib/cmake/protobuf/")
find_package(Protobuf CONFIG REQUIRED)
message("${BoldGreen}Using protobuf ${Protobuf_VERSION}${ColourReset}")
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}/lib/cmake/absl/")
find_package(absl CONFIG REQUIRED)
message("${BoldGreen}Using absl-cpp ${absl_VERSION}${ColourReset}")
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}/lib/cmake/grpc/")
find_package(gRPC CONFIG REQUIRED) find_package(gRPC CONFIG REQUIRED)
message("${BoldGreen}Using gRPC-cpp ${gRPC_VERSION}${ColourReset}")
include_directories(${grpc_build_dir}/include)
link_directories(${grpc_build_dir}/lib)
# local proto file
set(grpc_BINARY_DIR "${grpc_build_dir}/bin")
message(${BoldGreen}
protobuf_FOUND${protobuf_FOUND} \n
${CMAKE_PREFIX_PATH} \n
proto_file: ${grpc_BINARY_DIR}/protoc \n
grpc_cpp_plugin${grpc_BINARY_DIR}/grpc_cpp_plugin${ColourReset})
list(APPEND third_party_libraries gRPC::grpc++ gRPC::grpc++_reflection protobuf)
find_path(GRPC_BINARY_DIR grpc_cpp_plugin PATHS ${GRPC_ROOT}/bin)
find_path(GRPC_LIBRARY_DIR cmake/grpc/gRPCConfig.cmake PATHS ${GRPC_ROOT}/lib)
find_path(GRPC_INCLUDE_DIR grpc/grpc.h PATHS ${_GRPC_INCLUDE_DIR} )
mark_as_advanced(
GRPC_BINARY_DIR
GRPC_LIBRARY_DIR
GRPC_INCLUDE_DIR
)
message("${BoldGreen}GRPC_INCLUDE_DIR is ${GRPC_INCLUDE_DIR}${ColourReset}")
set(PROTOBUF_LIBPROTOBUF $<TARGET_FILEprotobuf::libprotobuf>)
set(PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
find_program(GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
set(REFLECTION gRPC::grpc++_reflection)
set(GRPC_GRPCPP gRPC::grpc++)
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(gRPC DEFAULT_MSG
PROTOBUF_PROTOC REFLECTION GRPC_GRPCPP GRPC_CPP_PLUGIN_EXECUTABLE)

+ 24
- 28
patch/grpc/FindgRPC.cmake

@ -47,35 +47,31 @@ endfunction()
if(NOT DEFINED GRPC_ROOT) if(NOT DEFINED GRPC_ROOT)
message(FATAL_ERROR "GRPC_ROOT not set in FindgRPC.cmake") message(FATAL_ERROR "GRPC_ROOT not set in FindgRPC.cmake")
else() else()
set (_GRPC_LIBS_DIR ${GRPC_ROOT}/lib)
set (_GRPC_INCLUDE_DIR ${GRPC_ROOT}/include)
set(gRPC_VERSION "1.37.1")
# Find gRPC library
find_path(PROTOBUF_INCLUDE_DIR google/protobuf/service.h PATHS ${_GRPC_INCLUDE_DIR} )
# Find gRPC include directory
set(CMAKE_CXX_STANDARD 14)
set(protobuf_MODULE_COMPATIBLE TRUE)
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}/lib/cmake/protobuf/")
find_package(Protobuf CONFIG REQUIRED)
message("${BoldGreen}Using protobuf ${Protobuf_VERSION}${ColourReset}")
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}/lib/cmake/absl/")
find_package(absl CONFIG REQUIRED)
message("${BoldGreen}Using absl-cpp ${absl_VERSION}${ColourReset}")
list(APPEND CMAKE_PREFIX_PATH "${GRPC_ROOT}/lib/cmake/grpc/")
find_package(gRPC CONFIG REQUIRED)
message("${BoldGreen}Using gRPC-cpp ${gRPC_VERSION}${ColourReset}")
find_path(GRPC_BINARY_DIR grpc_cpp_plugin ${GRPC_ROOT}/bin)
find_path(GRPC_LIBRARY_DIR cmake/grpc/gRPCConfig.cmake ${GRPC_ROOT}/lib)
find_path(GRPC_INCLUDE_DIR grpc/grpc.h PATHS ${_GRPC_INCLUDE_DIR} ) find_path(GRPC_INCLUDE_DIR grpc/grpc.h PATHS ${_GRPC_INCLUDE_DIR} )
mark_as_advanced(GRPC_INCLUDE_DIR)
mark_as_advanced(
GRPC_BINARY_DIR
GRPC_LIBRARY_DIR
GRPC_INCLUDE_DIR
)
message("${BoldGreen}GRPC_INCLUDE_DIR is ${GRPC_INCLUDE_DIR}${ColourReset}") message("${BoldGreen}GRPC_INCLUDE_DIR is ${GRPC_INCLUDE_DIR}${ColourReset}")
set(GRPC_BINARY_DIR ${GRPC_ROOT}/bin)
set(GRPC_LIBRARY_DIR ${GRPC_ROOT}/lib)
endif () endif ()
# set libs dependencies for my repo
set (_GRPC_CLIENT_ORDERED_DEPS libgrpc++_reflection.a libgrpc++.a libgrpc_unsecure.a libgpr.a libaddress_sorting.a libprotobuf.a libupb.a libcares.a libz.a
libabsl_synchronization.a libabsl_statusor.a libabsl_status.a
libabsl_raw_logging_internal.a libabsl_str_format_internal.a libabsl_strings.a libabsl_strings_internal.a
libabsl_graphcycles_internal.a libabsl_spinlock_wait.a libabsl_malloc_internal.a libabsl_cord.a libabsl_time.a
libabsl_time_zone.a libabsl_stacktrace.a libabsl_base.a libabsl_throw_delegate.a libabsl_int128.a libabsl_symbolize.a
libabsl_debugging_internal.a libabsl_demangle_internal.a )
set (GRPC_CLIENT_LIBS)
foreach (DEP ${_GRPC_CLIENT_ORDERED_DEPS})
if (EXISTS ${_GRPC_LIBS_DIR}/${DEP})
list (APPEND GRPC_CLIENT_LIBS ${_GRPC_LIBS_DIR}/${DEP} )
else()
message(SEND_ERROR "Missing gRPC dependency ${DEP} " )
endif()
endforeach()
find_program(PROTOBUF_PROTOC protoc)
find_program(GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
set(REFLECTION gRPC::grpc++_reflection)
set(GRPC_GRPCPP gRPC::grpc++)
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf DEFAULT_MSG
${GRPC_CLIENT_LIBS})
FIND_PACKAGE_HANDLE_STANDARD_ARGS(gRPC DEFAULT_MSG
PROTOBUF_PROTOC REFLECTION GRPC_GRPCPP GRPC_CPP_PLUGIN_EXECUTABLE)

+ 4
- 5
patch/grpc/Findprotobuf.cmake

@ -1,4 +1,4 @@
#
# cmake/usr/share/cmake-3.16/Modules
# Locate and configure the Google Protocol Buffers library # Locate and configure the Google Protocol Buffers library
# #
# Adds the following targets: # Adds the following targets:
@ -21,15 +21,14 @@
# #
if(NOT DEFINED PROTOBUF_ROOT) if(NOT DEFINED PROTOBUF_ROOT)
message(FATAL_ERROR "GRPC_ROOT not set in FindgRPC.cmake")
message(FATAL_ERROR "PROTOBUF_ROOT not set in FindgRPC.cmake")
else() else()
# Find gRPC include directory
find_path(PROTOBUF_INCLUDE_DIR google/protobuf/service.h ${PROTOBUF_ROOT}/include) find_path(PROTOBUF_INCLUDE_DIR google/protobuf/service.h ${PROTOBUF_ROOT}/include)
mark_as_advanced(PROTOBUF_INCLUDE_DIR) mark_as_advanced(PROTOBUF_INCLUDE_DIR)
message("${BoldGreen}PROTOBUF_INCLUDE_DIR is ${PROTOBUF_INCLUDE_DIR}${ColourReset}")
message("${BoldGreen}Find_package protobuf: PROTOBUF_INCLUDE_DIR is ${PROTOBUF_INCLUDE_DIR}${ColourReset}")
set(PROTOBUF_BINARY_DIR ${PROTOBUF_ROOT}/bin) set(PROTOBUF_BINARY_DIR ${PROTOBUF_ROOT}/bin)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${PROTOBUF_ROOT}/lib) set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${PROTOBUF_ROOT}/lib)
message("${BoldGreen}PROTOBUF_BINARY_DIR is ${PROTOBUF_BINARY_DIR}${ColourReset}")
endif () endif ()
# The Protobuf library # The Protobuf library
find_library(PROTOBUF_LIBRARY NAMES protobuf) find_library(PROTOBUF_LIBRARY NAMES protobuf)

Loading…
Cancel
Save