CMakeLists.txt 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. set(PROTO_FILES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/proto/)
  2. set(GENERATED_SOURCES_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated)
  3. file(MAKE_DIRECTORY ${GENERATED_SOURCES_DIR})
  4. file(GLOB PROTO_FILES ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto)
  5. ## test sources generation
  6. if(WIN32)
  7. #Needs to set path to protobuf libraries
  8. set(PROTOBUF_INSTALATION_PATH "")
  9. set(Protobuf_PROTOC_EXECUTABLE ${PROTOBUF_INSTALATION_PATH}/bin/protoc.exe)
  10. endif()
  11. set(test_sources_generation "test_grpc_sources_generation")
  12. add_custom_target(${test_sources_generation})
  13. add_custom_command(TARGET ${test_sources_generation}
  14. COMMAND ${Protobuf_PROTOC_EXECUTABLE} --${PROJECT_NAME}_opt=out=${GENERATED_SOURCES_DIR} --plugin=protoc-gen-${PROJECT_NAME}=$<TARGET_FILE:${PROJECT_NAME}> --qtprotobuf_out=${GENERATED_SOURCES_DIR} -I=${PROTO_FILES_DIR} ${PROTO_FILES}
  15. WORKING_DIRECTORY ${PROTO_FILES_DIR}
  16. DEPENDS ${PROTO_FILES}
  17. COMMENT "Generating test headers"
  18. )
  19. add_dependencies(${test_sources_generation} ${PROJECT_NAME})
  20. set(EXPECTED_GENERATED_HEADERS
  21. simplestringmessage.h
  22. testserviceclient.h
  23. testserviceserver.h
  24. )
  25. foreach(EXPECTED_GENERATED_HEADER ${EXPECTED_GENERATED_HEADERS})
  26. get_filename_component(GENERATED_HEADER_BASENAME ${EXPECTED_GENERATED_HEADER} NAME_WE)
  27. list(APPEND GENERATED_SOURCES ${GENERATED_SOURCES_DIR}/${GENERATED_HEADER_BASENAME}.cpp)
  28. list(APPEND GENERATED_HEADERS ${GENERATED_SOURCES_DIR}/${GENERATED_HEADER_BASENAME}.h)
  29. set_property(SOURCE ${GENERATED_SOURCES_DIR}/${GENERATED_HEADER_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
  30. endforeach(EXPECTED_GENERATED_HEADER)
  31. qt5_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS})
  32. list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
  33. # TODO: so far the following cpp files are not generated
  34. list(REMOVE_ITEM GENERATED_SOURCES
  35. ${GENERATED_SOURCES_DIR}/testserviceserver.cpp
  36. )
  37. set_source_files_properties(${GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  38. # TODO: but their headers should be included in sources for executable to be processed by moc
  39. list(APPEND GENERATED_SOURCES
  40. ${GENERATED_SOURCES_DIR}/globalenums.h
  41. ${GENERATED_SOURCES_DIR}/testserviceserver.h
  42. )
  43. set_source_files_properties(${GENERATED_SOURCES_DIR}/globalenums.h PROPERTIES GENERATED TRUE)
  44. set_source_files_properties(${GENERATED_SOURCES_DIR}/testserviceserver.h PROPERTIES GENERATED TRUE)
  45. if(WIN32)
  46. #Set path to GTest build libraries
  47. set(GTEST_BOTH_LIBRARIES "")
  48. #Set path to GTest include directory
  49. include_directories(${GTEST_INCLUDE_PATHS} "/")
  50. endif()
  51. file(GLOB SOURCES main.cpp
  52. servertest.cpp
  53. clienttest.cpp)
  54. set(testtarget "qtgrpc_test")
  55. add_executable(${testtarget} ${SOURCES} ${GENERATED_SOURCES})
  56. if(WIN32)
  57. target_link_libraries(${testtarget} qtgrpc qtprotobufsupport "${GTEST_BOTH_LIBRARIES}/gtest_main.lib" "${GTEST_BOTH_LIBRARIES}/gtest.lib" Qt5::Core Qt5::Qml Qt5::Network)
  58. elseif(UNIX)
  59. target_link_libraries(${testtarget} gtest_main gtest qtgrpc qtprotobufsupport)
  60. endif()
  61. target_include_directories(${testtarget} PRIVATE ${GENERATED_SOURCES_DIR})
  62. add_dependencies(${testtarget} ${test_sources_generation})
  63. add_subdirectory(echoserver)