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 6.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. find_package(NumPy REQUIRED)
  2. set(PACKAGE_NAME megengine)
  3. set(PACKAGE_NAME ${PACKAGE_NAME} PARENT_SCOPE)
  4. set(MODULE_NAME _imperative_rt)
  5. set(MODULE_NAME ${MODULE_NAME} PARENT_SCOPE)
  6. file(GLOB_RECURSE SRCS src/impl/*.cpp src/include/*.h python/src/*.cpp python/src/*.h)
  7. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_WITH_IMPERATIVE=1")
  8. file(GLOB_RECURSE OPR_DECL_SRCS "${PROJECT_SOURCE_DIR}/src/**/*.oprdecl")
  9. file(GLOB_RECURSE PYTHON_SRCS python/${PACKAGE_NAME}/*.py)
  10. list(REMOVE_ITEM PYTHON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/ops/_internal/generated_ops.py ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/ops/_internal/param_defs.py)
  11. file(GLOB_RECURSE ALL_HEADERS src/cpp/megbrain_pubapi.h
  12. ${PROJECT_SOURCE_DIR}/src/core/include/*
  13. ${PROJECT_SOURCE_DIR}/src/opr/include/*
  14. ${PROJECT_SOURCE_DIR}/src/serialization/include/*
  15. ${PROJECT_SOURCE_DIR}/src/plugin/include/*
  16. ${PROJECT_SOURCE_DIR}/dnn/include/*)
  17. set(MEGENGINE_DIR ${CMAKE_CURRENT_BINARY_DIR}/python/)
  18. set(GEN_OPS_DIR ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/ops/_internal)
  19. file(MAKE_DIRECTORY ${GEN_OPS_DIR})
  20. set(GEN_OPS_FILE ${GEN_OPS_DIR}/generated_ops.py)
  21. set(GEN_OP_PARAMS_FILE ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/ops/_internal/param_defs.py)
  22. set(GEN_OP_PARAMS_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/python/tools/ops.tpl.py)
  23. ##################### generate python opr_param_defs.py ##############
  24. file(COPY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  25. file(READ ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py CONTENTS)
  26. file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py ${CONTENTS})
  27. add_custom_command(
  28. OUTPUT ${GEN_OPS_FILE}
  29. COMMAND ${CMAKE_COMMAND} -E touch ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/${MODULE_NAME}.so ${GEN_OPS_FILE} ${GEN_OP_PARAMS_FILE}
  30. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/${PACKAGE_NAME} ${MEGENGINE_DIR}/${PACKAGE_NAME}
  31. COMMAND ${CMAKE_COMMAND} -E remove -f ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/${MODULE_NAME}.so ${GEN_OPS_FILE} ${GEN_OP_PARAMS_FILE}
  32. COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/python/tools/gen_ops.py ${OPR_DECL_SRCS} -o ${GEN_OPS_FILE}
  33. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test ${MEGENGINE_DIR}/${PACKAGE_NAME}/test
  34. COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_param_defs.py -t py --imperative ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py ${GEN_OP_PARAMS_FILE}
  35. DEPENDS ${OPR_DECL_SRCS} ${PYTHON_SRCS} ${ALL_HEADERS} ${GEN_OP_PARAMS_TEMPLATE}
  36. VERBATIM
  37. )
  38. add_custom_target(gen_opr_py DEPENDS ${GEN_OPS_FILE})
  39. ##################### generate opdef c header and python binding ##############
  40. set(OP_DEF_HEADER_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/include)
  41. file(MAKE_DIRECTORY ${OP_DEF_HEADER_OUT_DIR}/megbrain/imperative/opdef)
  42. set(OP_DEF_HEADER ${OP_DEF_HEADER_OUT_DIR}/megbrain/imperative/opdef/all.h)
  43. set(OP_DEF_PYTHON_BINDING_OUT_DIR ${MEGENGINE_DIR}/${PACKAGE_NAME}/src)
  44. file(MAKE_DIRECTORY ${OP_DEF_PYTHON_BINDING_OUT_DIR})
  45. set(OP_DEF_PYTHON_BINDING ${OP_DEF_PYTHON_BINDING_OUT_DIR}/opdef.inl)
  46. set(OP_PARAM_DEF ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py)
  47. set(GEN_OP_DEF_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/python/tools/gen_op_defs.py)
  48. add_custom_command(
  49. OUTPUT ${OP_DEF_HEADER} ${OP_DEF_PYTHON_BINDING}
  50. COMMAND ${PYTHON_EXECUTABLE} ${GEN_OP_DEF_SCRIPT} ${OP_PARAM_DEF} ${OP_DEF_HEADER}
  51. COMMAND ${PYTHON_EXECUTABLE} ${GEN_OP_DEF_SCRIPT} -t py ${OP_PARAM_DEF} ${OP_DEF_PYTHON_BINDING}
  52. DEPENDS ${GEN_OP_DEF_SCRIPT} ${OP_PARAM_DEF}
  53. VERBATIM
  54. )
  55. add_custom_target(gen_op_def_internal DEPENDS ${OP_DEF_HEADER} ${OP_DEF_PYTHON_BINDING})
  56. add_library(gen_op_def INTERFACE)
  57. target_include_directories(gen_op_def INTERFACE ${OP_DEF_HEADER_OUT_DIR} ${OP_DEF_PYTHON_BINDING_OUT_DIR})
  58. add_dependencies(gen_op_def gen_op_def_internal)
  59. ##################### end of opdef generation #########################
  60. set(VERSION_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/src/version.ld)
  61. add_custom_target(_version_ld SOURCES ${VERSION_SCRIPT})
  62. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/pybind11 ${PROJECT_BINARY_DIR}/third_party/pybind11)
  63. pybind11_add_module(${MODULE_NAME} NO_EXTRAS ${SRCS})
  64. if (APPLE OR MSVC OR WIN32)
  65. target_link_libraries(${MODULE_NAME} PRIVATE gen_op_def megbrain megdnn)
  66. else()
  67. target_link_libraries(${MODULE_NAME} PRIVATE gen_op_def megbrain megdnn -Wl,--version-script=${VERSION_SCRIPT})
  68. endif()
  69. if (MGE_WITH_DISTRIBUTED)
  70. message("Imperative configured to link megray")
  71. target_link_libraries(${MODULE_NAME} PRIVATE megray)
  72. endif()
  73. target_include_directories(${MODULE_NAME} PUBLIC src/include PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR})
  74. target_compile_definitions(${MODULE_NAME} PRIVATE MODULE_NAME=${MODULE_NAME})
  75. target_compile_options(${MODULE_NAME} PRIVATE -Wno-unused-parameter)
  76. if(CXX_SUPPORT_WCLASS_MEMACCESS)
  77. target_compile_options(${MODULE_NAME} PRIVATE "-Wno-class-memaccess")
  78. endif()
  79. set_target_properties(${MODULE_NAME} PROPERTIES
  80. SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}
  81. LIBRARY_OUTPUT_DIRECTORY ${MEGENGINE_DIR}/${PACKAGE_NAME}/core
  82. )
  83. if (APPLE OR MSVC OR WIN32)
  84. message("-- overwriting SUFFIX at macos and windows before config by set_target_properties")
  85. pybind11_extension(${MODULE_NAME})
  86. endif()
  87. add_dependencies(${MODULE_NAME} gen_opr_py _version_ld)
  88. if(MGE_WITH_TEST AND MGE_ENABLE_RTTI)
  89. add_subdirectory(test)
  90. endif()
  91. add_custom_command(
  92. TARGET ${MODULE_NAME} POST_BUILD
  93. COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/LICENSE ${PROJECT_SOURCE_DIR}/ACKNOWLEDGMENTS ${PROJECT_BINARY_DIR}
  94. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine ${CMAKE_CURRENT_BINARY_DIR}/python/megengine
  95. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test ${CMAKE_CURRENT_BINARY_DIR}/python/test
  96. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py ${CMAKE_CURRENT_BINARY_DIR}/python/setup.py
  97. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires.txt
  98. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-style.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-style.txt
  99. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-test.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-test.txt
  100. )

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