You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

81 lines
3.3 KiB

#
# Locate and configure the gRPC library
#
# Adds the following targets:
#
# gRPC::grpc - gRPC library
# gRPC::grpc++ - gRPC C++ library
# gRPC::grpc++_reflection - gRPC C++ reflection library
# gRPC::grpc_cpp_plugin - C++ generator plugin for Protocol Buffers
#
# Generates C++ sources from the .proto files
#
# grpc_generate_cpp (<SLIB> <HDRS> <DEST> [<ARGN>...])
# PLIB - Proto Static Library generated by .proto file
# HDRS - variable to define with autogenerated source files and header files
# DEST - directory where the source files will be created
# ARGN - .proto files
function(GRPC_GENERATE_CPP PLIB HDRS DEST)
add_custom_command(
OUTPUT ${DEST}/${HDRS}.pb.cc
${DEST}/${HDRS}.pb.h
${DEST}/${HDRS}.grpc.pb.cc
${DEST}/${HDRS}.grpc.pb.h
COMMAND ${GRPC_BINARY_DIR}/protoc
ARGS --grpc_out "${DEST}"
--cpp_out "${DEST}"
-I "${DEST}"
--plugin=protoc-gen-grpc=${GRPC_BINARY_DIR}/grpc_cpp_plugin
${ARGN})
add_library(${PLIB}
${DEST}/${HDRS}.pb.cc
${DEST}/${HDRS}.pb.h
${DEST}/${HDRS}.grpc.pb.cc
${DEST}/${HDRS}.grpc.pb.h)
set_target_properties(${PLIB} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${DEST})
target_link_libraries(${PLIB}
${GRPC_CLIENT_LIBS})
if (EXISTS ${DEST}/${PLIB})
message("${BoldGreen} Added ${PLIB} files at ${DEST} successfully!${ColourReset}")
else ()
message(FATAL_ERROR "Add ${PLIB} code failed!")
endif ()
endfunction()
if(NOT DEFINED GRPC_ROOT)
message(FATAL_ERROR "GRPC_ROOT not set in FindgRPC.cmake")
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
find_path(GRPC_INCLUDE_DIR grpc/grpc.h PATHS ${_GRPC_INCLUDE_DIR} )
mark_as_advanced(GRPC_INCLUDE_DIR)
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 ()
# 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()
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf DEFAULT_MSG
${GRPC_CLIENT_LIBS})