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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 PYTHON_SRCS python/${PACKAGE_NAME}/*.py)
  9. file(GLOB_RECURSE ALL_HEADERS src/cpp/megbrain_pubapi.h
  10. ${PROJECT_SOURCE_DIR}/src/core/include/*
  11. ${PROJECT_SOURCE_DIR}/src/opr/include/*
  12. ${PROJECT_SOURCE_DIR}/src/serialization/include/*
  13. ${PROJECT_SOURCE_DIR}/src/plugin/include/*
  14. ${PROJECT_SOURCE_DIR}/dnn/include/*)
  15. set(MEGENGINE_DIR ${CMAKE_CURRENT_BINARY_DIR}/python/)
  16. add_subdirectory(tablegen)
  17. add_custom_target(_version_ld SOURCES ${MGE_VERSION_SCRIPT})
  18. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/pybind11 ${PROJECT_BINARY_DIR}/third_party/pybind11)
  19. pybind11_add_module(${MODULE_NAME} NO_EXTRAS ${SRCS})
  20. if (APPLE)
  21. target_link_libraries(${MODULE_NAME} PRIVATE megengine_export)
  22. elseif (MSVC OR WIN32)
  23. # Windows does not support implicitly importing data members from DLL.
  24. target_link_libraries(${MODULE_NAME} PRIVATE megbrain megdnn)
  25. message(STATUS "CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY}")
  26. set_target_properties(${MODULE_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY}")
  27. else()
  28. if (MGE_WITH_PYTHON_MODULE)
  29. # use to fix runtime crash when build both mgb(MGE_WITH_PYTHON_MODULE) and imperative(MGE_BUILD_IMPERATIVE_RT)
  30. target_link_libraries(${MODULE_NAME} PRIVATE megengine_export -Wl,--version-script=${MGE_VERSION_SCRIPT})
  31. else()
  32. # use to reduce whl size by depend on megbrain/dnn directly, caused by cmake create two cuda fatbin
  33. # elf section on both megengine_export and target which depend on megengine_export
  34. target_link_libraries(${MODULE_NAME} PRIVATE megbrain megdnn -Wl,--version-script=${MGE_VERSION_SCRIPT})
  35. if (MGE_WITH_DISTRIBUTED)
  36. message(VERBOSE "Imperative configured to link megray")
  37. target_link_libraries(${MODULE_NAME} PRIVATE megray)
  38. endif()
  39. endif()
  40. endif()
  41. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/range-v3 ${PROJECT_BINARY_DIR}/third_party/range-v3)
  42. target_link_libraries(${MODULE_NAME} PRIVATE range-v3)
  43. target_include_directories(${MODULE_NAME} PUBLIC src/include PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${MGB_OPDEF_OUT_DIR})
  44. target_compile_definitions(${MODULE_NAME} PRIVATE MODULE_NAME=${MODULE_NAME})
  45. target_compile_options(${MODULE_NAME} PRIVATE -Wno-unused-parameter)
  46. if(CXX_SUPPORT_WCLASS_MEMACCESS)
  47. target_compile_options(${MODULE_NAME} PRIVATE "-Wno-class-memaccess")
  48. endif()
  49. set_target_properties(${MODULE_NAME} PROPERTIES
  50. SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}
  51. LIBRARY_OUTPUT_DIRECTORY ${MEGENGINE_DIR}/${PACKAGE_NAME}/core
  52. )
  53. if (APPLE OR MSVC OR WIN32)
  54. message(VERBOSE "overwriting SUFFIX at macos and windows before config by set_target_properties")
  55. pybind11_extension(${MODULE_NAME})
  56. endif()
  57. add_dependencies(${MODULE_NAME} mgb_opdef _version_ld)
  58. if(MGE_WITH_TEST AND MGE_ENABLE_RTTI)
  59. add_subdirectory(test)
  60. endif()
  61. add_custom_command(
  62. TARGET ${MODULE_NAME} POST_BUILD
  63. COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/LICENSE ${PROJECT_SOURCE_DIR}/ACKNOWLEDGMENTS ${PROJECT_BINARY_DIR}
  64. COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/$<TARGET_FILE_NAME:${MODULE_NAME}> # clean develop
  65. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine ${CMAKE_CURRENT_BINARY_DIR}/python/megengine
  66. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test ${CMAKE_CURRENT_BINARY_DIR}/python/test
  67. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py ${CMAKE_CURRENT_BINARY_DIR}/python/setup.py
  68. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires.txt
  69. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-style.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-style.txt
  70. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-test.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-test.txt
  71. )

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