# # 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 ( [...]) # 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})