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.

llvm-project.cmake 3.9 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # - Find the llvm/mlir libraries
  2. # This module finds if llvm/mlir is installed, or build llvm/mlir from source.
  3. # This module sets the following variables.
  4. #
  5. # MLIR_LLVM_INCLUDE_DIR - path to the LLVM/MLIR include files
  6. # MLIR_LLVM_LIBS - path to the LLVM/MLIR libraries
  7. #
  8. # This module define the following functions.
  9. #
  10. # external_tablegen_library - created interface library which depends on tablegen outputs
  11. include(CMakeParseArguments)
  12. function(external_tablegen_library)
  13. cmake_parse_arguments(
  14. _RULE
  15. "TESTONLY"
  16. "NAME;TBLGEN"
  17. "SRCS;INCLUDES;OUTS"
  18. ${ARGN}
  19. )
  20. if(_RULE_TESTONLY AND NOT MGE_WITH_TEST)
  21. return()
  22. endif()
  23. set(_NAME ${_RULE_NAME})
  24. set(LLVM_TARGET_DEFINITIONS ${_RULE_SRCS})
  25. set(_INCLUDE_DIRS ${_RULE_INCLUDES})
  26. list(TRANSFORM _INCLUDE_DIRS PREPEND "-I")
  27. set(_OUTPUTS)
  28. while(_RULE_OUTS)
  29. list(GET _RULE_OUTS 0 _COMMAND)
  30. list(REMOVE_AT _RULE_OUTS 0)
  31. list(GET _RULE_OUTS 0 _FILE)
  32. list(REMOVE_AT _RULE_OUTS 0)
  33. tablegen(${_RULE_TBLGEN} ${_FILE} ${_COMMAND} ${_INCLUDE_DIRS})
  34. list(APPEND _OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/${_FILE})
  35. endwhile()
  36. add_custom_target(${_NAME}_target DEPENDS ${_OUTPUTS})
  37. add_library(${_NAME} INTERFACE)
  38. add_dependencies(${_NAME} ${_NAME}_target)
  39. target_include_directories(${_NAME} INTERFACE
  40. "$<BUILD_INTERFACE:${_RULE_INCLUDES}>")
  41. install(TARGETS ${_NAME} EXPORT ${MGE_EXPORT_TARGETS})
  42. endfunction()
  43. set(LLVM_LIBS LLVMCore LLVMSupport LLVMX86CodeGen LLVMOrcJIT LLVMNVPTXCodeGen LLVMNVPTXDesc LLVMNVPTXInfo)
  44. set(MLIR_CORE_LIBS MLIRAnalysis MLIRExecutionEngine MLIRIR MLIRParser MLIRPass MLIRSideEffectInterfaces MLIRTransforms)
  45. set(MLIR_DIALECT_LIBS MLIRAsync MLIRAVX512 MLIRGPU MLIRLLVMAVX512 MLIRNVVMIR MLIROpenACC MLIRPDL MLIRPDLInterp MLIRQuant MLIRROCDLIR MLIRSDBM MLIRShape MLIRSPIRV MLIRStandardOpsTransforms)
  46. set(MLIR_CONVERSION_LIBS MLIRAffineToStandard MLIRAVX512ToLLVM MLIRGPUToGPURuntimeTransforms MLIRGPUToNVVMTransforms MLIRSCFToStandard)
  47. set(MLIR_TRANSLATION_LIBS MLIRTargetLLVMIR MLIRTargetNVVMIR)
  48. set(MLIR_LIBS ${MLIR_CORE_LIBS} ${MLIR_DIALECT_LIBS} ${MLIR_CONVERSION_LIBS} ${MLIR_TRANSLATION_LIBS})
  49. set(MLIR_LLVM_LIBS ${LLVM_LIBS} ${MLIR_LIBS})
  50. function(add_mge_mlir_src_dep llvm_monorepo_path)
  51. set(_CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
  52. string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
  53. if(NOT uppercase_CMAKE_BUILD_TYPE MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL)$")
  54. set(CMAKE_BUILD_TYPE "Debug")
  55. endif()
  56. set(_CMAKE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
  57. set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
  58. add_subdirectory("${llvm_monorepo_path}/llvm" ${LLVM_BUILD_DIR} EXCLUDE_FROM_ALL)
  59. # Reset CMAKE_BUILD_TYPE to its previous setting
  60. set(CMAKE_BUILD_TYPE "${_CMAKE_BUILD_TYPE}" CACHE STRING "Build type" FORCE)
  61. # Reset BUILD_SHARED_LIBS to its previous setting
  62. set(BUILD_SHARED_LIBS ${_CMAKE_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libraries" FORCE)
  63. endfunction()
  64. # llvm build options
  65. set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "" FORCE)
  66. set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "" FORCE)
  67. set(LLVM_INCLUDE_BENCHMARKS OFF CACHE BOOL "" FORCE)
  68. set(LLVM_ENABLE_RTTI ${MGE_ENABLE_RTTI} CACHE BOOL "" FORCE)
  69. set(LLVM_TARGETS_TO_BUILD "X86;NVPTX;AArch64;ARM" CACHE STRING "" FORCE)
  70. set(LLVM_ENABLE_PROJECTS "mlir" CACHE STRING "" FORCE)
  71. set(LLVM_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm)
  72. add_mge_mlir_src_dep("third_party/llvm-project")
  73. set(MLIR_LLVM_INCLUDE_DIR
  74. ${PROJECT_SOURCE_DIR}/third_party/llvm-project/llvm/include
  75. ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/include
  76. ${PROJECT_SOURCE_DIR}/third_party/llvm-project/mlir/include
  77. ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/tools/mlir/include
  78. )
  79. set(MLIR_TABLEGEN_EXE mlir-tblgen)

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