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.

CMakeLists.txt 8.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. file(GLOB_RECURSE SOURCES core/impl/*.cpp gopt/impl/*.cpp opr/impl/*.cpp plugin/impl/*.cpp serialization/impl/*.cpp core/impl/*.inl gopt/impl/*.inl opr/impl/*.inl plugin/impl/*.inl serialization/impl/*.inl)
  2. if(MGE_WITH_JIT)
  3. file(GLOB_RECURSE SOURCES_ jit/impl/*.cpp jit/impl/*.inl)
  4. list(APPEND SOURCES ${SOURCES_})
  5. endif()
  6. if(MGE_WITH_DISTRIBUTED)
  7. file(GLOB_RECURSE SOURCES_ opr-mm/impl/*.cpp opr-mm/impl/*.inl)
  8. list(APPEND SOURCES ${SOURCES_})
  9. file(GLOB_RECURSE PROTO_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "../src/opr-mm/proto/*.proto")
  10. PROTOBUF_GENERATE_CPP_WITH_ROOT(GRPC_SRCS GRPC_HDRS ${CMAKE_CURRENT_SOURCE_DIR} ${PROTO_FILES})
  11. add_custom_target(mgb_proto_target DEPENDS ${GRPC_SRCS} ${GRPC_HDRS} ${PROTOBUF_PROTOC_EXECUTABLE})
  12. list(APPEND SOURCES ${GRPC_SRCS})
  13. endif()
  14. set(MGB_INC ${PROJECT_BINARY_DIR}/genfiles ${CMAKE_CURRENT_LIST_DIR}/core/include ${CMAKE_CURRENT_LIST_DIR}/gopt/include ${CMAKE_CURRENT_LIST_DIR}/opr/include ${CMAKE_CURRENT_LIST_DIR}/plugin/include ${CMAKE_CURRENT_LIST_DIR}/serialization/include)
  15. if(MGE_WITH_JIT)
  16. list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/jit/include)
  17. if(MGE_WITH_CUDA)
  18. list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/jit/impl/cuda)
  19. endif()
  20. endif()
  21. if(MGE_WITH_DISTRIBUTED)
  22. list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/opr-mm/include)
  23. endif()
  24. if(MGE_WITH_CUDA AND MGE_WITH_TRT)
  25. list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/tensorrt/include)
  26. file(GLOB_RECURSE SOURCES_ tensorrt/impl/*.cpp tensorrt/impl/*.inl)
  27. list(APPEND SOURCES ${SOURCES_})
  28. endif()
  29. if(MGE_WITH_CUDA)
  30. file(GLOB_RECURSE SOURCES_ opr/impl/standalone/*.cu)
  31. list(APPEND SOURCES ${SOURCES_})
  32. endif()
  33. add_library(megbrain OBJECT EXCLUDE_FROM_ALL ${SOURCES})
  34. target_link_libraries(megbrain PUBLIC mgb_opr_param_defs)
  35. target_include_directories(megbrain
  36. PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  37. )
  38. foreach (INCPATH IN LISTS MGB_INC)
  39. target_include_directories(megbrain
  40. PUBLIC $<BUILD_INTERFACE:${INCPATH}>
  41. )
  42. endforeach()
  43. if(MGE_WITH_CUDA)
  44. target_compile_options(megbrain PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-unused-parameter>"
  45. "$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:-Wno-unused-parameter>")
  46. else()
  47. target_compile_options(megbrain PRIVATE "-Wno-unused-parameter")
  48. endif()
  49. if(CXX_SUPPORT_WCLASS_MEMACCESS)
  50. if(MGE_WITH_CUDA)
  51. target_compile_options(megbrain PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-class-memaccess>"
  52. "$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:-Wno-class-memaccess>")
  53. else()
  54. target_compile_options(megbrain PRIVATE "-Wno-class-memaccess")
  55. endif()
  56. endif()
  57. target_link_libraries(megbrain PUBLIC megdnn)
  58. if(MGE_WITH_DISTRIBUTED)
  59. add_dependencies(megbrain mgb_proto_target)
  60. target_link_libraries (megbrain PRIVATE libprotobuf libzmq)
  61. set(CPPZMQ_INC ${PROJECT_SOURCE_DIR}/third_party/cppzmq)
  62. # FIXME: add CMAKE_CURRENT_BINARY_DIR for including mm_handler.pb.h
  63. target_include_directories(megbrain PRIVATE ${CPPZMQ_INC} ${CMAKE_CURRENT_BINARY_DIR})
  64. target_link_libraries (megbrain PRIVATE megray)
  65. endif()
  66. target_link_libraries(megbrain PRIVATE ${MGE_CUDA_LIBS})
  67. if(MGE_WITH_JIT AND MGE_WITH_HALIDE)
  68. target_link_libraries(megbrain PRIVATE libhalide)
  69. target_link_libraries(megbrain PRIVATE ${HALIDE_LLVM_LIBS})
  70. endif()
  71. if (MGB_WITH_FLATBUFFERS)
  72. set (GEN_FLATBUFFERS_SCHEMA_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_schema.py)
  73. set (OPR_PARAM_DEFS_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py)
  74. set (MGB_PARAM_DEFS_PY ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py)
  75. file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl)
  76. add_custom_command(
  77. OUTPUT
  78. ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs
  79. COMMAND
  80. ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_SCHEMA_PY} ${OPR_PARAM_DEFS_PY} ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs
  81. DEPENDS ${GEN_FLATBUFFERS_SCHEMA_PY} ${OPR_PARAM_DEFS_PY}
  82. VERBATIM
  83. )
  84. add_custom_command(
  85. OUTPUT
  86. ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs
  87. COMMAND
  88. ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_SCHEMA_PY} ${MGB_PARAM_DEFS_PY} ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs
  89. DEPENDS ${GEN_FLATBUFFERS_SCHEMA_PY} ${MGB_PARAM_DEFS_PY}
  90. VERBATIM
  91. )
  92. list(APPEND FLATBUFFERS_SCHEMA_FILES
  93. ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl/dtype.fbs
  94. ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs
  95. ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs
  96. ${CMAKE_CURRENT_SOURCE_DIR}/opr/impl/mgb_cpp_opr.fbs
  97. ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl/schema.fbs
  98. )
  99. list(APPEND FLATBUFFERS_SCHEMA_INCLUDE_DIR
  100. ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl
  101. ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl
  102. ${CMAKE_CURRENT_SOURCE_DIR}/opr/impl
  103. )
  104. build_flatbuffers(
  105. "${FLATBUFFERS_SCHEMA_FILES}"
  106. "${FLATBUFFERS_SCHEMA_INCLUDE_DIR}"
  107. mgb_serialization_schema_fbs
  108. "${FLATBUFFERS_SCHEMA_FILES}"
  109. "${CMAKE_CURRENT_BINARY_DIR}/serialization/include/megbrain/serialization/internal"
  110. ""
  111. ""
  112. )
  113. add_dependencies(megbrain mgb_serialization_schema_fbs)
  114. target_include_directories(megbrain PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/serialization/include)
  115. target_compile_definitions(megbrain PUBLIC MGB_ENABLE_FBS_SERIALIZATION=1)
  116. target_link_libraries(megbrain PUBLIC flatbuffers)
  117. set (GENERATED_FLATBUFFERS_CONVERTER_PATH ${CMAKE_CURRENT_BINARY_DIR}/genfiles)
  118. set (GEN_FLATBUFFERS_CONVERTER_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_converter.py)
  119. file (MAKE_DIRECTORY ${GENERATED_FLATBUFFERS_CONVERTER_PATH})
  120. add_custom_command(
  121. OUTPUT
  122. ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl
  123. COMMAND
  124. ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_CONVERTER_PY} ${OPR_PARAM_DEFS_PY} ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl
  125. DEPENDS ${GEN_FLATBUFFERS_CONVERTER_PY} ${OPR_PARAM_DEFS_PY}
  126. VERBATIM
  127. )
  128. add_custom_command(
  129. OUTPUT
  130. ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl
  131. COMMAND
  132. ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_CONVERTER_PY} ${MGB_PARAM_DEFS_PY} ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl
  133. DEPENDS ${GEN_FLATBUFFERS_CONVERTER_PY} ${MGB_PARAM_DEFS_PY}
  134. VERBATIM
  135. )
  136. target_sources(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl)
  137. target_sources(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl)
  138. target_include_directories(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH})
  139. endif()
  140. if(UNIX AND NOT ANDROID AND NOT APPLE)
  141. target_link_libraries(megbrain PUBLIC dl rt atomic)
  142. endif()
  143. if(ANDROID)
  144. target_link_libraries(megbrain PUBLIC log)
  145. endif()
  146. if(NOT MGE_BUILD_XXX)
  147. # Build as SHARED or STATIC depending on BUILD_SHARED_LIBS=ON/OFF
  148. add_library(megengine)
  149. target_link_libraries(megengine PUBLIC megbrain megdnn)
  150. if (UNIX AND NOT APPLE)
  151. # TODO: Use target_link_options after upgrading to CMake 3.13
  152. # FIXME; Please use right directory for mgb or imperative
  153. target_link_options(megengine PRIVATE -Wl,--no-undefined -Wl,--version-script=${PROJECT_SOURCE_DIR}/python_module/src/version.ld)
  154. endif()
  155. set_target_properties(megengine PROPERTIES CXX_VISIBILITY_PRESET default)
  156. set_target_properties(megengine PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
  157. # Do not export targets if MGE_WITH_DISTRIBUTED is on. MegRay is not ready
  158. # for this.
  159. install(TARGETS megengine
  160. EXPORT ${MGE_EXPORT_TARGETS}
  161. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  162. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
  163. endif()
  164. if (NOT MGE_WITH_DISTRIBUTED)
  165. install(TARGETS megbrain
  166. EXPORT ${MGE_EXPORT_TARGETS}
  167. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  168. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
  169. endif()
  170. foreach(_PATH ${MGB_INC})
  171. install(DIRECTORY ${_PATH}/megbrain DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
  172. endforeach()

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台