CMakeLists.txt 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. cmake_minimum_required(VERSION 3.0)
  2. project(qtprotobuf)
  3. find_package(Protobuf)
  4. if (NOT Protobuf_FOUND)
  5. include(cmake/DownloadProject.cmake)
  6. download_project(PROJ Protobuf
  7. GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
  8. GIT_TAG 3.7.x
  9. )
  10. set(protobuf_BUILD_TESTS OFF CACHE BOOL "Disable protobuf tests build" FORCE)
  11. add_subdirectory("${Protobuf_SOURCE_DIR}/cmake" ${Protobuf_BINARY_DIR})
  12. endif()
  13. include(cmake/ProjectDefinitions.cmake)
  14. if(DEFINED $ENV{MAKE_TESTS})
  15. set(MAKE_TESTS ${MAKE_TESTS})
  16. elseif(NOT DEFINED MAKE_TESTS)
  17. set(MAKE_TESTS ON)
  18. endif()
  19. add_executable(${PROJECT_NAME}
  20. src/generator/main.cpp
  21. src/generator/generator.cpp
  22. src/generator/classgeneratorbase.cpp
  23. src/generator/servergenerator.cpp
  24. src/generator/protobufclassgenerator.cpp
  25. src/generator/globalenumsgenerator.cpp
  26. src/generator/servicegeneratorbase.cpp
  27. src/generator/templates.cpp
  28. )
  29. if(WIN32)
  30. #Needs to set path to protobuf libraries
  31. set(PROTOBUF_INSTALATION_PATH "")
  32. include_directories(${PROTOBUF_INSTALATION_PATH}/include)
  33. set(PROTOBUF_LIBRARIES_PATH ${PROTOBUF_INSTALATION_PATH}/lib)
  34. target_link_libraries(${PROJECT_NAME} "${PROTOBUF_LIBRARIES_PATH}/libprotobuf.lib")
  35. target_link_libraries(${PROJECT_NAME} "${PROTOBUF_LIBRARIES_PATH}/libprotoc.lib")
  36. elseif(UNIX)
  37. if(NOT Protobuf_FOUND)
  38. target_link_libraries(${PROJECT_NAME} libprotoc)
  39. else()
  40. target_link_libraries(${PROJECT_NAME} ${Protobuf_LIBRARIES} -lprotoc)
  41. endif()
  42. endif()
  43. add_subdirectory("src/lib")
  44. if(MAKE_TESTS)
  45. set(testgeneration "test_generation")
  46. set(TESTS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests)
  47. file(MAKE_DIRECTORY ${TESTS_OUT_DIR})
  48. add_custom_target(${testgeneration})
  49. file(GLOB PROTO_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto/*.proto)
  50. if(WIN32)
  51. include_directories("src/lib")
  52. add_custom_command(TARGET ${testgeneration} POST_BUILD
  53. COMMAND ${PROTOBUF_INSTALATION_PATH}/bin/protoc.exe --plugin=protoc-gen-${PROJECT_NAME}=${CMAKE_BINARY_DIR}/qtprotobuf.exe --qtprotobuf_out=${CMAKE_CURRENT_BINARY_DIR}/tests
  54. ${PROTO_FILES}
  55. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto/
  56. COMMENT "Generating test headers"
  57. )
  58. elseif(UNIX)
  59. add_custom_command(TARGET ${testgeneration} POST_BUILD
  60. COMMAND protoc --plugin=protoc-gen-${PROJECT_NAME}=${CMAKE_BINARY_DIR}/qtprotobuf --qtprotobuf_out=${CMAKE_CURRENT_BINARY_DIR}/tests
  61. ${PROTO_FILES}
  62. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto/
  63. COMMENT "Generating test headers"
  64. )
  65. endif()
  66. add_dependencies(${testgeneration} ${PROJECT_NAME})
  67. add_subdirectory("tests")
  68. endif()
  69. install(TARGETS ${PROJECT_NAME}
  70. RUNTIME DESTINATION bin)