[MLIR] [CMake] Support building MLIR standalone
authorMichał Górny <mgorny@moritz.systems>
Tue, 2 Feb 2021 19:09:45 +0000 (13:09 -0600)
committerIsuru Fernando <isuruf@gmail.com>
Tue, 2 Feb 2021 19:10:21 +0000 (13:10 -0600)
Add the necessary bits to CMakeLists to make it possible to configure
MLIR against installed LLVM, and build it with minimal need for LLVM
source tree.  The latter is only necessary to run unittests, and if it
is missing then unittests are skipped with a warning.

This change includes the necessary changes to tests, in particular
adding some missing substitutions and defining missing variables
for lit.site.cfg.py substitution.

Reviewed By: stephenneuendorffer

Differential Revision: https://reviews.llvm.org/D85464

Co-authored-by: Isuru Fernando <isuruf@gmail.com>
mlir/CMakeLists.txt
mlir/cmake/modules/AddMLIR.cmake
mlir/test/CMakeLists.txt
mlir/test/lit.cfg.py

index cbae5fd..baacbdd 100644 (file)
@@ -1,10 +1,37 @@
 # MLIR project.
+
+# 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()
+
 set(MLIR_MAIN_SRC_DIR     ${CMAKE_CURRENT_SOURCE_DIR}  )
 set(MLIR_MAIN_INCLUDE_DIR ${MLIR_MAIN_SRC_DIR}/include )
 
 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)
+set(MLIR_TOOLS_DIR   ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
 
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
 
@@ -106,7 +133,11 @@ add_subdirectory(lib)
 add_subdirectory(lib/CAPI)
 if (MLIR_INCLUDE_TESTS)
   add_definitions(-DMLIR_INCLUDE_TESTS)
-  add_subdirectory(unittests)
+  if (TARGET gtest)
+    add_subdirectory(unittests)
+  else()
+    message(WARNING "gtest not found, unittests will not be available")
+  endif()
   add_subdirectory(test)
 endif()
 if (MLIR_INCLUDE_INTEGRATION_TESTS)
index 4cfd351..4a814ea 100644 (file)
@@ -2,6 +2,7 @@ function(mlir_tablegen ofn)
   tablegen(MLIR ${ARGV})
   set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
       PARENT_SCOPE)
+  include_directories(${CMAKE_CURRENT_BINARY_DIR})
 endfunction()
 
 # Declare a dialect in the include directory
index 9ab9c09..999201e 100644 (file)
@@ -42,7 +42,6 @@ configure_lit_site_cfg(
 
 set(MLIR_TEST_DEPENDS
   FileCheck count not
-  MLIRUnitTests
   mlir-capi-ir-test
   mlir-capi-pass-test
   mlir-cpu-runner
@@ -58,6 +57,10 @@ set(MLIR_TEST_DEPENDS
   mlir_async_runtime
   )
 
+if(TARGET gtest)
+  list(APPEND MLIR_TEST_DEPENDS MLIRUnitTests)
+endif()
+
 if(LLVM_BUILD_EXAMPLES)
   list(APPEND MLIR_TEST_DEPENDS
     toyc-ch1
index 482513b..bff4785 100644 (file)
@@ -61,6 +61,10 @@ tools = [
     'mlir-capi-ir-test',
     'mlir-capi-pass-test',
     'mlir-edsc-builder-api-test',
+    'mlir-cpu-runner',
+    'mlir-linalg-ods-gen',
+    'mlir-reduce',
+    'mlir-sdbm-api-test',
 ]
 
 # The following tools are optional