mirror of https://github.com/llvm/torch-mlir
85 lines
3.0 KiB
CMake
85 lines
3.0 KiB
CMake
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
message(FATAL_ERROR
|
|
"This project is intended to be built as part of LLVM via "
|
|
"-DLLVM_EXTERNAL_PROJECTS=torch-mlir "
|
|
"-DLLVM_EXTERNAL_TORCH_MLIR_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}")
|
|
endif()
|
|
|
|
option(MLIR_ENABLE_BINDINGS_PYTHON "Enables MLIR Python Bindings" OFF)
|
|
option(TORCH_MLIR_ENABLE_JIT_IR_IMPORTER "Enables JIT IR Importer" ON)
|
|
|
|
set(TORCH_MLIR_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
set(TORCH_MLIR_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
|
message(STATUS "Building torch-mlir project at ${TORCH_MLIR_SOURCE_DIR} (into ${TORCH_MLIR_BINARY_DIR})")
|
|
|
|
# TODO: Fix this upstream so that global include directories are not needed.
|
|
set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir)
|
|
set(MLIR_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/../mlir/include)
|
|
set(MLIR_GENERATED_INCLUDE_DIR ${LLVM_BINARY_DIR}/tools/mlir/include)
|
|
|
|
# TODO: Needed for tablegen. Remove.
|
|
include_directories(SYSTEM ${MLIR_INCLUDE_DIR})
|
|
include_directories(SYSTEM ${MLIR_GENERATED_INCLUDE_DIR})
|
|
include_directories(SYSTEM ${TORCH_MLIR_SOURCE_DIR}/include)
|
|
|
|
function(torch_mlir_target_includes target)
|
|
set(_dirs
|
|
$<BUILD_INTERFACE:${MLIR_INCLUDE_DIR}>
|
|
$<BUILD_INTERFACE:${MLIR_GENERATED_INCLUDE_DIR}>
|
|
$<BUILD_INTERFACE:${TORCH_MLIR_SOURCE_DIR}/include>
|
|
$<BUILD_INTERFACE:${TORCH_MLIR_BINARY_DIR}/include>
|
|
)
|
|
# In LLVM parlance, the actual target may just be an interface and may not
|
|
# be responsible for actually compiling anything. The corresponding obj.
|
|
# target, when present, is just used for compilation and does not
|
|
# contribute to the interface properties.
|
|
# TODO: Normalize this upstream.
|
|
target_include_directories(${target} PUBLIC ${_dirs})
|
|
if(TARGET obj.${target})
|
|
target_include_directories(obj.${target} PRIVATE ${_dirs})
|
|
endif()
|
|
endfunction()
|
|
|
|
# Configure CMake and tablegen.
|
|
list(APPEND CMAKE_MODULE_PATH ${MLIR_MAIN_SRC_DIR}/cmake/modules)
|
|
list(APPEND CMAKE_MODULE_PATH ${LLVM_MAIN_SRC_DIR}/cmake)
|
|
set(MLIR_TABLEGEN_EXE mlir-tblgen)
|
|
|
|
include(TableGen)
|
|
include(AddLLVM)
|
|
include(AddMLIR)
|
|
|
|
################################################################################
|
|
# Setup python.
|
|
# TODO: Make one upstream macro to do this.
|
|
################################################################################
|
|
|
|
if(MLIR_ENABLE_BINDINGS_PYTHON)
|
|
include(MLIRDetectPythonEnv)
|
|
mlir_detect_pybind11_install()
|
|
find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION}
|
|
COMPONENTS Interpreter Development NumPy REQUIRED)
|
|
find_package(pybind11 2.6 CONFIG REQUIRED)
|
|
endif()
|
|
|
|
add_subdirectory(include)
|
|
add_subdirectory(lib)
|
|
add_subdirectory(tools)
|
|
|
|
add_custom_target(check-torch-mlir-all)
|
|
add_dependencies(check-torch-mlir-all
|
|
check-torch-mlir
|
|
check-torch-mlir-python
|
|
)
|
|
|
|
if(MLIR_ENABLE_BINDINGS_PYTHON)
|
|
# If parent projects want to configure where to place the python packages,
|
|
# respect that.
|
|
if(NOT TORCH_MLIR_PYTHON_PACKAGES_DIR)
|
|
set(TORCH_MLIR_PYTHON_PACKAGES_DIR "${CMAKE_CURRENT_BINARY_DIR}/python_packages")
|
|
endif()
|
|
add_subdirectory(python)
|
|
endif()
|
|
|
|
add_subdirectory(test)
|