You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

protobuf.cmake 4.5 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. set(protobuf_USE_STATIC_LIBS ON)
  2. set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
  3. set(protobuf_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
  4. set(_ms_tmp_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
  5. set(CMAKE_CXX_FLAGS ${_ms_tmp_CMAKE_CXX_FLAGS})
  6. string(REPLACE " -Wall" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  7. string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  8. mindspore_add_pkg(protobuf
  9. VER 3.8.0
  10. LIBS protobuf
  11. EXE protoc
  12. URL https://github.com/protocolbuffers/protobuf/archive/v3.8.0.tar.gz
  13. MD5 3d9e32700639618a4d2d342c99d4507a
  14. CMAKE_PATH cmake/
  15. CMAKE_OPTION -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_SHARED_LIBS=OFF)
  16. include_directories(${protobuf_INC})
  17. add_library(mindspore::protobuf ALIAS protobuf::protobuf)
  18. set(CMAKE_CXX_FLAGS ${_ms_tmp_CMAKE_CXX_FLAGS})
  19. function(ms_protobuf_generate c_var h_var)
  20. if(NOT ARGN)
  21. message(SEND_ERROR "Error: ms_protobuf_generate() called without any proto files")
  22. return()
  23. endif()
  24. set(${c_var})
  25. set(${h_var})
  26. foreach(file ${ARGN})
  27. get_filename_component(abs_file ${file} ABSOLUTE)
  28. get_filename_component(file_name ${file} NAME_WE)
  29. get_filename_component(file_dir ${abs_file} PATH)
  30. file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir})
  31. list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.cc")
  32. list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.h")
  33. add_custom_command(
  34. OUTPUT "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.cc"
  35. "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.h"
  36. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  37. COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${rel_path}"
  38. COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
  39. DEPENDS protobuf::protoc ${abs_file}
  40. COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM )
  41. endforeach()
  42. set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE)
  43. set(${c_var} ${${c_var}} PARENT_SCOPE)
  44. set(${h_var} ${${h_var}} PARENT_SCOPE)
  45. endfunction()
  46. function(ms_protobuf_generate_py c_var h_var py_var)
  47. if(NOT ARGN)
  48. message(SEND_ERROR "Error: ms_protobuf_generate() called without any proto files")
  49. return()
  50. endif()
  51. set(${c_var})
  52. set(${h_var})
  53. set(${py_var})
  54. foreach(file ${ARGN})
  55. get_filename_component(abs_file ${file} ABSOLUTE)
  56. get_filename_component(file_name ${file} NAME_WE)
  57. get_filename_component(file_dir ${abs_file} PATH)
  58. file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir})
  59. list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.cc")
  60. list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.h")
  61. list(APPEND ${py_var} "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py")
  62. add_custom_command(
  63. OUTPUT "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.cc"
  64. "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}.pb.h"
  65. "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py"
  66. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  67. COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${rel_path}"
  68. COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
  69. COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
  70. COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
  71. COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/" "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py"
  72. COMMAND cp "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py" "${PROJECT_SOURCE_DIR}/mindspore/train/"
  73. DEPENDS protobuf::protoc ${abs_file}
  74. COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM )
  75. endforeach()
  76. set_source_files_properties(${${c_var}} ${${h_var}} ${${py_var}} PROPERTIES GENERATED TRUE)
  77. set(${c_var} ${${c_var}} PARENT_SCOPE)
  78. set(${h_var} ${${h_var}} PARENT_SCOPE)
  79. set(${py_var} ${${py_var}} PARENT_SCOPE)
  80. endfunction()