protobuf.cmake 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. function(target_proto_plugin Tgt Name PluginTarget)
  2. set_property(TARGET ${Tgt} APPEND PROPERTY
  3. PROTOC_OPTS --${Name}_out=${CMAKE_BINARY_DIR}/$<TARGET_PROPERTY:${Tgt},PROTO_NAMESPACE> --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_addincls Tgt)
  10. set_property(TARGET ${Tgt} APPEND PROPERTY
  11. PROTO_ADDINCL ${ARGN}
  12. )
  13. endfunction()
  14. function(target_proto_outs Tgt)
  15. set_property(TARGET ${Tgt} APPEND PROPERTY
  16. PROTO_OUTS ${ARGN}
  17. )
  18. endfunction()
  19. function(target_proto_messages Tgt Scope)
  20. get_property(ProtocExtraOutsSuf TARGET ${Tgt} PROPERTY PROTOC_EXTRA_OUTS)
  21. foreach(proto ${ARGN})
  22. if(proto MATCHES ${CMAKE_BINARY_DIR})
  23. file(RELATIVE_PATH protoRel ${CMAKE_BINARY_DIR} ${proto})
  24. elseif (proto MATCHES ${CMAKE_SOURCE_DIR})
  25. file(RELATIVE_PATH protoRel ${CMAKE_SOURCE_DIR} ${proto})
  26. else()
  27. set(protoRel ${proto})
  28. endif()
  29. get_filename_component(OutputBase ${protoRel} NAME_WLE)
  30. get_filename_component(OutputDir ${CMAKE_BINARY_DIR}/${protoRel} DIRECTORY)
  31. list(TRANSFORM ProtocExtraOutsSuf PREPEND ${OutputDir}/${OutputBase} OUTPUT_VARIABLE ProtocExtraOuts)
  32. add_custom_command(
  33. OUTPUT
  34. ${OutputDir}/${OutputBase}.pb.cc
  35. ${OutputDir}/${OutputBase}.pb.h
  36. ${ProtocExtraOuts}
  37. COMMAND ${TOOLS_ROOT}/contrib/tools/protoc/bin/protoc
  38. ${COMMON_PROTOC_FLAGS}
  39. "-I$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTO_ADDINCL>>,;-I>"
  40. "$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTO_OUTS>>,;>"
  41. --plugin=protoc-gen-cpp_styleguide=${TOOLS_ROOT}/contrib/tools/protoc/plugins/cpp_styleguide/cpp_styleguide
  42. "$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTOC_OPTS>>,;>"
  43. ${protoRel}
  44. DEPENDS
  45. ${proto}
  46. $<TARGET_PROPERTY:${Tgt},PROTOC_DEPS>
  47. ${TOOLS_ROOT}/contrib/tools/protoc/bin/protoc
  48. ${TOOLS_ROOT}/contrib/tools/protoc/plugins/cpp_styleguide/cpp_styleguide
  49. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  50. COMMAND_EXPAND_LISTS
  51. )
  52. target_sources(${Tgt} ${Scope}
  53. ${OutputDir}/${OutputBase}.pb.cc ${OutputDir}/${OutputBase}.pb.h
  54. ${ProtocExtraOuts}
  55. )
  56. endforeach()
  57. endfunction()