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 $ $ $ $ ) # 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)