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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. cmake_minimum_required(VERSION 3.9.0)
  2. project(MegEngine)
  3. set(CMAKE_CXX_STANDARD 14)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_CXX_EXTENSIONS OFF)
  6. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  7. set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
  8. if(NOT MSVC)
  9. set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>")
  10. set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>")
  11. set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -D <TARGET>")
  12. endif()
  13. include(CheckCXXCompilerFlag)
  14. CHECK_CXX_COMPILER_FLAG(-Wclass-memaccess CXX_SUPPORT_WCLASS_MEMACCESS)
  15. set(MGE_ARCH AUTO CACHE STRING "Architecture on which MegEngine to be built.")
  16. set_property(CACHE MGE_ARCH PROPERTY STRINGS AUTO
  17. x86_64 i386
  18. naive fallback
  19. )
  20. if(${MGE_ARCH} STREQUAL "AUTO")
  21. if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
  22. set(MGE_ARCH "x86_64")
  23. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
  24. set(MGE_ARCH "i386")
  25. else()
  26. message(FATAL "Unknown machine architecture for MegEngine.")
  27. endif()
  28. endif()
  29. CHECK_CXX_COMPILER_FLAG(-fuse-ld=gold CXX_SUPPORT_GOLD)
  30. if(CXX_SUPPORT_GOLD)
  31. message("-- Using GNU gold linker.")
  32. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
  33. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
  34. endif()
  35. option(MGE_WITH_JIT "Build MegEngine with JIT." ON)
  36. option(MGE_WITH_HALIDE "Build MegEngine with Halide JIT" ON)
  37. option(MGE_DISABLE_FLOAT16 "Disable MegEngine float16 support." OFF)
  38. option(MGE_WITH_CUDA "Enable MegEngine CUDA support." ON)
  39. option(MGE_CUDA_USE_STATIC "Enable MegEngine CUDA static linking." ON)
  40. option(MGE_WITH_TRT "Build MegEngine with TensorRT." ON)
  41. option(MGE_USE_SYSTEM_LIB "Build MegEngine with system libraries." OFF)
  42. option(MGB_WITH_FLATBUFFERS "Build MegBrain with FlatBuffers serialization support." ON)
  43. if(MGE_WITH_CUDA)
  44. include(CheckLanguage)
  45. check_language(CUDA)
  46. if(NOT CMAKE_CUDA_COMPILER)
  47. message(FATAL_ERROR "CUDA compiler not found in PATH")
  48. endif()
  49. enable_language(CUDA)
  50. set(CMAKE_CUDA_STANDARD 14)
  51. set(CMAKE_CUDA_STANDARD_REQUIRED ON)
  52. endif()
  53. if(NOT MGE_WITH_CUDA)
  54. message("-- Disable JIT support, as CUDA is not enabled.")
  55. set(MGE_WITH_JIT OFF)
  56. set(MGE_WITH_HALIDE OFF)
  57. message("-- Disable TensorRT support, as CUDA is not enabled.")
  58. set(MGE_WITH_TRT OFF)
  59. endif()
  60. find_package(PythonInterp 3 REQUIRED)
  61. set(THREADS_PREFER_PTHREAD_FLAG ON)
  62. find_package(Threads)
  63. if(${CMAKE_THREAD_LIBS_INIT} STREQUAL "-pthread" AND MGE_WITH_CUDA)
  64. set_property(TARGET Threads::Threads
  65. PROPERTY INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-pthread>"
  66. "$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:-pthread>")
  67. endif()
  68. if(CMAKE_THREAD_LIBS_INIT)
  69. add_definitions(-DMGB_HAVE_THREAD=1)
  70. endif()
  71. set(MGE_BLAS MKL CACHE STRING "BLAS implementaion used by MegEngine.")
  72. set_property(CACHE MGE_BLAS PROPERTY STRINGS MKL OpenBLAS)
  73. set(MGE_CUDA_GENCODE "" CACHE STRING "Overwrite -gencode specifications for CUDA")
  74. if(NOT CMAKE_CUDA_HOST_COMPILER)
  75. set(CMAKE_CUDA_HOST_COMPILER $(CMAKE_CXX_COMPILER))
  76. endif()
  77. option(MGE_ENABLE_RTTI "Build with RTTI" ON)
  78. option(MGE_ENABLE_LOGGING "Build with logging" ON)
  79. option(MGE_DEBUG_UTIL "Enable debug utility" ON)
  80. if(MGE_DEBUG_UTIL)
  81. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_ENABLE_DEBUG_UTIL=1")
  82. else()
  83. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_ENABLE_DEBUG_UTIL=0")
  84. endif()
  85. if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
  86. message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
  87. set(CMAKE_BUILD_TYPE RelWithDebInfo)
  88. endif()
  89. if(NOT MGE_ENABLE_RTTI)
  90. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
  91. endif()
  92. option(MGE_ENABLE_EXCEPTIONS "Build with exceptions" ON)
  93. if(NOT MGE_ENABLE_EXCEPTIONS)
  94. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exception")
  95. endif()
  96. # RTTI
  97. if(MGE_ENABLE_RTTI)
  98. add_definitions(-DMEGDNN_ENABLE_MANGLING=0 -DMEGDNN_ENABLE_RTTI=1)
  99. else()
  100. add_definitions(-DMEGDNN_ENABLE_MANGLING=1 -DMEGDNN_ENABLE_RTTI=0)
  101. endif()
  102. # Logging
  103. if(MGE_ENABLE_LOGGING)
  104. add_definitions(-DMEGDNN_ENABLE_LOGGING=1 -DMGB_ENABLE_LOGGING=1 -DMGB_ENABLE_JSON=1)
  105. else()
  106. add_definitions(-DMEGDNN_ENABLE_LOGGING=0 -DMGB_ENABLE_LOGGING=0 -DMGB_ENABLE_JSON=0)
  107. endif()
  108. # Exception
  109. if(MGE_ENABLE_EXCEPTIONS)
  110. add_definitions(-DMEGDNN_ENABLE_EXCEPTIONS=1)
  111. else()
  112. message(STATUS "Exceptions disabled; MegEngine would kill itself when it is supposed to throw an exception.")
  113. add_definitions(-DMEGDNN_ENABLE_EXCEPTIONS=0)
  114. endif()
  115. if(MGE_WITH_JIT AND MGE_WITH_HALIDE)
  116. set(HALIDE_SHARED_LIBRARY OFF CACHE BOOL "Build as a shared library")
  117. include(cmake/Halide.cmake)
  118. add_definitions(-DMGB_JIT_HALIDE=1)
  119. endif()
  120. option(MGE_WITH_TEST "Enable test for MegEngine." OFF)
  121. if(MGE_WITH_TEST)
  122. include(cmake/gtest.cmake)
  123. endif()
  124. option(MGE_WITH_DISTRIBUTED "Build with distributed support" ON)
  125. if(NOT MGE_WITH_CUDA)
  126. message("-- Disable distributed support, as CUDA is not enabled.")
  127. set(MGE_WITH_DISTRIBUTED OFF)
  128. endif()
  129. option(MGE_INFERENCE_ONLY "Build inference only library." OFF)
  130. option(MGE_WITH_PYTHON_MODULE "Build MegEngine Python Module." ON)
  131. if(MGE_INFERENCE_ONLY)
  132. message("-- Disable distributed support for inference only build.")
  133. set(MGE_WITH_DISTRIBUTED OFF)
  134. message("-- Disable python module for inference only build.")
  135. set(MGE_WITH_PYTHON_MODULE OFF)
  136. message("-- Disable tests for inference only build.")
  137. set(MGE_WITH_TEST OFF)
  138. endif()
  139. if(MGE_WITH_DISTRIBUTED)
  140. include(cmake/protobuf.cmake)
  141. include(cmake/zmq.cmake)
  142. endif()
  143. if(MGB_WITH_FLATBUFFERS)
  144. include(cmake/flatbuffers.cmake)
  145. endif()
  146. if(MSVC)
  147. add_compile_definitions(NOMINMAX=1 _USE_MATH_DEFINES=1 WIN32=1)
  148. else()
  149. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
  150. set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
  151. set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
  152. endif()
  153. if(MGE_WITH_CUDA)
  154. include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
  155. foreach(path ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
  156. get_filename_component(_NAME ${path} NAME)
  157. if(NOT ${_NAME} STREQUAL "stubs")
  158. list(APPEND CUDA_LINK_DIRECTORIES ${path})
  159. endif()
  160. endforeach()
  161. link_directories(${CUDA_LINK_DIRECTORIES})
  162. set(CMAKE_CUDA_FLAGS_DEBUG "-O0 -g")
  163. set(CMAKE_CUDA_FLAGS_RELEASE "-O3")
  164. set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "-O3 -g")
  165. set(CMAKE_CUDA_FLAGS_MINSIZEREL "-Os")
  166. set(CMAKE_CUDA_FLAGS "-Xcompiler -Wall,-Wextra -Xfatbin -compress-all")
  167. if(NOT MGE_ENABLE_RTTI)
  168. set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler -fno-rtti")
  169. endif()
  170. if(NOT MGE_ENABLE_EXCEPTIONS)
  171. set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler -fno-exception")
  172. endif()
  173. if(NOT MGE_CUDA_GENCODE)
  174. if(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386")
  175. set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DMEGDNN_THREADS_512=0")
  176. if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.0.0")
  177. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52")
  178. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60")
  179. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61")
  180. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70")
  181. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75")
  182. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=compute_75")
  183. elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "9.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "9.0.0")
  184. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52")
  185. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60")
  186. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61")
  187. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70")
  188. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=compute_70")
  189. else()
  190. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_35,code=sm_35")
  191. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52")
  192. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60")
  193. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61")
  194. set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=compute_61")
  195. endif()
  196. else()
  197. message(FATAL_ERROR "Unsupported CUDA host arch.")
  198. endif()
  199. else()
  200. set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DMEGDNN_THREADS_512=1")
  201. endif()
  202. set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${MGE_CUDA_GENCODE}")
  203. include(cmake/cudnn.cmake)
  204. if(MGE_WITH_TRT)
  205. include(cmake/tensorrt.cmake)
  206. endif()
  207. if(MGE_CUDA_USE_STATIC)
  208. if(MGE_WITH_TRT)
  209. list(APPEND MGE_CUDA_LIBS -Wl,--whole-archive libnvinfer libcudnn -Wl,--no-whole-archive)
  210. else()
  211. list(APPEND MGE_CUDA_LIBS -Wl,--whole-archive libcudnn -Wl,--no-whole-archive)
  212. endif()
  213. list(APPEND MGE_CUDA_LIBS cusolver_static cublas_static curand_static culibos cudart_static cusparse_static)
  214. if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.1.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.1.0")
  215. list(APPEND MGE_CUDA_LIBS cublasLt_static)
  216. endif()
  217. if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.0.0")
  218. # mark all symbols from liblapack_static.a as weak to avoid
  219. # duplicated definition with mkl
  220. find_library(
  221. LAPACK_STATIC_PATH lapack_static
  222. HINTS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
  223. if(NOT LAPACK_STATIC_PATH)
  224. message(FATAL_ERROR "liblapack_static.a not found")
  225. endif()
  226. set(LAPACK_STATIC_COPY_PATH ${CMAKE_CURRENT_BINARY_DIR}/liblapack_static_copy.a)
  227. # add a target that run objcopy
  228. add_custom_command(
  229. OUTPUT ${LAPACK_STATIC_COPY_PATH}
  230. COMMAND ${CMAKE_OBJCOPY} -w -W* ${LAPACK_STATIC_PATH} ${LAPACK_STATIC_COPY_PATH}
  231. VERBATIM)
  232. add_custom_target(lapack_static_weak_target DEPENDS ${LAPACK_STATIC_COPY_PATH})
  233. # create a library named "lapack_static_weak"
  234. add_library(lapack_static_weak STATIC IMPORTED GLOBAL)
  235. add_dependencies(lapack_static_weak lapack_static_weak_target)
  236. set_target_properties(
  237. lapack_static_weak PROPERTIES
  238. IMPORTED_LOCATION ${LAPACK_STATIC_COPY_PATH})
  239. list(APPEND MGE_CUDA_LIBS lapack_static_weak ${LAPACK_STATIC_COPY_PATH})
  240. endif()
  241. else()
  242. if(MGE_WITH_TRT)
  243. list(APPEND MGE_CUDA_LIBS libnvinfer)
  244. endif()
  245. list(APPEND MGE_CUDA_LIBS libcudnn)
  246. if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.1.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.1.0")
  247. list(APPEND MGE_CUDA_LIBS cublasLt cusolver cublas curand)
  248. endif()
  249. endif()
  250. add_subdirectory(dnn/cuda-stub)
  251. list(APPEND MGE_CUDA_LIBS nvrtc cuda-stub nvToolsExt)
  252. set(MGE_CUDA_LIBS "${MGE_CUDA_LIBS}")
  253. endif()
  254. find_program(CCACHE_BIN ccache)
  255. if(CCACHE_BIN)
  256. set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BIN})
  257. if(MGE_WITH_CUDA AND NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0")
  258. message("-- Using ccache as CMAKE_CUDA_COMPILER_LAUNCHER")
  259. set(CMAKE_CUDA_COMPILER_LAUNCHER ${CCACHE_BIN})
  260. endif()
  261. endif()
  262. if(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386")
  263. if(${MGE_BLAS} STREQUAL "MKL")
  264. include(cmake/mkl.cmake)
  265. set(MGE_BLAS_LIBS libmkl)
  266. elseif(${MGE_BLAS} STREQUAL "OpenBLAS")
  267. include(cmake/OpenBLAS.cmake)
  268. set(MGE_BLAS_LIBS libopenblas)
  269. else()
  270. message(FATAL_ERROR "Unknown BLAS implementation ${MGE_BLAS}")
  271. endif()
  272. endif()
  273. option(MGE_WITH_MKLDNN "Enable Intel MKL_DNN support," ON)
  274. # MKLDNN build
  275. if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64")
  276. add_definitions(-DMEGDNN_X86_WITH_MKL_DNN)
  277. include(cmake/MKL_DNN.cmake)
  278. endif()
  279. add_subdirectory(dnn)
  280. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMGB_ASSERT_LOC=1")
  281. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DMGB_ASSERT_LOC=0")
  282. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DMGB_ASSERT_LOC=1")
  283. set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -DMGB_ASSERT_LOC=0")
  284. if(MGE_ENABLE_RTTI)
  285. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_VERBOSE_TYPEINFO_NAME=1")
  286. endif()
  287. if(MGE_ENABLE_EXCEPTIONS)
  288. add_definitions(-DMGB_ENABLE_EXCEPTION=1)
  289. else()
  290. add_definitions(-DMGB_ENABLE_EXCEPTION=0)
  291. endif()
  292. list(APPEND MGB_OPR_PARAM_DEFS_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py)
  293. set(MGB_OPR_PARAM_DEFS_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/dnn/scripts/gen_param_defs.py)
  294. set(MGB_OPR_PARAM_DEFS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/opr/include/)
  295. file(MAKE_DIRECTORY ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr)
  296. add_custom_command(
  297. OUTPUT
  298. ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h
  299. COMMAND ${PYTHON_EXECUTABLE} ${MGB_OPR_PARAM_DEFS_SCRIPT} ${MGB_OPR_PARAM_DEFS_SRCS}
  300. ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h
  301. DEPENDS ${MGB_OPR_PARAM_DEFS_SRCS} ${MGB_OPR_PARAM_DEFS_SCRIPT}
  302. VERBATIM
  303. )
  304. list(APPEND MGB_OPR_PARAM_DEFS_OUTS
  305. ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h
  306. )
  307. install(FILES ${MGB_OPR_PARAM_DEFS_OUTS} DESTINATION include/megbrain/opr/)
  308. list(APPEND MGB_OPR_PARAM_DEFS_INC ${MGB_OPR_PARAM_DEFS_OUT_DIR})
  309. add_custom_target(_mgb_opr_param_defs DEPENDS ${MGB_OPR_PARAM_DEFS_OUTS})
  310. add_library(mgb_opr_param_defs INTERFACE)
  311. target_include_directories(mgb_opr_param_defs INTERFACE ${MGB_OPR_PARAM_DEFS_INC})
  312. add_dependencies(mgb_opr_param_defs _mgb_opr_param_defs)
  313. if(MGE_WITH_DISTRIBUTED)
  314. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/MegRay)
  315. endif()
  316. add_subdirectory(src)
  317. add_subdirectory(sdk/load-and-run)
  318. if(MGE_WITH_PYTHON_MODULE)
  319. add_subdirectory(python_module)
  320. endif()
  321. if(MGE_WITH_TEST AND MGE_ENABLE_RTTI)
  322. add_subdirectory(test)
  323. endif()
  324. if(TARGET _mgb)
  325. add_custom_target(
  326. develop
  327. COMMAND ${CMAKE_COMMAND} -E create_symlink
  328. ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/$<TARGET_FILE_NAME:_mgb>
  329. ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/$<TARGET_FILE_NAME:_mgb>
  330. COMMAND ${CMAKE_COMMAND} -E create_symlink
  331. ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/mgb.py
  332. ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/mgb.py
  333. COMMAND ${CMAKE_COMMAND} -E create_symlink
  334. ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/opr.py
  335. ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/opr.py
  336. COMMAND ${CMAKE_COMMAND} -E create_symlink
  337. ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/opr_param_defs.py
  338. ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/opr_param_defs.py
  339. COMMAND ${CMAKE_COMMAND} -E create_symlink
  340. ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/include
  341. ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/include
  342. DEPENDS _mgb
  343. VERBATIM
  344. )
  345. endif()
  346. set(MGB_CUDA ${MGE_WITH_CUDA})
  347. if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
  348. set(MGB_ASSERT_LOC 1)
  349. else()
  350. set(MGB_ASSERT_LOC 0)
  351. endif()
  352. set(MGB_ENABLE_DEBUG_UTIL ${MGE_DEBUG_UTIL})
  353. set(MGB_ENABLE_LOGGING ${MGE_ENABLE_LOGGING})
  354. set(MGB_VERBOSE_TYPEINFO_NAME ${MGE_ENABLE_RTTI})
  355. set(MGB_ENABLE_EXCEPTION ${MGE_ENABLE_EXCEPTIONS})
  356. set(MGB_JIT ${MGE_WITH_JIT})
  357. set(MGB_JIT_HALIDE ${MGE_WITH_HALIDE})
  358. set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT})
  359. set(MGB_ENABLE_JSON ${MGE_ENABLE_LOGGING})
  360. set(MGB_ENABLE_GRAD NOT ${MGE_INFERENCE_ONLY})
  361. set(MGB_BUILD_SLIM_SERVING ${MGE_INFERENCE_ONLY})
  362. configure_file(src/core/include/megbrain_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h)
  363. file(READ src/core/include/megbrain_build_config.h _CONTENT)
  364. file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h ${_CONTENT})
  365. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h DESTINATION include)

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

Contributors (1)