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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. if (MGE_USE_SYSTEM_LIB)
  44. find_package(ZLIB)
  45. find_package(MLIR REQUIRED CONFIG)
  46. message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}")
  47. message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
  48. list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
  49. list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
  50. include(TableGen)
  51. set(MLIR_LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIRS} ${MLIR_INCLUDE_DIRS})
  52. set(MLIR_LLVM_COMPONENTS Core;Support;X86CodeGen;OrcJIT;NVPTX)
  53. llvm_map_components_to_libnames(MLIR_LLVM_LIBS ${MLIR_LLVM_COMPONENTS})
  54. set(MLIR_LLVM_LIB_DIR ${MLIR_INSTALL_PREFIX}/lib)
  55. function(find_mlir_llvm_lib lib)
  56. find_library(${lib}
  57. NAMES ${lib}
  58. PATHS ${MLIR_LLVM_LIB_DIR}
  59. NO_DEFAULT_PATH)
  60. if(${${lib}} STREQUAL ${lib}-NOTFOUND)
  61. message(FATAL_ERROR "${lib} not found, did you forget to build llvm-project?")
  62. else()
  63. list(APPEND MLIR_LLVM_LIBS ${lib})
  64. set(MLIR_LLVM_LIBS "${MLIR_LLVM_LIBS}" PARENT_SCOPE)
  65. endif()
  66. endfunction(find_mlir_llvm_lib)
  67. set(MLIR_COMPONENTS MLIRAnalysis;MLIRExecutionEngine;MLIRIR;MLIRParser;MLIRPass;MLIRSideEffectInterfaces;MLIRTargetLLVMIR;MLIRTransforms;MLIRAffineToStandard;MLIRSCFToStandard;MLIRAVX512ToLLVM;MLIRAVX512;MLIRLLVMAVX512;MLIRSDBM;MLIRROCDLIR;MLIRGPU;MLIRQuant;MLIRSPIRV;MLIRNVVMIR;MLIRShape;MLIRGPUToNVVMTransforms;MLIRTargetNVVMIR;MLIRGPUToGPURuntimeTransforms;MLIRStandardOpsTransforms)
  68. foreach(c ${MLIR_COMPONENTS})
  69. find_mlir_llvm_lib(${c})
  70. endforeach()
  71. return()
  72. endif()
  73. function(add_mge_mlir_src_dep llvm_monorepo_path)
  74. set(_CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
  75. string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
  76. if(NOT uppercase_CMAKE_BUILD_TYPE MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL)$")
  77. set(CMAKE_BUILD_TYPE "Debug")
  78. endif()
  79. set(_CMAKE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
  80. set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
  81. add_subdirectory("${llvm_monorepo_path}/llvm" ${LLVM_BUILD_DIR} EXCLUDE_FROM_ALL)
  82. # Reset CMAKE_BUILD_TYPE to its previous setting
  83. set(CMAKE_BUILD_TYPE "${_CMAKE_BUILD_TYPE}" CACHE STRING "Build type" FORCE)
  84. # Reset BUILD_SHARED_LIBS to its previous setting
  85. set(BUILD_SHARED_LIBS ${_CMAKE_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libraries" FORCE)
  86. endfunction()
  87. set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "" FORCE)
  88. set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "" FORCE)
  89. set(LLVM_INCLUDE_BENCHMARKS OFF CACHE BOOL "" FORCE)
  90. set(LLVM_ENABLE_RTTI ${MGE_ENABLE_RTTI} CACHE BOOL "" FORCE)
  91. set(LLVM_TARGETS_TO_BUILD "X86;NVPTX;AMDGPU;AArch64;ARM;PowerPC;SystemZ" CACHE STRING "" FORCE)
  92. set(LLVM_ENABLE_PROJECTS "mlir" CACHE STRING "" FORCE)
  93. set(LLVM_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm)
  94. add_mge_mlir_src_dep("third_party/llvm-project")
  95. set(MLIR_LLVM_INCLUDE_DIR
  96. ${PROJECT_SOURCE_DIR}/third_party/llvm-project/llvm/include
  97. ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/include
  98. ${PROJECT_SOURCE_DIR}/third_party/llvm-project/mlir/include
  99. ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/tools/mlir/include
  100. )
  101. set(MLIR_TABLEGEN_EXE mlir-tblgen)
  102. set(MLIR_LLVM_LIBS LLVMCore;LLVMSupport;LLVMX86CodeGen;LLVMOrcJIT;LLVMNVPTXCodeGen;LLVMNVPTXDesc;LLVMNVPTXInfo;MLIRAnalysis;MLIRExecutionEngine;MLIRIR;MLIRParser;MLIRPass;MLIRSideEffectInterfaces;MLIRTargetLLVMIR;MLIRTransforms;MLIRAffineToStandard;MLIRSCFToStandard;MLIRAVX512ToLLVM;MLIRAVX512;MLIRLLVMAVX512;MLIRSDBM;MLIRROCDLIR;MLIRGPU;MLIRQuant;MLIRSPIRV;MLIRNVVMIR;MLIRGPUToNVVMTransforms;MLIRShape;MLIRTargetNVVMIR;MLIRGPUToGPURuntimeTransforms;MLIRStandardOpsTransforms)

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