CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. set(TARGET QtGrpc)
  2. set(TARGET_EXPORT ${TARGET}Targets)
  3. set(TARGET_CONFIG ${TARGET}Config)
  4. set(TARGET_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET})
  5. set(TARGET_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
  6. set(TARGET_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
  7. set(TARGET_BINDIR ${CMAKE_INSTALL_BINDIR})
  8. set(CMAKE_AUTOMOC ON)
  9. set(CMAKE_AUTORCC ON)
  10. include(${QT_PROTOBUF_CMAKE_DIR}/Coverage.cmake)
  11. include(${QT_PROTOBUF_CMAKE_DIR}/GenerateQtHeaders.cmake)
  12. include(${QT_PROTOBUF_CMAKE_DIR}/QtProtobufCommon.cmake)
  13. set(QT_PROTOBUF_NATIVE_GRPC_CHANNEL OFF CACHE BOOL "Enable native gRPC channel implementation")
  14. file(GLOB SOURCES qgrpcasyncoperationbase.cpp
  15. qgrpcasyncreply.cpp
  16. qgrpcsubscription.cpp
  17. qgrpcstatus.cpp
  18. qabstractgrpcchannel.cpp
  19. qgrpchttp2channel.cpp
  20. qabstractgrpcclient.cpp
  21. qgrpccredentials.cpp
  22. qgrpcsslcredentials.cpp
  23. qgrpcinsecurecredentials.cpp
  24. qgrpcuserpasswordcredentials.cpp
  25. )
  26. file(GLOB HEADERS qgrpcasyncoperationbase_p.h
  27. qgrpcasyncreply.h
  28. qgrpcsubscription.h
  29. qgrpcstatus.h
  30. qabstractgrpcchannel.h
  31. qgrpchttp2channel.h
  32. qabstractgrpcclient.h
  33. qabstractgrpccredentials.h
  34. qgrpccredentials.h
  35. qgrpcsslcredentials.h
  36. qgrpcinsecurecredentials.h
  37. qgrpcuserpasswordcredentials.h
  38. qtgrpcglobal.h)
  39. if (QT_PROTOBUF_NATIVE_GRPC_CHANNEL)
  40. list(APPEND SOURCES qgrpcchannel.cpp)
  41. list(APPEND HEADERS qgrpcchannel.h qgrpcchannel_p.h)
  42. endif()
  43. protobuf_generate_qt_headers(PUBLIC_HEADER ${HEADERS} COMPONENT ${TARGET})
  44. add_library(${TARGET} ${SOURCES})
  45. if(NOT BUILD_SHARED_LIBS)
  46. if(WIN32)
  47. message(WARNING "Static version of QtGrpc is not fully tested on Win32 platforms")
  48. endif()
  49. target_compile_definitions(${TARGET} PRIVATE QT_PROTOBUF_STATIC)
  50. set(QT_PROTOBUF_EXTRA_CONFIG "staticlib") #extra config for .pri file in case if static build enabled
  51. endif()
  52. extract_qt_variable(QT_HOST_DATA)
  53. target_compile_definitions(${TARGET} PRIVATE QT_BUILD_GRPC_LIB)
  54. set_target_properties(${TARGET} PROPERTIES VERSION ${PROJECT_VERSION} PUBLIC_HEADER "${HEADERS};${GENERATED_PUBLIC_HEADER}" OUTPUT_NAME ${TARGET})
  55. target_include_directories(${TARGET} PUBLIC
  56. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
  57. $<BUILD_INTERFACE:${QT_PROTOBUF_BINARY_DIR}/include/${TARGET}>
  58. $<INSTALL_INTERFACE:${TARGET_INCLUDE_DIR}>
  59. )
  60. target_link_libraries(${TARGET} PUBLIC ${QT_PROTOBUF_PROJECT}::QtProtobuf Qt5::Core Qt5::Network)
  61. if (QT_PROTOBUF_NATIVE_GRPC_CHANNEL)
  62. target_link_libraries(${TARGET} PUBLIC gRPC::grpc++)
  63. endif()
  64. target_compile_features(${TARGET} PUBLIC cxx_std_14
  65. cxx_auto_type
  66. cxx_decltype
  67. cxx_final
  68. cxx_override
  69. cxx_nullptr
  70. cxx_lambdas
  71. cxx_func_identifier)
  72. add_library(${QT_PROTOBUF_PROJECT}::${TARGET} ALIAS ${TARGET})
  73. install(TARGETS ${TARGET}
  74. EXPORT ${TARGET_EXPORT} COMPONENT dev
  75. ARCHIVE DESTINATION ${TARGET_LIB_DIR} COMPONENT lib
  76. PUBLIC_HEADER DESTINATION ${TARGET_INCLUDE_DIR} COMPONENT dev
  77. LIBRARY DESTINATION ${TARGET_LIB_DIR} COMPONENT lib
  78. RUNTIME DESTINATION ${TARGET_BINDIR} COMPONENT lib)
  79. install(EXPORT ${TARGET_EXPORT} NAMESPACE ${QT_PROTOBUF_PROJECT}:: FILE ${TARGET_EXPORT}.cmake DESTINATION ${TARGET_CMAKE_DIR} COMPONENT dev)
  80. include(CMakePackageConfigHelpers)
  81. configure_package_config_file(
  82. "${TARGET_CONFIG}.cmake.in" "${QT_PROTOBUF_BINARY_DIR}/${TARGET_CONFIG}.cmake"
  83. INSTALL_DESTINATION "${TARGET_CMAKE_DIR}")
  84. install(FILES "${QT_PROTOBUF_BINARY_DIR}/${TARGET_CONFIG}.cmake" DESTINATION "${TARGET_CMAKE_DIR}" COMPONENT dev)
  85. export(TARGETS ${TARGET} NAMESPACE ${QT_PROTOBUF_PROJECT}:: FILE ${TARGET_EXPORT}.cmake)
  86. configure_file("${QT_PROTOBUF_CMAKE_DIR}/gRPCLookup.cmake" "${QT_PROTOBUF_BINARY_DIR}/gRPCLookup.cmake" COPYONLY)
  87. install(FILES "${QT_PROTOBUF_BINARY_DIR}/gRPCLookup.cmake" DESTINATION "${TARGET_CMAKE_DIR}" COMPONENT dev)
  88. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/qt_lib_grpc.pri.in" "${QT_PROTOBUF_BINARY_DIR}/qt_lib_grpc.pri" @ONLY)
  89. install(FILES "${QT_PROTOBUF_BINARY_DIR}/qt_lib_grpc.pri" DESTINATION "${QT_HOST_DATA}/mkspecs/modules" COMPONENT dev)
  90. add_subdirectory("quick")
  91. add_coverage_target(TARGET ${TARGET})