protobuf.cmake 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. function(target_proto_plugin Tgt Name PluginTarget)
  2. set_property(TARGET ${Tgt} APPEND PROPERTY
  3. PROTOC_OPTS --${Name}_out=${CMAKE_BINARY_DIR} --plugin=protoc-gen-${Name}=$<TARGET_FILE:${PluginTarget}>
  4. )
  5. set_property(TARGET ${Tgt} APPEND PROPERTY
  6. PROTOC_DEPS ${PluginTarget}
  7. )
  8. endfunction()
  9. function(target_proto_messages Tgt Scope)
  10. get_property(ProtocExtraOutsSuf TARGET ${Tgt} PROPERTY PROTOC_EXTRA_OUTS)
  11. foreach(proto ${ARGN})
  12. if(proto MATCHES ${CMAKE_BINARY_DIR})
  13. file(RELATIVE_PATH protoRel ${CMAKE_BINARY_DIR} ${proto})
  14. elseif (proto MATCHES ${CMAKE_SOURCE_DIR})
  15. file(RELATIVE_PATH protoRel ${CMAKE_SOURCE_DIR} ${proto})
  16. else()
  17. set(protoRel ${proto})
  18. endif()
  19. get_filename_component(OutputBase ${protoRel} NAME_WLE)
  20. get_filename_component(OutputDir ${CMAKE_BINARY_DIR}/${protoRel} DIRECTORY)
  21. list(TRANSFORM ProtocExtraOutsSuf PREPEND ${OutputDir}/${OutputBase} OUTPUT_VARIABLE ProtocExtraOuts)
  22. add_custom_command(
  23. OUTPUT
  24. ${OutputDir}/${OutputBase}.pb.cc
  25. ${OutputDir}/${OutputBase}.pb.h
  26. ${ProtocExtraOuts}
  27. COMMAND protoc
  28. ${COMMON_PROTOC_FLAGS}
  29. -I=${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
  30. --cpp_out=${CMAKE_BINARY_DIR}
  31. --cpp_styleguide_out=${CMAKE_BINARY_DIR}
  32. --plugin=protoc-gen-cpp_styleguide=${CMAKE_BINARY_DIR}/contrib/tools/protoc/plugins/cpp_styleguide/cpp_styleguide
  33. "$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTOC_OPTS>>,;>"
  34. ${protoRel}
  35. DEPENDS ${proto} $<TARGET_PROPERTY:${Tgt},PROTOC_DEPS> ${CMAKE_BINARY_DIR}/contrib/tools/protoc/plugins/cpp_styleguide/cpp_styleguide
  36. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  37. COMMAND_EXPAND_LISTS
  38. )
  39. target_sources(${Tgt} ${Scope}
  40. ${OutputDir}/${OutputBase}.pb.cc ${OutputDir}/${OutputBase}.pb.h
  41. ${ProtocExtraOuts}
  42. )
  43. endforeach()
  44. endfunction()