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.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. set(LIBMEGDNN_DEF)
  2. file(GLOB_RECURSE SOURCES common/*.cpp naive/*.cpp)
  3. # Build configure
  4. list(APPEND SOURCES ${PROJECT_BINARY_DIR}/genfiles/megbrain_build_config.h)
  5. if(NOT ${MGE_ARCH} STREQUAL "naive")
  6. file(GLOB_RECURSE SOURCES_ fallback/*.cpp)
  7. list(APPEND SOURCES ${SOURCES_})
  8. if(${MGE_ARCH} STREQUAL "fallback")
  9. message(WARNING "build only with fallback")
  10. elseif(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386")
  11. file(GLOB_RECURSE SOURCES_ x86/*.cpp)
  12. list(APPEND SOURCES ${SOURCES_})
  13. if(NOT MSVC)
  14. file(GLOB_RECURSE SOURCES_ x86/*.S)
  15. set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE C)
  16. list(APPEND SOURCES ${SOURCES_})
  17. endif()
  18. elseif(${MGE_ARCH} STREQUAL "armv7")
  19. file(GLOB_RECURSE SOURCES_ armv7/*.cpp)
  20. list(APPEND SOURCES ${SOURCES_})
  21. file(GLOB_RECURSE SOURCES_ arm_common/*.cpp)
  22. list(APPEND SOURCES ${SOURCES_})
  23. file(GLOB_RECURSE SOURCES_ armv7/*.S)
  24. set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE C)
  25. list(APPEND SOURCES ${SOURCES_})
  26. elseif(${MGE_ARCH} STREQUAL "aarch64")
  27. file(GLOB_RECURSE SOURCES_ aarch64/*.cpp)
  28. list(APPEND SOURCES ${SOURCES_})
  29. file(GLOB_RECURSE SOURCES_ arm_common/*.cpp)
  30. list(APPEND SOURCES ${SOURCES_})
  31. file(GLOB_RECURSE SOURCES_ aarch64/*.S)
  32. set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE C)
  33. list(APPEND SOURCES ${SOURCES_})
  34. endif()
  35. endif()
  36. if(MGE_WITH_CUDA)
  37. file(GLOB_RECURSE SOURCES_ cuda/*.cpp)
  38. list(APPEND SOURCES ${SOURCES_})
  39. file(GLOB_RECURSE CUSOURCES cuda/*.cu)
  40. list(APPEND SOURCES ${CUSOURCES})
  41. endif()
  42. if(MGE_WITH_CAMBRICON)
  43. file(GLOB_RECURSE SOURCES_ cambricon/*.cpp)
  44. list(APPEND SOURCES ${SOURCES_})
  45. file(GLOB_RECURSE BANG_SOURCES cambricon/*.mlu)
  46. list(APPEND MEGDNN_INCLUDES "${PROJECT_SOURCE_DIR}/dnn/include")
  47. list(APPEND MEGDNN_INCLUDES "${PROJECT_SOURCE_DIR}/dnn")
  48. list(APPEND MEGDNN_INCLUDES "${PROJECT_BINARY_DIR}/genfiles")
  49. bang_compile(BANG_OBJS "${BANG_SOURCES}" "${MEGDNN_INCLUDES}")
  50. list(APPEND SOURCES ${BANG_OBJS})
  51. endif()
  52. if(MGE_WITH_ATLAS)
  53. file(GLOB_RECURSE SOURCES_ atlas/*.cpp)
  54. list(APPEND SOURCES ${SOURCES_})
  55. list(APPEND LIBMEGDNN_DEF -DMEGDNN_WITH_ATLAS=1)
  56. endif()
  57. add_definitions(${LIBMEGDNN_DEF})
  58. add_library(megdnn EXCLUDE_FROM_ALL OBJECT ${SOURCES})
  59. target_link_libraries(megdnn PUBLIC opr_param_defs)
  60. if(MGE_WITH_CUDA)
  61. target_link_libraries(megdnn PUBLIC cutlass)
  62. endif()
  63. if(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386" OR ${MGE_ARCH} STREQUAL "armv7" OR ${MGE_ARCH} STREQUAL "aarch64")
  64. if(MGE_ENABLE_CPUINFO)
  65. target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:cpuinfo>)
  66. endif()
  67. endif()
  68. target_include_directories(megdnn
  69. PUBLIC
  70. $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/genfiles>
  71. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/dnn/include>
  72. $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  73. PRIVATE
  74. ${PROJECT_SOURCE_DIR}/dnn
  75. ${PROJECT_SOURCE_DIR}/third_party/midout/src
  76. )
  77. install(DIRECTORY ${PROJECT_SOURCE_DIR}/dnn/include DESTINATION . FILES_MATCHING PATTERN "*.h*")
  78. if(CXX_SUPPORT_WCLASS_MEMACCESS)
  79. if(MGE_WITH_CUDA)
  80. target_compile_options(megdnn PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-class-memaccess>"
  81. "$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:-Wno-class-memaccess>")
  82. else()
  83. target_compile_options(megdnn PRIVATE "-Wno-class-memaccess")
  84. endif()
  85. endif()
  86. target_compile_definitions(megdnn INTERFACE ${LIBMEGDNN_DEF})
  87. if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64")
  88. if (BUILD_SHARED_LIBS)
  89. target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:dnnl>)
  90. else()
  91. target_link_libraries(megdnn PRIVATE dnnl)
  92. endif()
  93. endif()
  94. target_link_libraries(megdnn PRIVATE ${MGE_CUDA_LIBS})
  95. if (BUILD_SHARED_LIBS)
  96. target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:${MGE_BLAS_LIBS}>)
  97. else()
  98. target_link_libraries(megdnn PRIVATE ${MGE_BLAS_LIBS})
  99. endif()
  100. if(MGE_WITH_ATLAS)
  101. if (BUILD_SHARED_LIBS)
  102. target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:${MGE_ATLAS_LIBS}>)
  103. else()
  104. target_link_libraries(megdnn PRIVATE ${MGE_ATLAS_LIBS})
  105. endif()
  106. endif()
  107. if(CMAKE_THREAD_LIBS_INIT)
  108. target_link_libraries(megdnn PRIVATE Threads::Threads)
  109. endif()
  110. if(MGE_WITH_CAMBRICON)
  111. target_link_libraries(megdnn PRIVATE ${BANG_OBJS} ${MGE_CAMBRICON_LIBS})
  112. endif()
  113. install(TARGETS megdnn EXPORT ${MGE_EXPORT_TARGETS})

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