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

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