CMakeLists.txt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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_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. ## test sources build
  21. # policy enables automoc for generated files
  22. if(${CMAKE_VERSION} VERSION_GREATER "3.10.0")
  23. cmake_policy(SET CMP0071 NEW)
  24. endif()
  25. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  26. set(CMAKE_AUTOMOC ON)
  27. set(CMAKE_AUTORCC ON)
  28. if(Qt5_POSITION_INDEPENDENT_CODE)
  29. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  30. endif()
  31. set(EXPECTED_GENERATED_HEADERS
  32. complexmessage.h
  33. externalcomplexmessage.h
  34. globalenums.h
  35. repeatedbytesmessage.h
  36. repeatedcomplexmessage.h
  37. repeateddoublemessage.h
  38. repeatedexternalcomplexmessage.h
  39. repeatedfixedint64message.h
  40. repeatedfixedintmessage.h
  41. repeatedfloatmessage.h
  42. repeatedint64message.h
  43. repeatedintmessage.h
  44. repeatedsfixedint64message.h
  45. repeatedsfixedintmessage.h
  46. repeatedsint64message.h
  47. repeatedsintmessage.h
  48. repeatedstringmessage.h
  49. repeateduint64message.h
  50. repeateduintmessage.h
  51. simpleboolmessage.h
  52. simplebytesmessage.h
  53. simpledoublemessage.h
  54. simpleenumlistmessage.h
  55. simpleenummessage.h
  56. simpleexternalenummessage.h
  57. simpleexternalmessage.h
  58. simplefileenummessage.h
  59. simplefixed32complexmessagemapmessage.h
  60. simplefixed32int32mapmessage.h
  61. simplefixed32int64mapmessage.h
  62. simplefixed32sint32mapmessage.h
  63. simplefixed32sint64mapmessage.h
  64. simplefixed32stringmapmessage.h
  65. simplefixed32uint32mapmessage.h
  66. simplefixed32uint64mapmessage.h
  67. simplefixed64complexmessagemapmessage.h
  68. simplefixed64int32mapmessage.h
  69. simplefixed64int64mapmessage.h
  70. simplefixed64sint32mapmessage.h
  71. simplefixed64sint64mapmessage.h
  72. simplefixed64stringmapmessage.h
  73. simplefixed64uint32mapmessage.h
  74. simplefixed64uint64mapmessage.h
  75. simplefixedint32message.h
  76. simplefixedint64message.h
  77. simplefloatmessage.h
  78. simpleint32complexmessagemapmessage.h
  79. simpleint32int32mapmessage.h
  80. simpleint32int64mapmessage.h
  81. simpleint32sint32mapmessage.h
  82. simpleint32sint64mapmessage.h
  83. simpleint32stringmapmessage.h
  84. simpleint32uint32mapmessage.h
  85. simpleint32uint64mapmessage.h
  86. simpleint64complexmessagemapmessage.h
  87. simpleint64int32mapmessage.h
  88. simpleint64int64mapmessage.h
  89. simpleint64message.h
  90. simpleint64sint32mapmessage.h
  91. simpleint64sint64mapmessage.h
  92. simpleint64stringmapmessage.h
  93. simpleint64uint32mapmessage.h
  94. simpleint64uint64mapmessage.h
  95. simpleintmessage.h
  96. simplesfixed32complexmessagemapmessage.h
  97. simplesfixed32int32mapmessage.h
  98. simplesfixed32int64mapmessage.h
  99. simplesfixed32sint32mapmessage.h
  100. simplesfixed32sint64mapmessage.h
  101. simplesfixed32stringmapmessage.h
  102. simplesfixed32uint32mapmessage.h
  103. simplesfixed32uint64mapmessage.h
  104. simplesfixed64complexmessagemapmessage.h
  105. simplesfixed64int32mapmessage.h
  106. simplesfixed64int64mapmessage.h
  107. simplesfixed64sint32mapmessage.h
  108. simplesfixed64sint64mapmessage.h
  109. simplesfixed64stringmapmessage.h
  110. simplesfixed64uint32mapmessage.h
  111. simplesfixed64uint64mapmessage.h
  112. simplesfixedint32message.h
  113. simplesfixedint64message.h
  114. simplesint32complexmessagemapmessage.h
  115. simplesint32int32mapmessage.h
  116. simplesint32int64mapmessage.h
  117. simplesint32sint32mapmessage.h
  118. simplesint32sint64mapmessage.h
  119. simplesint32stringmapmessage.h
  120. simplesint32uint32mapmessage.h
  121. simplesint32uint64mapmessage.h
  122. simplesint64complexmessagemapmessage.h
  123. simplesint64int32mapmessage.h
  124. simplesint64int64mapmessage.h
  125. simplesint64message.h
  126. simplesint64sint32mapmessage.h
  127. simplesint64sint64mapmessage.h
  128. simplesint64stringmapmessage.h
  129. simplesint64uint32mapmessage.h
  130. simplesint64uint64mapmessage.h
  131. simplesintmessage.h
  132. simplestringcomplexmessagemapmessage.h
  133. simplestringint32mapmessage.h
  134. simplestringint64mapmessage.h
  135. simplestringmessage.h
  136. simplestringsint32mapmessage.h
  137. simplestringsint64mapmessage.h
  138. simplestringstringmapmessage.h
  139. simplestringuint32mapmessage.h
  140. simplestringuint64mapmessage.h
  141. simpleuint32complexmessagemapmessage.h
  142. simpleuint32int32mapmessage.h
  143. simpleuint32int64mapmessage.h
  144. simpleuint32sint32mapmessage.h
  145. simpleuint32sint64mapmessage.h
  146. simpleuint32stringmapmessage.h
  147. simpleuint32uint32mapmessage.h
  148. simpleuint32uint64mapmessage.h
  149. simpleuint64complexmessagemapmessage.h
  150. simpleuint64int32mapmessage.h
  151. simpleuint64int64mapmessage.h
  152. simpleuint64message.h
  153. simpleuint64sint32mapmessage.h
  154. simpleuint64sint64mapmessage.h
  155. simpleuint64stringmapmessage.h
  156. simpleuint64uint32mapmessage.h
  157. simpleuint64uint64mapmessage.h
  158. simpleuintmessage.h
  159. stepchildenummessage.h
  160. )
  161. foreach(EXPECTED_GENERATED_HEADER ${EXPECTED_GENERATED_HEADERS})
  162. get_filename_component(GENERATED_HEADER_BASENAME ${EXPECTED_GENERATED_HEADER} NAME_WE)
  163. list(APPEND GENERATED_SOURCES ${GENERATED_SOURCES_DIR}/${GENERATED_HEADER_BASENAME}.cpp)
  164. list(APPEND GENERATED_HEADERS ${GENERATED_SOURCES_DIR}/${GENERATED_HEADER_BASENAME}.h)
  165. set_property(SOURCE ${GENERATED_SOURCES_DIR}/${GENERATED_HEADER_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
  166. endforeach(EXPECTED_GENERATED_HEADER)
  167. qt5_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS})
  168. list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
  169. set_source_files_properties(${GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  170. # TODO: but their headers should be included in sources for executable to be processed by moc
  171. list(APPEND GENERATED_SOURCES
  172. ${GENERATED_SOURCES_DIR}/globalenums.h
  173. )
  174. set_source_files_properties(${GENERATED_SOURCES_DIR}/globalenums.h PROPERTIES GENERATED TRUE)
  175. if(WIN32)
  176. #Set path to GTest build libraries
  177. set(GTEST_BOTH_LIBRARIES "")
  178. #Set path to GTest include directory
  179. include_directories(${GTEST_INCLUDE_PATHS} "/")
  180. endif()
  181. file(GLOB SOURCES
  182. simpletest.cpp
  183. serializationtest.cpp
  184. deserializationtest.cpp
  185. serializationcomplexmessagemap.cpp)
  186. set(testtarget "qtprotobuf_test")
  187. add_executable(${testtarget} ${SOURCES} ${GENERATED_SOURCES})
  188. if(WIN32)
  189. target_link_libraries(${testtarget} qtgrpc qtprotobufsupport "${GTEST_BOTH_LIBRARIES}/gtest_main.lib" "${GTEST_BOTH_LIBRARIES}/gtest.lib" Qt5::Core Qt5::Qml Qt5::Network)
  190. elseif(UNIX)
  191. target_link_libraries(${testtarget} gtest_main gtest qtgrpc qtprotobufsupport)
  192. endif()
  193. target_include_directories(${testtarget} PRIVATE ${GENERATED_SOURCES_DIR})
  194. add_dependencies(${testtarget} ${test_sources_generation})