QtProtobufCommon.cmake 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. function(protobuf_generate_all)
  2. set(options)
  3. set(oneValueArgs OUT_DIR TARGET)
  4. set(multiValueArgs GENERATED_SOURCES PROTO_FILES)
  5. cmake_parse_arguments(protobuf_generate_all "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  6. set(GEN_TARGET "${protobuf_generate_all_TARGET}_generate")
  7. add_custom_target(${GEN_TARGET})
  8. foreach(PROTO_FILE IN LISTS protobuf_generate_all_PROTO_FILES)
  9. get_filename_component(BASE_DIR ${PROTO_FILE} DIRECTORY)
  10. set(PROTO_INCLUDES -I"${BASE_DIR}" ${PROTO_INCUDES})
  11. endforeach()
  12. if(NOT DEFINED protobuf_generate_all_OUT_DIR)
  13. set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
  14. else()
  15. set(OUT_DIR ${protobuf_generate_all_OUT_DIR})
  16. endif()
  17. file(MAKE_DIRECTORY ${OUT_DIR})
  18. if(NOT DEFINED gRPC_CPP_PLUGIN_EXECUTABLE)
  19. message(FATAL_ERROR "gRPC plugin is not found set full path to grpc_cpp_plugin using -DgRPC_CPP_PLUGIN_EXECUTABLE=</path/to/grpc_cpp_plugin>")
  20. endif()
  21. add_custom_command(
  22. TARGET ${GEN_TARGET}
  23. COMMAND ${Protobuf_PROTOC_EXECUTABLE}
  24. ARGS --grpc_out="${OUT_DIR}"
  25. --cpp_out="${OUT_DIR}"
  26. ${PROTO_INCLUDES}
  27. --plugin=protoc-gen-grpc="${gRPC_CPP_PLUGIN_EXECUTABLE}"
  28. ${protobuf_generate_all_PROTO_FILES}
  29. DEPENDS ${protobuf_generate_all_PROTO_FILES})
  30. add_dependencies(${protobuf_generate_all_TARGET} ${GEN_TARGET})
  31. endfunction(protobuf_generate_all)
  32. function(add_test_target)
  33. set(options)
  34. set(oneValueArgs TARGET)
  35. set(multiValueArgs SOURCES GENERATED_HEADERS)
  36. cmake_parse_arguments(add_test_target "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  37. ## test sources build
  38. # policy enables automoc for generated files
  39. if(${CMAKE_VERSION} VERSION_GREATER "3.10.0")
  40. cmake_policy(SET CMP0071 NEW)
  41. endif()
  42. set(GENERATED_SOURCES_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated)
  43. file(GLOB PROTO_FILES ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto)
  44. generate_qtprotobuf(TARGET ${add_test_target_TARGET}
  45. OUT_DIR ${GENERATED_SOURCES_DIR}
  46. PROTO_FILES ${PROTO_FILES}
  47. GENERATED_HEADERS ${add_test_target_GENERATED_HEADERS})
  48. add_executable(${add_test_target_TARGET} ${add_test_target_SOURCES})
  49. set_target_properties(${add_test_target_TARGET} PROPERTIES POSITION_INDEPENDENT_CODE FALSE)
  50. add_dependencies(${add_test_target_TARGET} ${QtProtobufGen})
  51. target_link_libraries(${add_test_target_TARGET} gtest_main gtest ${QtProtobufGen} ${GRPC_LIBRARY_TARGET} ${PROTOBUF_LIBRARY_TARGET} Qt5::Core Qt5::Qml Qt5::Network)
  52. target_include_directories(${add_test_target_TARGET} PRIVATE ${GENERATED_SOURCES_DIR})
  53. endfunction(add_test_target)