GenerateProtobufs.cmake 4.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. MESSAGE(STATUS "Processing hadoop-core protobuf definitions.")
  2. add_executable(shorten rpc/shorten.c)
  3. include_directories(${PROTOC_HEADER_PATH})
  4. add_executable(protoc-gen-hrpc rpc/protoc-gen-hrpc.cc)
  5. target_link_libraries(protoc-gen-hrpc ${PROTOC_LIB} ${PROTOBUF_LIB})
  6. function(DECLARE_PROTOS OUTPUT_SRC_LIST GENERATOR_DIR INCLUDE_DIRS)
  7. if (NOT ARGN)
  8. message(SEND_ERROR "Error: DECLARE_PROTOS requires protobuf files as arguments.")
  9. endif()
  10. set(CFILES)
  11. set(HFILES)
  12. get_filename_component(GENERATOR_DIR "${GENERATOR_DIR}" REALPATH)
  13. set(INCLUDE_FLAGS)
  14. foreach(IDIR ${INCLUDE_DIRS})
  15. set(INCLUDE_FLAGS ${INCLUDE_FLAGS} -I ${IDIR})
  16. endforeach()
  17. foreach(PB_FILE ${ARGN})
  18. get_filename_component(DIRNAME_F ${PB_FILE} PATH)
  19. get_filename_component(ABSNAME_F ${PB_FILE} ABSOLUTE)
  20. get_filename_component(BASENAME_F ${PB_FILE} NAME_WE)
  21. set(PB_C_FILE "${GENERATOR_DIR}/${BASENAME_F}.pb-c.c")
  22. set(PB_H_FILE "${GENERATOR_DIR}/${BASENAME_F}.pb-c.h")
  23. set(PB_H_S_FILE "${GENERATOR_DIR}/${BASENAME_F}.pb-c.h.s")
  24. set(CALL_C_FILE "${GENERATOR_DIR}/${BASENAME_F}.call.c")
  25. set(CALL_H_FILE "${GENERATOR_DIR}/${BASENAME_F}.call.h")
  26. execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${GENERATOR_DIR})
  27. add_custom_command(
  28. OUTPUT ${PB_C_FILE} ${PB_H_FILE} ${CALL_C_FILE} ${CALL_H_FILE} ${PB_H_S_FILE}
  29. COMMAND ${PROTOBUFC_EXE}
  30. ARGS --c_out ${GENERATOR_DIR} ${INCLUDE_FLAGS} --proto_path ${DIRNAME_F} ${ABSNAME_F}
  31. COMMENT "Running protoc-c on ${PB_FILE}"
  32. DEPENDS ${ABSNAME_F}
  33. VERBATIM
  34. COMMAND "${CMAKE_CURRENT_BINARY_DIR}/shorten"
  35. ARGS ${PB_H_FILE}
  36. COMMENT "Processing ${PB_H_FILE}"
  37. DEPENDS ${ABSNAME_F} shorten
  38. VERBATIM
  39. COMMAND "${PROTOC_EXE}"
  40. ARGS --plugin=protoc-gen-hrpc --hrpc_out ${GENERATOR_DIR} ${INCLUDE_FLAGS} ${ABSNAME_F}
  41. COMMENT "Running HRPC protocol buffer compiler on ${ABSNAME_F}"
  42. DEPENDS ${ABSNAME_F} protoc-gen-hrpc
  43. VERBATIM
  44. )
  45. list(APPEND CFILES ${PB_C_FILE} ${CALL_C_FILE})
  46. list(APPEND HFILES ${PB_H_FILE} ${PB_H_S_FILE} ${CALL_H_FILE})
  47. set_source_files_properties(${PB_C_FILE} ${PB_H_FILE} "${PB_H_S_FILE}" PROPERTIES GENERATED TRUE)
  48. endforeach()
  49. #MESSAGE(STATUS "OUTPUT_SRC_LIST = ${OUTPUT_SRC_LIST}, CFILES = ${CFILES}, HFILES = ${HFILES}")
  50. set(${OUTPUT_SRC_LIST} ${CFILES} ${HFILES} PARENT_SCOPE)
  51. endfunction()
  52. get_filename_component(R "${PROJECT_SOURCE_DIR}/.." REALPATH)
  53. # Common protobuf files. In general, the other subprojects such as HDFS and
  54. # YARN may rely on definitions in these protobuf files.
  55. DECLARE_PROTOS(
  56. COMMON_PROTOBUF_SRCS
  57. ${CMAKE_CURRENT_BINARY_DIR}/protobuf
  58. "${R}/hadoop-common-project/hadoop-common/src/main/proto/"
  59. ${R}/hadoop-common-project/hadoop-common/src/main/proto/GetUserMappingsProtocol.proto
  60. ${R}/hadoop-common-project/hadoop-common/src/main/proto/HAServiceProtocol.proto
  61. ${R}/hadoop-common-project/hadoop-common/src/main/proto/IpcConnectionContext.proto
  62. ${R}/hadoop-common-project/hadoop-common/src/main/proto/ProtobufRpcEngine.proto
  63. ${R}/hadoop-common-project/hadoop-common/src/main/proto/ProtocolInfo.proto
  64. ${R}/hadoop-common-project/hadoop-common/src/main/proto/RefreshAuthorizationPolicyProtocol.proto
  65. ${R}/hadoop-common-project/hadoop-common/src/main/proto/RefreshCallQueueProtocol.proto
  66. ${R}/hadoop-common-project/hadoop-common/src/main/proto/RefreshUserMappingsProtocol.proto
  67. ${R}/hadoop-common-project/hadoop-common/src/main/proto/RpcHeader.proto
  68. ${R}/hadoop-common-project/hadoop-common/src/main/proto/Security.proto
  69. ${R}/hadoop-common-project/hadoop-common/src/main/proto/ZKFCProtocol.proto
  70. )
  71. # HDFS protobuf files.
  72. DECLARE_PROTOS(
  73. HDFS_PROTOBUF_SRCS
  74. ${CMAKE_CURRENT_BINARY_DIR}/protobuf
  75. "${R}/hadoop-common-project/hadoop-common/src/main/proto/;${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/"
  76. #${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/DatanodeProtocol.proto
  77. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/HAZKInfo.proto
  78. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientDatanodeProtocol.proto
  79. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/acl.proto
  80. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/fsimage.proto
  81. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/hdfs.proto
  82. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/datatransfer.proto
  83. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/InterDatanodeProtocol.proto
  84. #${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/QJournalProtocol.proto
  85. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/JournalProtocol.proto
  86. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/NamenodeProtocol.proto
  87. ${R}/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientNamenodeProtocol.proto
  88. )