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.

80 lines
3.3 KiB

  1. #
  2. # Locate and configure the gRPC library
  3. #
  4. # Adds the following targets:
  5. #
  6. # gRPC::grpc - gRPC library
  7. # gRPC::grpc++ - gRPC C++ library
  8. # gRPC::grpc++_reflection - gRPC C++ reflection library
  9. # gRPC::grpc_cpp_plugin - C++ generator plugin for Protocol Buffers
  10. #
  11. # Generates C++ sources from the .proto files
  12. #
  13. # grpc_generate_cpp (<SLIB> <HDRS> <DEST> [<ARGN>...])
  14. # PLIB - Proto Static Library generated by .proto file
  15. # HDRS - variable to define with autogenerated source files and header files
  16. # DEST - directory where the source files will be created
  17. # ARGN - .proto files
  18. function(GRPC_GENERATE_CPP PLIB HDRS DEST)
  19. add_custom_command(
  20. OUTPUT ${DEST}/${HDRS}.pb.cc
  21. ${DEST}/${HDRS}.pb.h
  22. ${DEST}/${HDRS}.grpc.pb.cc
  23. ${DEST}/${HDRS}.grpc.pb.h
  24. COMMAND ${GRPC_BINARY_DIR}/protoc
  25. ARGS --grpc_out "${DEST}"
  26. --cpp_out "${DEST}"
  27. -I "${DEST}"
  28. --plugin=protoc-gen-grpc=${GRPC_BINARY_DIR}/grpc_cpp_plugin
  29. ${ARGN})
  30. add_library(${PLIB}
  31. ${DEST}/${HDRS}.pb.cc
  32. ${DEST}/${HDRS}.pb.h
  33. ${DEST}/${HDRS}.grpc.pb.cc
  34. ${DEST}/${HDRS}.grpc.pb.h)
  35. set_target_properties(${PLIB} PROPERTIES
  36. ARCHIVE_OUTPUT_DIRECTORY ${DEST})
  37. target_link_libraries(${PLIB}
  38. ${GRPC_CLIENT_LIBS})
  39. if (EXISTS ${DEST}/${PLIB})
  40. message("${BoldGreen} Added ${PLIB} files at ${DEST} successfully!${ColourReset}")
  41. else ()
  42. message(FATAL_ERROR "Add ${PLIB} code failed!")
  43. endif ()
  44. endfunction()
  45. if(NOT DEFINED GRPC_ROOT)
  46. message(FATAL_ERROR "GRPC_ROOT not set in FindgRPC.cmake")
  47. else()
  48. set (_GRPC_LIBS_DIR ${GRPC_ROOT}/lib)
  49. set (_GRPC_INCLUDE_DIR ${GRPC_ROOT}/include)
  50. set(gRPC_VERSION "1.37.1")
  51. # Find gRPC library
  52. find_path(PROTOBUF_INCLUDE_DIR google/protobuf/service.h PATHS ${_GRPC_INCLUDE_DIR} )
  53. # Find gRPC include directory
  54. find_path(GRPC_INCLUDE_DIR grpc/grpc.h PATHS ${_GRPC_INCLUDE_DIR} )
  55. mark_as_advanced(GRPC_INCLUDE_DIR)
  56. message("${BoldGreen}GRPC_INCLUDE_DIR is ${GRPC_INCLUDE_DIR}${ColourReset}")
  57. set(GRPC_BINARY_DIR ${GRPC_ROOT}/bin)
  58. set(GRPC_LIBRARY_DIR ${GRPC_ROOT}/lib)
  59. endif ()
  60. # set libs dependencies for my repo
  61. 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
  62. libabsl_synchronization.a libabsl_statusor.a libabsl_status.a
  63. libabsl_raw_logging_internal.a libabsl_str_format_internal.a libabsl_strings.a libabsl_strings_internal.a
  64. libabsl_graphcycles_internal.a libabsl_spinlock_wait.a libabsl_malloc_internal.a libabsl_cord.a libabsl_time.a
  65. libabsl_time_zone.a libabsl_stacktrace.a libabsl_base.a libabsl_throw_delegate.a libabsl_int128.a libabsl_symbolize.a
  66. libabsl_debugging_internal.a libabsl_demangle_internal.a )
  67. set (GRPC_CLIENT_LIBS)
  68. foreach (DEP ${_GRPC_CLIENT_ORDERED_DEPS})
  69. if (EXISTS ${_GRPC_LIBS_DIR}/${DEP})
  70. list (APPEND GRPC_CLIENT_LIBS ${_GRPC_LIBS_DIR}/${DEP} )
  71. else()
  72. message(SEND_ERROR "Missing gRPC dependency ${DEP} " )
  73. endif()
  74. endforeach()
  75. include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
  76. FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf DEFAULT_MSG
  77. ${GRPC_CLIENT_LIBS})