2019-03-30 13:10:12 +08:00
|
|
|
# MLIR project.
|
2021-02-03 03:09:45 +08:00
|
|
|
|
|
|
|
# Check if MLIR is built as a standalone project.
|
|
|
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
|
|
project(mlir)
|
|
|
|
cmake_minimum_required(VERSION 3.13.4)
|
|
|
|
|
|
|
|
find_package(LLVM CONFIG REQUIRED)
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${LLVM_CMAKE_DIR})
|
|
|
|
include(HandleLLVMOptions)
|
|
|
|
include(AddLLVM)
|
|
|
|
include(TableGen)
|
|
|
|
|
|
|
|
include_directories(${LLVM_INCLUDE_DIRS})
|
|
|
|
|
|
|
|
set(LLVM_MAIN_SRC_DIR ${CMAKE_SOURCE_DIR}/../llvm CACHE PATH
|
|
|
|
"Path to LLVM source tree")
|
|
|
|
set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest)
|
|
|
|
if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h)
|
|
|
|
add_subdirectory(${UNITTEST_DIR} utils/unittest)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}")
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
|
|
|
|
endif()
|
|
|
|
|
2020-04-12 14:29:07 +08:00
|
|
|
set(MLIR_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
|
|
|
|
set(MLIR_MAIN_INCLUDE_DIR ${MLIR_MAIN_SRC_DIR}/include )
|
2019-03-30 13:10:12 +08:00
|
|
|
|
2020-04-12 14:29:07 +08:00
|
|
|
set(MLIR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
set(MLIR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
set(MLIR_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include)
|
2021-02-03 03:09:45 +08:00
|
|
|
set(MLIR_TOOLS_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
2019-03-30 13:10:12 +08:00
|
|
|
|
2020-01-22 08:44:17 +08:00
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
|
2019-03-30 13:10:12 +08:00
|
|
|
|
2020-01-22 08:44:17 +08:00
|
|
|
include(AddMLIR)
|
|
|
|
|
2020-11-04 08:06:28 +08:00
|
|
|
# Forbid implicit function declaration: this may lead to subtle bugs and we
|
|
|
|
# don't have a reason to support this.
|
2020-11-05 10:33:51 +08:00
|
|
|
check_c_compiler_flag("-Werror=implicit-function-declaration" C_SUPPORTS_WERROR_IMPLICIT_FUNCTION_DECLARATION)
|
|
|
|
append_if(C_SUPPORTS_WERROR_IMPLICIT_FUNCTION_DECLARATION "-Werror=implicit-function-declaration" CMAKE_C_FLAGS)
|
2020-11-04 08:06:28 +08:00
|
|
|
|
Add missing mlir-headers target and add tablegen'd deps to it.
Summary:
Prior to this, "ninja install-mlir-headers" failed with an error indicating
the missing target. Verified that from a clean build, the installed
headers include generated files.
Subscribers: mgorny, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72045
2020-01-01 08:32:41 +08:00
|
|
|
# Installing the headers and docs needs to depend on generating any public
|
|
|
|
# tablegen'd targets.
|
2020-04-25 07:42:07 +08:00
|
|
|
# mlir-generic-headers are dialect-independent.
|
|
|
|
add_custom_target(mlir-generic-headers)
|
|
|
|
set_target_properties(mlir-generic-headers PROPERTIES FOLDER "Misc")
|
|
|
|
# mlir-headers may be dialect-dependent.
|
Add missing mlir-headers target and add tablegen'd deps to it.
Summary:
Prior to this, "ninja install-mlir-headers" failed with an error indicating
the missing target. Verified that from a clean build, the installed
headers include generated files.
Subscribers: mgorny, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72045
2020-01-01 08:32:41 +08:00
|
|
|
add_custom_target(mlir-headers)
|
|
|
|
set_target_properties(mlir-headers PROPERTIES FOLDER "Misc")
|
2020-04-25 07:42:07 +08:00
|
|
|
add_dependencies(mlir-headers mlir-generic-headers)
|
2019-12-03 01:17:51 +08:00
|
|
|
add_custom_target(mlir-doc)
|
|
|
|
|
2019-06-26 20:16:11 +08:00
|
|
|
# Build the CUDA conversions and run according tests if the NVPTX backend
|
|
|
|
# is available
|
|
|
|
if ("NVPTX" IN_LIST LLVM_TARGETS_TO_BUILD)
|
|
|
|
set(MLIR_CUDA_CONVERSIONS_ENABLED 1)
|
|
|
|
else()
|
|
|
|
set(MLIR_CUDA_CONVERSIONS_ENABLED 0)
|
|
|
|
endif()
|
2020-02-14 17:12:41 +08:00
|
|
|
# TODO: we should use a config.h file like LLVM does
|
|
|
|
add_definitions(-DMLIR_CUDA_CONVERSIONS_ENABLED=${MLIR_CUDA_CONVERSIONS_ENABLED})
|
2019-06-26 20:16:11 +08:00
|
|
|
|
2020-05-23 05:25:00 +08:00
|
|
|
# Build the ROCm conversions and run according tests if the AMDGPU backend
|
|
|
|
# is available
|
|
|
|
if ("AMDGPU" IN_LIST LLVM_TARGETS_TO_BUILD)
|
|
|
|
set(MLIR_ROCM_CONVERSIONS_ENABLED 1)
|
|
|
|
else()
|
|
|
|
set(MLIR_ROCM_CONVERSIONS_ENABLED 0)
|
|
|
|
endif()
|
|
|
|
add_definitions(-DMLIR_ROCM_CONVERSIONS_ENABLED=${MLIR_ROCM_CONVERSIONS_ENABLED})
|
|
|
|
|
2019-07-04 22:49:52 +08:00
|
|
|
set(MLIR_CUDA_RUNNER_ENABLED 0 CACHE BOOL "Enable building the mlir CUDA runner")
|
[mlir][gpu] Introduce mlir-rocm-runner.
Summary:
`mlir-rocm-runner` is introduced in this commit to execute GPU modules on ROCm
platform. A small wrapper to encapsulate ROCm's HIP runtime API is also inside
the commit.
Due to behavior of ROCm, raw pointers inside memrefs passed to `gpu.launch`
must be modified on the host side to properly capture the pointer values
addressable on the GPU.
LLVM MC is used to assemble AMD GCN ISA coming out from
`ConvertGPUKernelToBlobPass` to binary form, and LLD is used to produce a shared
ELF object which could be loaded by ROCm HIP runtime.
gfx900 is the default target be used right now, although it could be altered via
an option in `mlir-rocm-runner`. Future revisions may consider using ROCm Agent
Enumerator to detect the right target on the system.
Notice AMDGPU Code Object V2 is used in this revision. Future enhancements may
upgrade to AMDGPU Code Object V3.
Bitcode libraries in ROCm-Device-Libs, which implements math routines exposed in
`rocdl` dialect are not yet linked, and is left as a TODO in the logic.
Reviewers: herhut
Subscribers: mgorny, tpr, dexonsmith, mehdi_amini, rriddle, jpienaar, shauheen, antiagainst, nicolasvasilache, csigg, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, stephenneuendorffer, Joonsoo, grosul1, frgossen, Kayjukh, jurahul, llvm-commits
Tags: #mlir, #llvm
Differential Revision: https://reviews.llvm.org/D80676
2020-05-21 05:07:49 +08:00
|
|
|
set(MLIR_ROCM_RUNNER_ENABLED 0 CACHE BOOL "Enable building the mlir ROCm runner")
|
[MLIR][mlir-spirv-cpu-runner] A SPIR-V cpu runner prototype
This patch introduces a SPIR-V runner. The aim is to run a gpu
kernel on a CPU via GPU -> SPIRV -> LLVM conversions. This is a first
prototype, so more features will be added in due time.
- Overview
The runner follows similar flow as the other runners in-tree. However,
having converted the kernel to SPIR-V, we encode the bind attributes of
global variables that represent kernel arguments. Then SPIR-V module is
converted to LLVM. On the host side, we emulate passing the data to device
by creating in main module globals with the same symbolic name as in kernel
module. These global variables are later linked with ones from the nested
module. We copy data from kernel arguments to globals, call the kernel
function from nested module and then copy the data back.
- Current state
At the moment, the runner is capable of running 2 modules, nested one in
another. The kernel module must contain exactly one kernel function. Also,
the runner supports rank 1 integer memref types as arguments (to be scaled).
- Enhancement of JitRunner and ExecutionEngine
To translate nested modules to LLVM IR, JitRunner and ExecutionEngine were
altered to take an optional (default to `nullptr`) function reference that
is a custom LLVM IR module builder. This allows to customize LLVM IR module
creation from MLIR modules.
Reviewed By: ftynse, mravishankar
Differential Revision: https://reviews.llvm.org/D86108
2020-10-23 22:46:18 +08:00
|
|
|
set(MLIR_SPIRV_CPU_RUNNER_ENABLED 0 CACHE BOOL "Enable building the mlir SPIR-V cpu runner")
|
2020-02-19 22:11:22 +08:00
|
|
|
set(MLIR_VULKAN_RUNNER_ENABLED 0 CACHE BOOL "Enable building the mlir Vulkan runner")
|
2019-07-04 22:49:52 +08:00
|
|
|
|
2020-10-05 06:17:34 +08:00
|
|
|
option(MLIR_INCLUDE_TESTS
|
|
|
|
"Generate build targets for the MLIR unit tests."
|
|
|
|
${LLVM_INCLUDE_TESTS})
|
|
|
|
|
|
|
|
option(MLIR_INCLUDE_INTEGRATION_TESTS
|
|
|
|
"Generate build targets for the MLIR integration tests.")
|
|
|
|
|
Initial boiler-plate for python bindings.
Summary:
* Native '_mlir' extension module.
* Python mlir/__init__.py trampoline module.
* Lit test that checks a message.
* Uses some cmake configurations that have worked for me in the past but likely needs further elaboration.
Subscribers: mgorny, mehdi_amini, rriddle, jpienaar, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, stephenneuendorffer, Joonsoo, grosul1, Kayjukh, jurahul, msifontes
Tags: #mlir
Differential Revision: https://reviews.llvm.org/D83279
2020-07-07 14:05:46 +08:00
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Python Bindings Configuration
|
|
|
|
# Requires:
|
|
|
|
# The pybind11 library can be found (set with -DPYBIND_DIR=...)
|
2020-11-25 01:50:18 +08:00
|
|
|
# The python executable is correct (set with -DPython3_EXECUTABLE=...)
|
Initial boiler-plate for python bindings.
Summary:
* Native '_mlir' extension module.
* Python mlir/__init__.py trampoline module.
* Lit test that checks a message.
* Uses some cmake configurations that have worked for me in the past but likely needs further elaboration.
Subscribers: mgorny, mehdi_amini, rriddle, jpienaar, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, stephenneuendorffer, Joonsoo, grosul1, Kayjukh, jurahul, msifontes
Tags: #mlir
Differential Revision: https://reviews.llvm.org/D83279
2020-07-07 14:05:46 +08:00
|
|
|
#
|
|
|
|
# Version locking
|
|
|
|
# ---------------
|
|
|
|
# By default, python extensions are version locked to specific Python libraries.
|
|
|
|
# This linking mode is somewhat more consistent across platforms and surfaces
|
|
|
|
# undefined symbols at link time (vs runtime). It is suitable for development
|
|
|
|
# workflows but can be disabled for more flexible deployment by
|
|
|
|
# setting -DMLIR_PYTHON_BINDINGS_VERSION_LOCKED=OFF
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
set(MLIR_BINDINGS_PYTHON_ENABLED 0 CACHE BOOL
|
|
|
|
"Enables building of Python bindings.")
|
|
|
|
set(MLIR_PYTHON_BINDINGS_VERSION_LOCKED 1 CACHE BOOL
|
|
|
|
"Links to specific python libraries, resolving all symbols.")
|
|
|
|
|
|
|
|
if(MLIR_BINDINGS_PYTHON_ENABLED)
|
2020-11-21 09:57:46 +08:00
|
|
|
include(MLIRDetectPythonEnv)
|
2021-03-16 00:33:31 +08:00
|
|
|
find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION}
|
|
|
|
COMPONENTS Interpreter Development NumPy REQUIRED)
|
2020-11-11 01:14:37 +08:00
|
|
|
message(STATUS "Found python include dirs: ${Python3_INCLUDE_DIRS}")
|
|
|
|
message(STATUS "Found python libraries: ${Python3_LIBRARIES}")
|
2020-11-29 17:37:36 +08:00
|
|
|
message(STATUS "Found numpy v${Python3_NumPy_VERSION}: ${Python3_NumPy_INCLUDE_DIRS}")
|
2020-11-21 09:57:46 +08:00
|
|
|
mlir_detect_pybind11_install()
|
|
|
|
find_package(pybind11 2.6 CONFIG REQUIRED)
|
2020-11-08 01:05:51 +08:00
|
|
|
message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIR}")
|
Initial boiler-plate for python bindings.
Summary:
* Native '_mlir' extension module.
* Python mlir/__init__.py trampoline module.
* Lit test that checks a message.
* Uses some cmake configurations that have worked for me in the past but likely needs further elaboration.
Subscribers: mgorny, mehdi_amini, rriddle, jpienaar, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, aartbik, liufengdb, stephenneuendorffer, Joonsoo, grosul1, Kayjukh, jurahul, msifontes
Tags: #mlir
Differential Revision: https://reviews.llvm.org/D83279
2020-07-07 14:05:46 +08:00
|
|
|
message(STATUS "Python prefix = '${PYTHON_MODULE_PREFIX}', "
|
|
|
|
"suffix = '${PYTHON_MODULE_SUFFIX}', "
|
|
|
|
"extension = '${PYTHON_MODULE_EXTENSION}")
|
|
|
|
endif()
|
|
|
|
|
2019-03-30 13:10:12 +08:00
|
|
|
include_directories( "include")
|
|
|
|
include_directories( ${MLIR_INCLUDE_DIR})
|
|
|
|
|
2020-03-15 02:41:12 +08:00
|
|
|
# Adding tools/mlir-tblgen here as calling add_tablegen sets some variables like
|
|
|
|
# MLIR_TABLEGEN_EXE in PARENT_SCOPE which gets lost if that folder is included
|
|
|
|
# from another directory like tools
|
2020-10-05 06:17:34 +08:00
|
|
|
add_subdirectory(tools/mlir-tblgen)
|
2021-01-18 18:54:06 +08:00
|
|
|
add_subdirectory(tools/mlir-linalg-ods-gen)
|
2020-03-15 02:41:12 +08:00
|
|
|
|
2019-03-30 13:10:12 +08:00
|
|
|
add_subdirectory(include/mlir)
|
|
|
|
add_subdirectory(lib)
|
2020-08-05 20:36:16 +08:00
|
|
|
# C API needs all dialects for registration, but should be built before tests.
|
|
|
|
add_subdirectory(lib/CAPI)
|
2020-05-19 00:44:26 +08:00
|
|
|
if (MLIR_INCLUDE_TESTS)
|
2020-10-05 06:17:34 +08:00
|
|
|
add_definitions(-DMLIR_INCLUDE_TESTS)
|
2021-02-11 09:17:24 +08:00
|
|
|
add_custom_target(MLIRUnitTests)
|
2021-02-04 09:59:08 +08:00
|
|
|
if (EXISTS ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include/gtest/gtest.h)
|
2021-02-03 03:09:45 +08:00
|
|
|
add_subdirectory(unittests)
|
|
|
|
else()
|
|
|
|
message(WARNING "gtest not found, unittests will not be available")
|
|
|
|
endif()
|
2020-05-19 00:44:26 +08:00
|
|
|
add_subdirectory(test)
|
|
|
|
endif()
|
2020-02-09 11:27:54 +08:00
|
|
|
# Tools needs to come late to ensure that MLIR_ALL_LIBS is populated.
|
|
|
|
# Generally things after this point may depend on MLIR_ALL_LIBS or libMLIR.so.
|
2020-10-05 06:17:34 +08:00
|
|
|
add_subdirectory(tools)
|
2021-04-29 04:04:17 +08:00
|
|
|
|
|
|
|
if(MLIR_BINDINGS_PYTHON_ENABLED)
|
|
|
|
# Python sources: built extensions come in via lib/Bindings/Python
|
|
|
|
add_subdirectory(python)
|
|
|
|
endif()
|
2019-04-03 01:02:07 +08:00
|
|
|
|
2020-10-05 06:17:34 +08:00
|
|
|
if( LLVM_INCLUDE_EXAMPLES )
|
2019-04-03 01:02:07 +08:00
|
|
|
add_subdirectory(examples)
|
|
|
|
endif()
|
2019-11-20 13:04:45 +08:00
|
|
|
|
2020-10-05 06:17:34 +08:00
|
|
|
option(MLIR_INCLUDE_DOCS "Generate build targets for the MLIR docs."
|
|
|
|
${LLVM_INCLUDE_DOCS})
|
2020-01-26 01:17:31 +08:00
|
|
|
if (MLIR_INCLUDE_DOCS)
|
|
|
|
add_subdirectory(docs)
|
|
|
|
endif()
|
|
|
|
|
2020-10-05 06:17:34 +08:00
|
|
|
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
|
2019-11-20 13:04:45 +08:00
|
|
|
install(DIRECTORY include/mlir include/mlir-c
|
|
|
|
DESTINATION include
|
|
|
|
COMPONENT mlir-headers
|
|
|
|
FILES_MATCHING
|
2020-01-06 17:01:59 +08:00
|
|
|
PATTERN "*.def"
|
2019-11-20 13:04:45 +08:00
|
|
|
PATTERN "*.h"
|
|
|
|
PATTERN "*.inc"
|
2019-12-30 01:04:09 +08:00
|
|
|
PATTERN "*.td"
|
2019-11-20 13:04:45 +08:00
|
|
|
PATTERN "LICENSE.TXT"
|
|
|
|
)
|
|
|
|
|
|
|
|
install(DIRECTORY ${MLIR_INCLUDE_DIR}/mlir ${MLIR_INCLUDE_DIR}/mlir-c
|
|
|
|
DESTINATION include
|
|
|
|
COMPONENT mlir-headers
|
|
|
|
FILES_MATCHING
|
2020-01-22 08:44:17 +08:00
|
|
|
PATTERN "*.def"
|
2019-11-20 13:04:45 +08:00
|
|
|
PATTERN "*.h"
|
|
|
|
PATTERN "*.gen"
|
|
|
|
PATTERN "*.inc"
|
2020-01-22 08:44:17 +08:00
|
|
|
PATTERN "*.td"
|
2019-11-20 13:04:45 +08:00
|
|
|
PATTERN "CMakeFiles" EXCLUDE
|
|
|
|
PATTERN "config.h" EXCLUDE
|
|
|
|
)
|
|
|
|
|
|
|
|
if (NOT LLVM_ENABLE_IDE)
|
|
|
|
add_llvm_install_targets(install-mlir-headers
|
|
|
|
DEPENDS mlir-headers
|
|
|
|
COMPONENT mlir-headers)
|
|
|
|
endif()
|
|
|
|
endif()
|
2020-01-22 08:44:17 +08:00
|
|
|
|
|
|
|
add_subdirectory(cmake/modules)
|