[Mlir-commits] [mlir] 4f0f436 - [MLIR] Adjust libMLIR building to more closely follow libClang

Stephen Neuendorffer llvmlistbot at llvm.org
Mon May 4 11:40:55 PDT 2020


Author: Valentin Churavy
Date: 2020-05-04T11:40:46-07:00
New Revision: 4f0f436749c264c16eb226c9b9b132e07e3650a6

URL: https://github.com/llvm/llvm-project/commit/4f0f436749c264c16eb226c9b9b132e07e3650a6
DIFF: https://github.com/llvm/llvm-project/commit/4f0f436749c264c16eb226c9b9b132e07e3650a6.diff

LOG: [MLIR] Adjust libMLIR building to more closely follow libClang

- Exports MLIR targets to be used out-of-tree.
- mimicks `add_clang_library` and `add_flang_library`.
- Fixes libMLIR.so

After https://reviews.llvm.org/D77515 libMLIR.so was no longer containing
any object files. We originally had a cludge there that made it work with
the static initalizers and when switchting away from that to the way the
clang shlib does it, I noticed that MLIR doesn't create a `obj.{name}` target,
and doesn't export it's targets to `lib/cmake/mlir`.

This is due to MLIR using `add_llvm_library` under the hood, which adds
the target to `llvmexports`.

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

[MLIR] Fix libMLIR.so and LLVM_LINK_LLVM_DYLIB

Primarily, this patch moves all mlir references to LLVM libraries into
either LLVM_LINK_COMPONENTS or LINK_COMPONENTS.  This enables magic in
the llvm cmake files to automatically replace reference to LLVM components
with references to libLLVM.so when necessary.  Among other things, this
completes fixing libMLIR.so, which has been broken for some configurations
since D77515.

Unlike previously, the pattern is now that mlir libraries should almost
always use add_mlir_library.  Previously, some libraries still used
add_llvm_library.  However, this confuses the export of targets for use
out of tree because libraries specified with add_llvm_library are exported
by LLVM.  Instead users which don't need/can't be linked into libMLIR.so
can specify EXCLUDE_FROM_LIBMLIR

A common error mode is linking with LLVM libraries outside of LINK_COMPONENTS.
This almost always results in symbol confusion or multiply defined options
in LLVM when the same object file is included as a static library and
as part of libLLVM.so.  To catch these errors more directly, there's now
mlir_check_all_link_libraries.

To simplify usage of add_mlir_library, we assume that all mlir
libraries depend on LLVMSupport, so it's not necessary to separately specify
it.

tested with:
BUILD_SHARED_LIBS=on,
BUILD_SHARED_LIBS=off + LLVM_BUILD_LLVM_DYLIB,
BUILD_SHARED_LIBS=off + LLVM_BUILD_LLVM_DYLIB + LLVM_LINK_LLVM_DYLIB.

By: Stephen Neuendorffer <stephen.neuendorffer at xilinx.com>
Differential Revision: https://reviews.llvm.org/D79067

[MLIR] Move from using target_link_libraries to LINK_LIBS

This allows us to correctly generate dependencies for derived targets,
such as targets which are created for object libraries.

By: Stephen Neuendorffer <stephen.neuendorffer at xilinx.com>
Differential Revision: https://reviews.llvm.org/D79243

Three commits have been squashed to avoid intermediate build breakage.

Added: 
    

Modified: 
    mlir/cmake/modules/AddMLIR.cmake
    mlir/cmake/modules/MLIRConfig.cmake.in
    mlir/examples/toy/Ch6/CMakeLists.txt
    mlir/examples/toy/Ch7/CMakeLists.txt
    mlir/lib/Analysis/CMakeLists.txt
    mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt
    mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
    mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt
    mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
    mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
    mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
    mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
    mlir/lib/Conversion/LoopToStandard/CMakeLists.txt
    mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
    mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
    mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
    mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
    mlir/lib/Dialect/AVX512/CMakeLists.txt
    mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt
    mlir/lib/Dialect/Affine/IR/CMakeLists.txt
    mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt
    mlir/lib/Dialect/Affine/Utils/CMakeLists.txt
    mlir/lib/Dialect/GPU/CMakeLists.txt
    mlir/lib/Dialect/LLVMIR/CMakeLists.txt
    mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt
    mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
    mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
    mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
    mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
    mlir/lib/Dialect/LoopOps/CMakeLists.txt
    mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt
    mlir/lib/Dialect/OpenMP/CMakeLists.txt
    mlir/lib/Dialect/Quant/CMakeLists.txt
    mlir/lib/Dialect/SDBM/CMakeLists.txt
    mlir/lib/Dialect/SPIRV/CMakeLists.txt
    mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt
    mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt
    mlir/lib/Dialect/Shape/CMakeLists.txt
    mlir/lib/Dialect/StandardOps/CMakeLists.txt
    mlir/lib/Dialect/Vector/CMakeLists.txt
    mlir/lib/EDSC/CMakeLists.txt
    mlir/lib/ExecutionEngine/CMakeLists.txt
    mlir/lib/IR/CMakeLists.txt
    mlir/lib/Interfaces/CMakeLists.txt
    mlir/lib/Parser/CMakeLists.txt
    mlir/lib/Pass/CMakeLists.txt
    mlir/lib/Support/CMakeLists.txt
    mlir/lib/TableGen/CMakeLists.txt
    mlir/lib/Target/CMakeLists.txt
    mlir/lib/Transforms/CMakeLists.txt
    mlir/lib/Transforms/Utils/CMakeLists.txt
    mlir/lib/Translation/CMakeLists.txt
    mlir/test/EDSC/CMakeLists.txt
    mlir/test/SDBM/CMakeLists.txt
    mlir/test/lib/Dialect/Affine/CMakeLists.txt
    mlir/test/lib/Dialect/SPIRV/CMakeLists.txt
    mlir/test/lib/Dialect/Test/CMakeLists.txt
    mlir/test/lib/IR/CMakeLists.txt
    mlir/test/lib/Pass/CMakeLists.txt
    mlir/test/lib/Transforms/CMakeLists.txt
    mlir/tools/mlir-cpu-runner/CMakeLists.txt
    mlir/tools/mlir-linalg-ods-gen/CMakeLists.txt
    mlir/tools/mlir-opt/CMakeLists.txt
    mlir/tools/mlir-shlib/CMakeLists.txt
    mlir/tools/mlir-tblgen/CMakeLists.txt
    mlir/tools/mlir-translate/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/mlir/cmake/modules/AddMLIR.cmake b/mlir/cmake/modules/AddMLIR.cmake
index 6a2856b7f987..6c1ec381a675 100644
--- a/mlir/cmake/modules/AddMLIR.cmake
+++ b/mlir/cmake/modules/AddMLIR.cmake
@@ -29,11 +29,111 @@ function(add_mlir_doc doc_filename command output_file output_directory)
   add_dependencies(mlir-doc ${output_file}DocGen)
 endfunction()
 
-# Declare a library which can be compiled in libMLIR.so
-macro(add_mlir_library name)
-  set_property(GLOBAL APPEND PROPERTY MLIR_ALL_LIBS ${name})
-  add_llvm_library(${ARGV})
-endmacro(add_mlir_library)
+# Declare an mlir library which can be compiled in libMLIR.so
+# In addition to everything that llvm_add_librar accepts, this
+# also has the following option:
+# EXCLUDE_FROM_LIBMLIR
+#   Don't include this library in libMLIR.so.  This option should be used
+#   for test libraries, executable-specific libraries, or rarely used libraries
+#   with large dependencies.
+function(add_mlir_library name)
+  cmake_parse_arguments(ARG
+    "SHARED;INSTALL_WITH_TOOLCHAIN;EXCLUDE_FROM_LIBMLIR"
+    ""
+    "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS"
+    ${ARGN})
+  set(srcs)
+  if(MSVC_IDE OR XCODE)
+    # Add public headers
+    file(RELATIVE_PATH lib_path
+      ${MLIR_SOURCE_DIR}/lib/
+      ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+    if(NOT lib_path MATCHES "^[.][.]")
+      file( GLOB_RECURSE headers
+        ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.h
+        ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.def
+      )
+      set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON)
+
+      file( GLOB_RECURSE tds
+        ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.td
+      )
+      source_group("TableGen descriptions" FILES ${tds})
+      set_source_files_properties(${tds}} PROPERTIES HEADER_FILE_ONLY ON)
+
+      if(headers OR tds)
+        set(srcs ${headers} ${tds})
+      endif()
+    endif()
+  endif(MSVC_IDE OR XCODE)
+  if(srcs OR ARG_ADDITIONAL_HEADERS)
+    set(srcs
+      ADDITIONAL_HEADERS
+      ${srcs}
+      ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
+      )
+  endif()
+  if(ARG_SHARED)
+    set(LIBTYPE SHARED)
+  else()
+    # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
+    # so we need to handle it here.
+    if(BUILD_SHARED_LIBS)
+      set(LIBTYPE SHARED)
+    else()
+      set(LIBTYPE STATIC)
+    endif()
+    if(NOT XCODE)
+      # The Xcode generator doesn't handle object libraries correctly.
+      list(APPEND LIBTYPE OBJECT)
+    endif()
+    # Test libraries and such shouldn't be include in libMLIR.so
+    if(NOT ARG_EXCLUDE_FROM_LIBMLIR)
+      set_property(GLOBAL APPEND PROPERTY MLIR_STATIC_LIBS ${name})
+      set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS ${ARG_LINK_COMPONENTS})
+      set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS})
+    endif()
+  endif()
+
+  # MLIR libraries uniformly depend on LLVMSupport.  Just specify it once here.
+  list(APPEND ARG_LINK_COMPONENTS Support)
+  list(APPEND ARG_DEPENDS mlir-generic-headers)
+  llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs} DEPENDS ${ARG_DEPENDS} LINK_COMPONENTS ${ARG_LINK_COMPONENTS} LINK_LIBS ${ARG_LINK_LIBS})
+
+  if(TARGET ${name})
+    target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+
+    if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+      set(export_to_mlirtargets)
+      if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+          "mlir-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+          NOT LLVM_DISTRIBUTION_COMPONENTS)
+          set(export_to_mlirtargets EXPORT MLIRTargets)
+        set_property(GLOBAL PROPERTY MLIR_HAS_EXPORTS True)
+      endif()
+
+      install(TARGETS ${name}
+        COMPONENT ${name}
+        ${export_to_mlirtargets}
+        LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+        ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+        RUNTIME DESTINATION bin)
+
+      if (NOT LLVM_ENABLE_IDE)
+        add_llvm_install_targets(install-${name}
+                                 DEPENDS ${name}
+                                 COMPONENT ${name})
+      endif()
+      set_property(GLOBAL APPEND PROPERTY MLIR_ALL_LIBS ${name})
+    endif()
+    set_property(GLOBAL APPEND PROPERTY MLIR_EXPORTS ${name})
+  else()
+    # Add empty "phony" target
+    add_custom_target(${name})
+  endif()
+  set_target_properties(${name} PROPERTIES FOLDER "MLIR libraries")
+endfunction(add_mlir_library)
 
 # Declare the library associated with a dialect.
 function(add_mlir_dialect_library name)
@@ -52,3 +152,37 @@ function(add_mlir_translation_library name)
   set_property(GLOBAL APPEND PROPERTY MLIR_TRANSLATION_LIBS ${name})
   add_mlir_library(${ARGV} DEPENDS mlir-headers)
 endfunction(add_mlir_translation_library)
+
+# Verification tools to aid debugging.
+function(mlir_check_link_libraries name)
+  if(TARGET ${name})
+    get_target_property(libs ${name} LINK_LIBRARIES)
+    # message("${name} libs are: ${libs}")
+    set(linking_llvm 0)
+    foreach(lib ${libs})
+      if(lib)
+        if(${lib} MATCHES "^LLVM$")
+          set(linking_llvm 1)
+        endif()
+        if((${lib} MATCHES "^LLVM.+") AND ${linking_llvm})
+          # This will almost always cause execution problems, since the
+          # same symbol might be loaded from 2 separate libraries.  This
+          # often comes from referring to an LLVM library target
+          # explicitly in target_link_libraries()
+          message("WARNING: ${l} links LLVM and ${lib}!")
+        endif()
+      endif()
+    endforeach()
+  endif()
+endfunction(mlir_check_link_libraries)
+
+function(mlir_check_all_link_libraries name)
+  mlir_check_link_libraries(${name})
+  if(TARGET ${name})
+    get_target_property(libs ${name} LINK_LIBRARIES)
+    # message("${name} libs are: ${libs}")
+    foreach(lib ${libs})
+      mlir_check_link_libraries(${lib})
+    endforeach()
+  endif()
+endfunction(mlir_check_all_link_libraries)

diff  --git a/mlir/cmake/modules/MLIRConfig.cmake.in b/mlir/cmake/modules/MLIRConfig.cmake.in
index e8822e50ad55..de38f94add75 100644
--- a/mlir/cmake/modules/MLIRConfig.cmake.in
+++ b/mlir/cmake/modules/MLIRConfig.cmake.in
@@ -19,9 +19,7 @@ set_property(GLOBAL PROPERTY MLIR_DIALECT_LIBS "@MLIR_DIALECT_LIBS@")
 set_property(GLOBAL PROPERTY MLIR_CONVERSION_LIBS "@MLIR_CONVERSION_LIBS@")
 
 # Provide all our library targets to users.
-if(EXISTS @MLIR_CONFIG_EXPORTS_FILE@)
-  include("@MLIR_CONFIG_EXPORTS_FILE@")
-endif()
+include("@MLIR_CONFIG_EXPORTS_FILE@")
 
 # By creating these targets here, subprojects that depend on MLIR's
 # tablegen-generated headers can always depend on these targets whether building

diff  --git a/mlir/examples/toy/Ch6/CMakeLists.txt b/mlir/examples/toy/Ch6/CMakeLists.txt
index be797c6c1e96..c821c77f461c 100644
--- a/mlir/examples/toy/Ch6/CMakeLists.txt
+++ b/mlir/examples/toy/Ch6/CMakeLists.txt
@@ -4,6 +4,8 @@ add_subdirectory(include)
 set(LLVM_LINK_COMPONENTS
   Core
   Support
+  nativecodegen
+  OrcJIT
   )
 
 set(LLVM_TARGET_DEFINITIONS mlir/ToyCombine.td)

diff  --git a/mlir/examples/toy/Ch7/CMakeLists.txt b/mlir/examples/toy/Ch7/CMakeLists.txt
index 9a9f335d3a92..f622bf5ac527 100644
--- a/mlir/examples/toy/Ch7/CMakeLists.txt
+++ b/mlir/examples/toy/Ch7/CMakeLists.txt
@@ -4,6 +4,8 @@ add_subdirectory(include)
 set(LLVM_LINK_COMPONENTS
   Core
   Support
+  nativecodegen
+  OrcJIT
   )
 
 set(LLVM_TARGET_DEFINITIONS mlir/ToyCombine.td)

diff  --git a/mlir/lib/Analysis/CMakeLists.txt b/mlir/lib/Analysis/CMakeLists.txt
index 2fa57c510fdf..63ddcdaee3d3 100644
--- a/mlir/lib/Analysis/CMakeLists.txt
+++ b/mlir/lib/Analysis/CMakeLists.txt
@@ -17,12 +17,7 @@ add_mlir_library(MLIRAnalysis
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Analysis
 
-  DEPENDS
-  mlir-generic-headers
-  )
-
-target_link_libraries(MLIRAnalysis
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRCallInterfaces
   MLIRControlFlowInterfaces
@@ -40,14 +35,10 @@ add_mlir_library(MLIRLoopAnalysis
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Analysis
 
-  DEPENDS
-  mlir-generic-headers
-  )
-
-target_link_libraries(MLIRLoopAnalysis
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRCallInterfaces
   MLIRControlFlowInterfaces
   MLIRInferTypeOpInterface
-  MLIRLoopOps)
+  MLIRLoopOps
+  )

diff  --git a/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt b/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt
index 11397b9e105e..cf94a0670f3a 100644
--- a/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt
@@ -6,7 +6,10 @@ add_mlir_conversion_library(MLIRAVX512ToLLVM
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 
 target_link_libraries(MLIRAVX512ToLLVM
   PUBLIC
@@ -15,6 +18,4 @@ target_link_libraries(MLIRAVX512ToLLVM
   MLIRLLVMIR
   MLIRStandardToLLVM
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
index 9324f7b21c80..f08c2a5fd787 100644
--- a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
+++ b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
@@ -6,7 +6,10 @@ add_mlir_conversion_library(MLIRAffineToStandard
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 target_link_libraries(
   MLIRAffineToStandard
   PUBLIC
@@ -16,6 +19,4 @@ target_link_libraries(
   MLIRStandardOps
   MLIRTransforms
   MLIRIR
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt
index a4c98e555322..30a6b2c24bd8 100644
--- a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt
@@ -9,9 +9,9 @@ set(SOURCES
 if (MLIR_CUDA_CONVERSIONS_ENABLED)
  list(APPEND SOURCES "ConvertKernelFuncToCubin.cpp")
   set(NVPTX_LIBS
-    LLVMNVPTXCodeGen
-    LLVMNVPTXDesc
-    LLVMNVPTXInfo
+    NVPTXCodeGen
+    NVPTXDesc
+    NVPTXInfo
   )
 endif()
 
@@ -20,13 +20,14 @@ add_mlir_conversion_library(MLIRGPUtoCUDATransforms
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  MC
+  ${NVPTX_LIBS}
+  )
 target_link_libraries(MLIRGPUtoCUDATransforms
   PUBLIC
-  ${NVPTX_LIBS}
-  LLVMCore
-  LLVMMC
-  LLVMSupport
   MLIRGPU
   MLIRIR
   MLIRLLVMIR

diff  --git a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
index b7c583d57169..8e0b691a056d 100644
--- a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
@@ -12,7 +12,6 @@ add_mlir_conversion_library(MLIRGPUtoNVVMTransforms
 
 target_link_libraries(MLIRGPUtoNVVMTransforms
   PUBLIC
-  LLVMSupport
   MLIRGPU
   MLIRLLVMIR
   MLIRNVVMIR

diff  --git a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
index 2161abd37541..64e2eff5ae82 100644
--- a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
@@ -12,7 +12,6 @@ add_mlir_conversion_library(MLIRGPUtoROCDLTransforms
 
 target_link_libraries(MLIRGPUtoROCDLTransforms
   PUBLIC
-  LLVMSupport
   MLIRGPU
   MLIRLLVMIR
   MLIRROCDLIR

diff  --git a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
index ecfc2d75d5f3..5fdfd07bda39 100644
--- a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
@@ -18,5 +18,4 @@ target_link_libraries(MLIRGPUtoVulkanTransforms
   MLIRSupport
   MLIRTransforms
   MLIRTranslation
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
index 9fd15670382b..28619e4c57e1 100644
--- a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
@@ -6,7 +6,10 @@ add_mlir_conversion_library(MLIRLinalgToLLVM
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 
 target_link_libraries(MLIRLinalgToLLVM
   PUBLIC
@@ -20,6 +23,4 @@ target_link_libraries(MLIRLinalgToLLVM
   MLIRVectorToLLVM
   MLIRVectorToLoops
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt b/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt
index d4c752847583..f0c75b1de9e8 100644
--- a/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt
+++ b/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt
@@ -6,12 +6,13 @@ add_mlir_conversion_library(MLIRLoopToStandard
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 target_link_libraries(
   MLIRLoopToStandard
   PUBLIC
   MLIRLoopOps
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
index 5b31429a0d0c..22416091ad09 100644
--- a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
+++ b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
@@ -19,5 +19,4 @@ target_link_libraries(MLIRLoopsToGPU
   MLIRStandardOps
   MLIRSupport
   MLIRTransforms
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
index ef7ad11d93ef..445088c52c86 100644
--- a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
@@ -6,12 +6,13 @@ add_mlir_conversion_library(MLIRStandardToLLVM
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 target_link_libraries(
   MLIRStandardToLLVM
   PUBLIC
   MLIRLLVMIR
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
index 6d6b3b87c073..cc1f52eab261 100644
--- a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
@@ -6,7 +6,10 @@ add_mlir_conversion_library(MLIRVectorToLLVM
 
   DEPENDS
   MLIRConversionPassIncGen
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 
 target_link_libraries(MLIRVectorToLLVM
   PUBLIC
@@ -14,6 +17,4 @@ target_link_libraries(MLIRVectorToLLVM
   MLIRStandardToLLVM
   MLIRVector
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt b/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
index 515c0e2d0344..c28ce5175186 100644
--- a/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
+++ b/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
@@ -3,7 +3,10 @@ add_mlir_conversion_library(MLIRVectorToLoops
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/VectorToLoops
-)
+
+  LINK_COMPONENTS
+  Core
+  )
 
 target_link_libraries(MLIRVectorToLoops
   PUBLIC
@@ -11,6 +14,4 @@ target_link_libraries(MLIRVectorToLoops
   MLIRAffineEDSC
   MLIRLLVMIR
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/AVX512/CMakeLists.txt b/mlir/lib/Dialect/AVX512/CMakeLists.txt
index eb1e7dc5c4b5..6b15bf21c2d9 100644
--- a/mlir/lib/Dialect/AVX512/CMakeLists.txt
+++ b/mlir/lib/Dialect/AVX512/CMakeLists.txt
@@ -6,11 +6,9 @@ add_mlir_dialect_library(MLIRAVX512
 
   DEPENDS
   MLIRAVX512IncGen
-  )
-target_link_libraries(MLIRAVX512
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRSideEffects
   MLIRVectorToLLVM
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt b/mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt
index a07905b71fbc..e00986584676 100644
--- a/mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt
+++ b/mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt
@@ -6,9 +6,8 @@ add_mlir_dialect_library(MLIRAffineEDSC
 
   DEPENDS
   MLIRAffineOpsIncGen
-  )
-target_link_libraries(MLIRAffineEDSC
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIREDSC
   MLIRIR

diff  --git a/mlir/lib/Dialect/Affine/IR/CMakeLists.txt b/mlir/lib/Dialect/Affine/IR/CMakeLists.txt
index 8d186ae03b54..d34065e3b952 100644
--- a/mlir/lib/Dialect/Affine/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/Affine/IR/CMakeLists.txt
@@ -7,9 +7,8 @@ add_mlir_dialect_library(MLIRAffineOps
 
   DEPENDS
   MLIRAffineOpsIncGen
-  )
-target_link_libraries(MLIRAffineOps
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIREDSC
   MLIRIR
   MLIRLoopLikeInterface

diff  --git a/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt
index bcad44d72497..89c72ae1ddab 100644
--- a/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt
@@ -14,9 +14,8 @@ add_mlir_dialect_library(MLIRAffineTransforms
   MLIRAffineOpsIncGen
   MLIRAffinePassIncGen
   MLIRLoopLikeInterfaceIncGen
-  )
-target_link_libraries(MLIRAffineTransforms
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIREDSC
   MLIRIR

diff  --git a/mlir/lib/Dialect/Affine/Utils/CMakeLists.txt b/mlir/lib/Dialect/Affine/Utils/CMakeLists.txt
index ed3b5b8b1723..59ae13dcabcf 100644
--- a/mlir/lib/Dialect/Affine/Utils/CMakeLists.txt
+++ b/mlir/lib/Dialect/Affine/Utils/CMakeLists.txt
@@ -4,9 +4,7 @@ add_mlir_dialect_library(MLIRAffineUtils
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Affine
 
-  )
-target_link_libraries(MLIRAffineUtils
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRTransformUtils
   )

diff  --git a/mlir/lib/Dialect/GPU/CMakeLists.txt b/mlir/lib/Dialect/GPU/CMakeLists.txt
index ad63b3669409..01863d4a3d56 100644
--- a/mlir/lib/Dialect/GPU/CMakeLists.txt
+++ b/mlir/lib/Dialect/GPU/CMakeLists.txt
@@ -13,9 +13,8 @@ add_mlir_dialect_library(MLIRGPU
   MLIRGPUPassIncGen
   MLIRParallelLoopMapperAttrGen
   MLIRParallelLoopMapperEnumsGen
-  )
-target_link_libraries(MLIRGPU
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIREDSC
   MLIRIR
   MLIRLLVMIR
@@ -25,5 +24,4 @@ target_link_libraries(MLIRGPU
   MLIRStandardOps
   MLIRSupport
   MLIRTransformUtils
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
index bd1f25c9f355..6404fe263d4b 100644
--- a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
+++ b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
@@ -9,15 +9,15 @@ add_mlir_dialect_library(MLIRLLVMIR
   DEPENDS
   MLIRLLVMOpsIncGen
   MLIRLLVMConversionsIncGen
-  )
-target_link_libraries(MLIRLLVMIR
-  PUBLIC
-  LLVMAsmParser
-  LLVMBitReader
-  LLVMBitWriter
-  LLVMCore
-  LLVMSupport
-  LLVMFrontendOpenMP
+
+  LINK_COMPONENTS
+  AsmParser
+  BitReader
+  BitWriter
+  Core
+  FrontendOpenMP
+
+  LINK_LIBS PUBLIC
   MLIRCallInterfaces
   MLIRControlFlowInterfaces
   MLIROpenMP
@@ -35,15 +35,15 @@ add_mlir_dialect_library(MLIRLLVMAVX512
   DEPENDS
   MLIRLLVMAVX512IncGen
   MLIRLLVMAVX512ConversionsIncGen
-  )
-target_link_libraries(MLIRLLVMAVX512
-  PUBLIC
-  LLVMAsmParser
+
+  LINK_COMPONENTS
+  AsmParser
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLLVMIR
   MLIRSideEffects
-  LLVMSupport
-  LLVMCore
   )
 
 add_mlir_dialect_library(MLIRNVVMIR
@@ -55,15 +55,15 @@ add_mlir_dialect_library(MLIRNVVMIR
   DEPENDS
   MLIRNVVMOpsIncGen
   MLIRNVVMConversionsIncGen
-  )
-target_link_libraries(MLIRNVVMIR
-  PUBLIC
-  LLVMAsmParser
+
+  LINK_COMPONENTS
+  AsmParser
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLLVMIR
   MLIRSideEffects
-  LLVMSupport
-  LLVMCore
   )
 
 add_mlir_dialect_library(MLIRROCDLIR
@@ -75,12 +75,12 @@ add_mlir_dialect_library(MLIRROCDLIR
   DEPENDS
   MLIRROCDLOpsIncGen
   MLIRROCDLConversionsIncGen
-  )
-target_link_libraries(MLIRROCDLIR
-  PUBLIC
-  LLVMAsmParser
-  LLVMCore
-  LLVMSupport
+
+  LINK_COMPONENTS
+  AsmParser
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRSideEffects
   MLIRVectorToLLVM

diff  --git a/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt b/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt
index 216586e6242d..3e1342dcf2c9 100644
--- a/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt
@@ -3,10 +3,8 @@ add_mlir_dialect_library(MLIRLLVMIRTransforms
 
   DEPENDS
   MLIRLLVMPassIncGen
-  )
 
-target_link_libraries(MLIRLLVMIRTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLLVMIR
   MLIRPass

diff  --git a/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
index acb2ab6d91d7..07cf5b357ab7 100644
--- a/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
@@ -6,12 +6,9 @@ add_mlir_dialect_library(MLIRLinalgAnalysis
 
   DEPENDS
   intrinsics_gen
-  )
 
-target_link_libraries(MLIRLinalgAnalysis
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLinalgOps
   MLIRStandardOps
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt b/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
index 8ec3c6dd7d22..be1d459daa91 100644
--- a/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
@@ -6,10 +6,8 @@ add_mlir_dialect_library(MLIRLinalgEDSC
 
   DEPENDS
   intrinsics_gen
-  )
 
-target_link_libraries(MLIRLinalgEDSC
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIREDSC
   MLIRIR
   MLIRAffineOps
@@ -17,5 +15,4 @@ target_link_libraries(MLIRLinalgEDSC
   MLIRLinalgOps
   MLIRLoopOps
   MLIRStandardOps
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
index c8464e277cbb..8f3d44ba1b53 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
@@ -13,9 +13,8 @@ add_mlir_dialect_library(MLIRLinalgTransforms
   DEPENDS
   intrinsics_gen
   MLIRLinalgPassIncGen
-  )
-target_link_libraries(MLIRLinalgTransforms
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRAnalysis
   MLIREDSC

diff  --git a/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
index 681a47d31271..12bf47cdc9b1 100644
--- a/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
@@ -3,12 +3,11 @@ add_mlir_dialect_library(MLIRLinalgUtils
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Linalg
+
   DEPENDS
   intrinsics_gen
-  )
 
-target_link_libraries(MLIRLinalgUtils
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIREDSC
   MLIRIR

diff  --git a/mlir/lib/Dialect/LoopOps/CMakeLists.txt b/mlir/lib/Dialect/LoopOps/CMakeLists.txt
index 44de8ada2150..ea72f25a303a 100644
--- a/mlir/lib/Dialect/LoopOps/CMakeLists.txt
+++ b/mlir/lib/Dialect/LoopOps/CMakeLists.txt
@@ -8,15 +8,13 @@ add_mlir_dialect_library(MLIRLoopOps
 
   DEPENDS
   MLIRLoopOpsIncGen
-  )
-target_link_libraries(MLIRLoopOps
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIREDSC
   MLIRIR
   MLIRLoopLikeInterface
   MLIRSideEffects
   MLIRStandardOps
-  LLVMSupport
   )
 
 add_subdirectory(Transforms)

diff  --git a/mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt b/mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt
index 13a6aa6f288a..0339d15f1fdc 100644
--- a/mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt
@@ -8,14 +8,12 @@ add_mlir_dialect_library(MLIRLoopOpsTransforms
 
   DEPENDS
   MLIRLoopPassIncGen
-  )
-target_link_libraries(MLIRLoopOpsTransforms
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRIR
   MLIRPass
   MLIRLoopOps
   MLIRStandardOps
   MLIRSupport
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/OpenMP/CMakeLists.txt b/mlir/lib/Dialect/OpenMP/CMakeLists.txt
index 68a939ed4299..23f8cd4058f7 100644
--- a/mlir/lib/Dialect/OpenMP/CMakeLists.txt
+++ b/mlir/lib/Dialect/OpenMP/CMakeLists.txt
@@ -6,8 +6,7 @@ add_mlir_dialect_library(MLIROpenMP
 
   DEPENDS
   MLIROpenMPOpsIncGen
-  )
-target_link_libraries(MLIROpenMP
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )

diff  --git a/mlir/lib/Dialect/Quant/CMakeLists.txt b/mlir/lib/Dialect/Quant/CMakeLists.txt
index 4f8382962206..19ac787de027 100644
--- a/mlir/lib/Dialect/Quant/CMakeLists.txt
+++ b/mlir/lib/Dialect/Quant/CMakeLists.txt
@@ -15,9 +15,8 @@ add_mlir_dialect_library(MLIRQuant
   DEPENDS
   MLIRQuantOpsIncGen
   MLIRQuantPassIncGen
-  )
-target_link_libraries(MLIRQuant
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRPass
   MLIRSideEffects

diff  --git a/mlir/lib/Dialect/SDBM/CMakeLists.txt b/mlir/lib/Dialect/SDBM/CMakeLists.txt
index 6f5a119408cf..db2b9ac85472 100644
--- a/mlir/lib/Dialect/SDBM/CMakeLists.txt
+++ b/mlir/lib/Dialect/SDBM/CMakeLists.txt
@@ -5,8 +5,7 @@ add_mlir_dialect_library(MLIRSDBM
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SDBM
-)
-target_link_libraries(MLIRSDBM
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )

diff  --git a/mlir/lib/Dialect/SPIRV/CMakeLists.txt b/mlir/lib/Dialect/SPIRV/CMakeLists.txt
index e6834ca2ef3e..8fe368aa04e6 100644
--- a/mlir/lib/Dialect/SPIRV/CMakeLists.txt
+++ b/mlir/lib/Dialect/SPIRV/CMakeLists.txt
@@ -27,9 +27,8 @@ add_mlir_dialect_library(MLIRSPIRV
   MLIRSPIRVOpsIncGen
   MLIRSPIRVOpUtilsGen
   MLIRSPIRVTargetAndABIIncGen
-  )
-target_link_libraries(MLIRSPIRV
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRControlFlowInterfaces
   MLIRIR
   MLIRParser

diff  --git a/mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt b/mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt
index 8f24491f4715..c04f801321ea 100644
--- a/mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt
+++ b/mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt
@@ -9,9 +9,8 @@ add_mlir_dialect_library(MLIRSPIRVSerialization
 
   DEPENDS
   MLIRSPIRVSerializationGen
-  )
-target_link_libraries(MLIRSPIRVSerialization
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRSPIRV
   MLIRSupport

diff  --git a/mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt b/mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt
index e388069d52ee..632194f213d6 100644
--- a/mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt
@@ -8,10 +8,8 @@ add_mlir_dialect_library(MLIRSPIRVTransforms
 
   DEPENDS
   MLIRSPIRVPassIncGen
-  )
 
-target_link_libraries(MLIRSPIRVTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRPass
   MLIRSPIRV
   )

diff  --git a/mlir/lib/Dialect/Shape/CMakeLists.txt b/mlir/lib/Dialect/Shape/CMakeLists.txt
index 4ed02acc3d46..1f198f7b8148 100644
--- a/mlir/lib/Dialect/Shape/CMakeLists.txt
+++ b/mlir/lib/Dialect/Shape/CMakeLists.txt
@@ -6,12 +6,10 @@ add_mlir_dialect_library(MLIRShape
 
   DEPENDS
   MLIRShapeOpsIncGen
-  )
-target_link_libraries(MLIRShape
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRDialect
   MLIRInferTypeOpInterface
   MLIRIR
   MLIRSideEffects
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/StandardOps/CMakeLists.txt b/mlir/lib/Dialect/StandardOps/CMakeLists.txt
index 471674c0ca76..6d83cbb375ae 100644
--- a/mlir/lib/Dialect/StandardOps/CMakeLists.txt
+++ b/mlir/lib/Dialect/StandardOps/CMakeLists.txt
@@ -8,14 +8,12 @@ add_mlir_dialect_library(MLIRStandardOps
 
   DEPENDS
   MLIRStandardOpsIncGen
-  )
-target_link_libraries(MLIRStandardOps
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRCallInterfaces
   MLIRControlFlowInterfaces
   MLIREDSC
   MLIRIR
   MLIRSideEffects
   MLIRViewLikeInterface
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/Vector/CMakeLists.txt b/mlir/lib/Dialect/Vector/CMakeLists.txt
index 3e1d8de0d3ba..9ccbb76b7bd2 100644
--- a/mlir/lib/Dialect/Vector/CMakeLists.txt
+++ b/mlir/lib/Dialect/Vector/CMakeLists.txt
@@ -10,9 +10,8 @@ add_mlir_dialect_library(MLIRVector
   DEPENDS
   MLIRVectorOpsIncGen
   MLIRVectorTransformPatternsIncGen
-  )
-target_link_libraries(MLIRVector
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIREDSC
   MLIRIR
   MLIRStandardOps

diff  --git a/mlir/lib/EDSC/CMakeLists.txt b/mlir/lib/EDSC/CMakeLists.txt
index 1435dbb22926..6d56f263f271 100644
--- a/mlir/lib/EDSC/CMakeLists.txt
+++ b/mlir/lib/EDSC/CMakeLists.txt
@@ -8,10 +8,8 @@ add_mlir_library(MLIREDSC
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/EDSC
-  )
-target_link_libraries(MLIREDSC
-  PUBLIC
 
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRSupport
   )
@@ -21,9 +19,8 @@ add_mlir_library(MLIREDSCInterface
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/EDSC
-  )
-target_link_libraries(MLIREDSCInterface
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRSupport
   MLIRParser

diff  --git a/mlir/lib/ExecutionEngine/CMakeLists.txt b/mlir/lib/ExecutionEngine/CMakeLists.txt
index df3268a49d59..e4cea32f4fc4 100644
--- a/mlir/lib/ExecutionEngine/CMakeLists.txt
+++ b/mlir/lib/ExecutionEngine/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Exclude these from libMLIR.so because the JIT infrastructure
+# is a big dependency which most don't need.
+
 set(LLVM_OPTIONAL_SOURCES
   CRunnerUtils.cpp
   ExecutionEngine.cpp
@@ -5,41 +8,60 @@ set(LLVM_OPTIONAL_SOURCES
   OptUtils.cpp
   )
 
-llvm_map_components_to_libnames(outlibs "nativecodegen" "IPO")
 add_mlir_library(MLIRExecutionEngine
   ExecutionEngine.cpp
   OptUtils.cpp
 
+  EXCLUDE_FROM_LIBMLIR
+
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/ExecutionEngine
+
+  LINK_COMPONENTS
+  Core
+  ExecutionEngine
+  Object
+  OrcJIT
+  JITLink
+  Analysis
+  AggressiveInstCombine
+  InstCombine
+  MC
+  ScalarOpts
+  Target
+  Vectorize
+  TransformUtils
+  nativecodegen
+  IPO
   )
 target_link_libraries(MLIRExecutionEngine
   PUBLIC
   MLIRLLVMIR
   MLIRTargetLLVMIR
-  LLVMExecutionEngine
-  LLVMObject
-  LLVMOrcJIT
-  LLVMJITLink
-  LLVMSupport
-  LLVMAnalysis
-  LLVMAggressiveInstCombine
-  LLVMInstCombine
-  LLVMMC
-  LLVMScalarOpts
-  LLVMTarget
-  LLVMVectorize
-  LLVMTransformUtils
-
-  ${outlibs})
-
-add_llvm_library(mlir_c_runner_utils SHARED CRunnerUtils.cpp)
+  )
+
+add_mlir_library(mlir_c_runner_utils
+  SHARED
+  CRunnerUtils.cpp
+
+  EXCLUDE_FROM_LIBMLIR
+  )
 set_property(TARGET mlir_c_runner_utils PROPERTY CXX_STANDARD 11)
-add_llvm_library(mlir_c_runner_utils_static CRunnerUtils.cpp)
+
+add_mlir_library(mlir_c_runner_utils_static
+  CRunnerUtils.cpp
+
+  EXCLUDE_FROM_LIBMLIR
+  )
 set_property(TARGET mlir_c_runner_utils_static PROPERTY CXX_STANDARD 11)
 target_compile_definitions(mlir_c_runner_utils PRIVATE mlir_c_runner_utils_EXPORTS)
 
-add_llvm_library(mlir_runner_utils SHARED RunnerUtils.cpp)
+add_mlir_library(mlir_runner_utils
+  SHARED
+  RunnerUtils.cpp
+
+  EXCLUDE_FROM_LIBMLIR
+  )
 target_link_libraries(mlir_runner_utils
   PUBLIC
   mlir_c_runner_utils_static

diff  --git a/mlir/lib/IR/CMakeLists.txt b/mlir/lib/IR/CMakeLists.txt
index 88c36eee4c77..2d5f5cb9e2b4 100644
--- a/mlir/lib/IR/CMakeLists.txt
+++ b/mlir/lib/IR/CMakeLists.txt
@@ -9,9 +9,8 @@ add_mlir_library(MLIRIR
   MLIRCallInterfacesIncGen
   MLIROpAsmInterfacesIncGen
   MLIRSymbolInterfacesIncGen
-  )
-target_link_libraries(MLIRIR
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRSupport
   LLVMSupport
   )

diff  --git a/mlir/lib/Interfaces/CMakeLists.txt b/mlir/lib/Interfaces/CMakeLists.txt
index 093b4faf3613..61b64148db41 100644
--- a/mlir/lib/Interfaces/CMakeLists.txt
+++ b/mlir/lib/Interfaces/CMakeLists.txt
@@ -16,9 +16,8 @@ add_mlir_library(MLIRCallInterfaces
 
   DEPENDS
   MLIRCallInterfacesIncGen
-  )
-target_link_libraries(MLIRCallInterfaces
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )
 
@@ -30,9 +29,8 @@ add_mlir_library(MLIRControlFlowInterfaces
 
   DEPENDS
   MLIRControlFlowInterfacesIncGen
-  )
-target_link_libraries(MLIRControlFlowInterfaces
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )
 
@@ -44,9 +42,8 @@ add_mlir_library(MLIRDerivedAttributeOpInterface
 
   DEPENDS
   MLIRDerivedAttributeOpInterfaceIncGen
-  )
-target_link_libraries(MLIRDerivedAttributeOpInterface
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )
 
@@ -58,9 +55,8 @@ add_mlir_library(MLIRInferTypeOpInterface
 
   DEPENDS
   MLIRInferTypeOpInterfaceIncGen
-  )
-target_link_libraries(MLIRInferTypeOpInterface
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )
 
@@ -72,9 +68,8 @@ add_mlir_library(MLIRLoopLikeInterface
 
   DEPENDS
   MLIRLoopLikeInterfaceIncGen
-  )
-target_link_libraries(MLIRLoopLikeInterface
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )
 
@@ -86,9 +81,8 @@ add_mlir_library(MLIRSideEffects
 
   DEPENDS
   MLIRSideEffectOpInterfacesIncGen
-  )
-target_link_libraries(MLIRSideEffects
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )
 
@@ -100,8 +94,7 @@ add_mlir_library(MLIRViewLikeInterface
 
   DEPENDS
   MLIRViewLikeInterfaceIncGen
-  )
-target_link_libraries(MLIRViewLikeInterface
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )

diff  --git a/mlir/lib/Parser/CMakeLists.txt b/mlir/lib/Parser/CMakeLists.txt
index fe2e03030880..b9ab3f33ba20 100644
--- a/mlir/lib/Parser/CMakeLists.txt
+++ b/mlir/lib/Parser/CMakeLists.txt
@@ -6,10 +6,6 @@ add_mlir_library(MLIRParser
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Parser
 
-  DEPENDS
-  mlir-generic-headers
-  )
-target_link_libraries(MLIRParser
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRIR
   )

diff  --git a/mlir/lib/Pass/CMakeLists.txt b/mlir/lib/Pass/CMakeLists.txt
index 7e86864cf6c4..c012b056dba3 100644
--- a/mlir/lib/Pass/CMakeLists.txt
+++ b/mlir/lib/Pass/CMakeLists.txt
@@ -4,9 +4,11 @@ add_mlir_library(MLIRPass
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Pass
-  )
-target_link_libraries(MLIRPass
-  PUBLIC
+
+  DEPENDS
+  mlir-generic-headers
+
+  LINK_LIBS PUBLIC
   MLIRAnalysis
   MLIRIR
-  LLVMSupport)
+  )

diff  --git a/mlir/lib/Support/CMakeLists.txt b/mlir/lib/Support/CMakeLists.txt
index a21a8cc29e0f..507ea41c8e50 100644
--- a/mlir/lib/Support/CMakeLists.txt
+++ b/mlir/lib/Support/CMakeLists.txt
@@ -13,10 +13,11 @@ add_mlir_library(MLIRSupport
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Support
-  )
-target_link_libraries(MLIRSupport
-  PUBLIC
-  LLVMSupport
+
+  LINK_COMPONENTS
+  Support
+
+  LINK_LIBS PUBLIC
   ${LLVM_PTHREAD_LIB})
 
 add_mlir_library(MLIROptLib
@@ -24,20 +25,30 @@ add_mlir_library(MLIROptLib
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Support
-  )
-target_link_libraries(MLIROptLib
-  PUBLIC
+
+  LINK_COMPONENTS
+  Support
+
+  LINK_LIBS PUBLIC
   MLIRPass
   MLIRParser
-  LLVMSupport
   MLIRSupport
   )
 
-add_llvm_library(MLIRJitRunner
+# Exclude from libMLIR.so because the JIT infrastructure
+# is a big dependency which most don't need.
+add_mlir_library(MLIRJitRunner
   JitRunner.cpp
-)
-target_link_libraries(MLIRJitRunner
-  PUBLIC
+
+  EXCLUDE_FROM_LIBMLIR
+
+  LINK_COMPONENTS
+  Core
+  OrcJIT
+  JITLink
+  Support
+
+  LINK_LIBS PUBLIC
   MLIRExecutionEngine
   MLIRIR
   MLIRParser
@@ -46,6 +57,4 @@ target_link_libraries(MLIRJitRunner
   MLIRTransforms
   MLIRStandardToLLVM
   MLIRSupport
-  LLVMCore
-  LLVMSupport
 )

diff  --git a/mlir/lib/TableGen/CMakeLists.txt b/mlir/lib/TableGen/CMakeLists.txt
index a395fdb14a7a..780c98a5660d 100644
--- a/mlir/lib/TableGen/CMakeLists.txt
+++ b/mlir/lib/TableGen/CMakeLists.txt
@@ -1,4 +1,8 @@
-add_llvm_library(LLVMMLIRTableGen
+# This library is unusual, since mlir-tblgen depends on it.
+# For non-obvious reasons, linking mlir-tblgen fails with
+# LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB unless
+# DISABLE_LLVM_LINK_LLVM_DYLIB is set.
+llvm_add_library(LLVMMLIRTableGen STATIC
   Argument.cpp
   Attribute.cpp
   Constraint.cpp
@@ -16,10 +20,14 @@ add_llvm_library(LLVMMLIRTableGen
   Successor.cpp
   Type.cpp
 
+  DISABLE_LLVM_LINK_LLVM_DYLIB
+
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/TableGen
+
+  LINK_COMPONENTS
+  TableGen
+  Demangle
   )
-target_link_libraries(LLVMMLIRTableGen
-  PUBLIC
-  LLVMSupport
-  LLVMTableGen)
+
+mlir_check_all_link_libraries(LLVMMLIRTableGen)

diff  --git a/mlir/lib/Target/CMakeLists.txt b/mlir/lib/Target/CMakeLists.txt
index ab4008a717a6..4a0af66a04b1 100644
--- a/mlir/lib/Target/CMakeLists.txt
+++ b/mlir/lib/Target/CMakeLists.txt
@@ -4,17 +4,18 @@ add_mlir_translation_library(MLIRTargetLLVMIRModuleTranslation
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVMIR
+
   DEPENDS
   intrinsics_gen
-  )
-target_link_libraries(MLIRTargetLLVMIRModuleTranslation
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+  FrontendOpenMP
+  TransformUtils
+
+  LINK_LIBS PUBLIC
   MLIRLLVMIR
   MLIRLLVMIRTransforms
-  LLVMCore
-  LLVMIRReader
-  LLVMSupport
-  LLVMTransformUtils
   MLIRTranslation
   )
 
@@ -23,11 +24,14 @@ add_mlir_translation_library(MLIRTargetAVX512
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVMIR
+
   DEPENDS
   MLIRLLVMAVX512ConversionsIncGen
-  )
-target_link_libraries(MLIRTargetAVX512
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLLVMAVX512
   MLIRLLVMIR
@@ -40,9 +44,12 @@ add_mlir_translation_library(MLIRTargetLLVMIR
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVMIR
-  )
-target_link_libraries(MLIRTargetLLVMIR
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+  IRReader
+
+  LINK_LIBS PUBLIC
   MLIRTargetLLVMIRModuleTranslation
   )
 
@@ -51,11 +58,14 @@ add_mlir_translation_library(MLIRTargetNVVMIR
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVMIR
+
   DEPENDS
   intrinsics_gen
-  )
-target_link_libraries(MLIRTargetNVVMIR
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRIR
   MLIRLLVMIR
@@ -68,11 +78,14 @@ add_mlir_translation_library(MLIRTargetROCDLIR
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVMIR
+
   DEPENDS
   intrinsics_gen
-  )
-target_link_libraries(MLIRTargetROCDLIR
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRIR
   MLIRLLVMIR

diff  --git a/mlir/lib/Transforms/CMakeLists.txt b/mlir/lib/Transforms/CMakeLists.txt
index 531813575849..97e71a578070 100644
--- a/mlir/lib/Transforms/CMakeLists.txt
+++ b/mlir/lib/Transforms/CMakeLists.txt
@@ -26,10 +26,8 @@ add_mlir_library(MLIRTransforms
   DEPENDS
   MLIRStandardOpsIncGen
   MLIRTransformsPassIncGen
-  )
 
-target_link_libraries(MLIRTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRAnalysis
   MLIRLoopLikeInterface

diff  --git a/mlir/lib/Transforms/Utils/CMakeLists.txt b/mlir/lib/Transforms/Utils/CMakeLists.txt
index 1e0442179bf4..a06523ed4aaa 100644
--- a/mlir/lib/Transforms/Utils/CMakeLists.txt
+++ b/mlir/lib/Transforms/Utils/CMakeLists.txt
@@ -12,10 +12,8 @@ add_mlir_library(MLIRTransformUtils
 
   DEPENDS
   MLIRStandardOpsIncGen
-  )
 
-target_link_libraries(MLIRTransformUtils
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRAnalysis
   MLIRLoopAnalysis

diff  --git a/mlir/lib/Translation/CMakeLists.txt b/mlir/lib/Translation/CMakeLists.txt
index 2cd1a7c9ee3e..579de292fdb2 100644
--- a/mlir/lib/Translation/CMakeLists.txt
+++ b/mlir/lib/Translation/CMakeLists.txt
@@ -3,10 +3,8 @@ add_mlir_library(MLIRTranslation
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Translation
-  )
-target_link_libraries(MLIRTranslation
-  PUBLIC
-  LLVMSupport
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRParser
   )

diff  --git a/mlir/test/EDSC/CMakeLists.txt b/mlir/test/EDSC/CMakeLists.txt
index d8e3be8f2079..dda2a25fdb04 100644
--- a/mlir/test/EDSC/CMakeLists.txt
+++ b/mlir/test/EDSC/CMakeLists.txt
@@ -1,3 +1,7 @@
+set(LLVM_LINK_COMPONENTS
+  Core
+  Support
+  )
 add_llvm_executable(mlir-edsc-builder-api-test
   builder-api-test.cpp
 )
@@ -16,8 +20,6 @@ target_link_libraries(mlir-edsc-builder-api-test
   MLIRStandardOps
   MLIRTransforms
   MLIRVector
-  LLVMCore
-  LLVMSupport
-)
+  )
 
 target_include_directories(mlir-edsc-builder-api-test PRIVATE ..)

diff  --git a/mlir/test/SDBM/CMakeLists.txt b/mlir/test/SDBM/CMakeLists.txt
index 9e0023750e68..633fae707c85 100644
--- a/mlir/test/SDBM/CMakeLists.txt
+++ b/mlir/test/SDBM/CMakeLists.txt
@@ -1,3 +1,8 @@
+set(LLVM_LINK_COMPONENTS
+  Core
+  Support
+  )
+
 add_llvm_executable(mlir-sdbm-api-test
   sdbm-api-test.cpp
 )
@@ -9,8 +14,6 @@ target_link_libraries(mlir-sdbm-api-test
   MLIRIR
   MLIRSDBM
   MLIRSupport
-  LLVMCore
-  LLVMSupport
 )
 
 target_include_directories(mlir-sdbm-api-test PRIVATE ..)

diff  --git a/mlir/test/lib/Dialect/Affine/CMakeLists.txt b/mlir/test/lib/Dialect/Affine/CMakeLists.txt
index 56195ba2e875..68a0b06e0e31 100644
--- a/mlir/test/lib/Dialect/Affine/CMakeLists.txt
+++ b/mlir/test/lib/Dialect/Affine/CMakeLists.txt
@@ -1,16 +1,21 @@
-add_llvm_library(MLIRAffineTransformsTestPasses
+# Exclude tests from libMLIR.so
+add_mlir_library(MLIRAffineTransformsTestPasses
   TestAffineDataCopy.cpp
   TestAffineLoopUnswitching.cpp
   TestLoopPermutation.cpp
   TestParallelismDetection.cpp
   TestVectorizationUtils.cpp
 
+  EXCLUDE_FROM_LIBMLIR
+
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Affine
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/IR
-  )
 
-target_link_libraries(MLIRAffineTransformsTestPasses PRIVATE
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRPass
   MLIRAffineTransforms

diff  --git a/mlir/test/lib/Dialect/SPIRV/CMakeLists.txt b/mlir/test/lib/Dialect/SPIRV/CMakeLists.txt
index 5035c9cc8d49..15d4673f381f 100644
--- a/mlir/test/lib/Dialect/SPIRV/CMakeLists.txt
+++ b/mlir/test/lib/Dialect/SPIRV/CMakeLists.txt
@@ -1,12 +1,14 @@
-add_llvm_library(MLIRSPIRVTestPasses
+# Exclude tests from libMLIR.so
+add_mlir_library(MLIRSPIRVTestPasses
   TestAvailability.cpp
 
+  EXCLUDE_FROM_LIBMLIR
+
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SPIRV
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/IR
-  )
 
-target_link_libraries(MLIRSPIRVTestPasses PRIVATE
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRPass
   MLIRSPIRV

diff  --git a/mlir/test/lib/Dialect/Test/CMakeLists.txt b/mlir/test/lib/Dialect/Test/CMakeLists.txt
index ae62fb04f98a..542be7b6ac9c 100644
--- a/mlir/test/lib/Dialect/Test/CMakeLists.txt
+++ b/mlir/test/lib/Dialect/Test/CMakeLists.txt
@@ -14,16 +14,17 @@ mlir_tablegen(TestOpStructs.cpp.inc -gen-struct-attr-defs)
 mlir_tablegen(TestPatterns.inc -gen-rewriters)
 add_public_tablegen_target(MLIRTestOpsIncGen)
 
-add_llvm_library(MLIRTestDialect
+# Exclude tests from libMLIR.so
+add_mlir_library(MLIRTestDialect
   TestDialect.cpp
   TestPatterns.cpp
 
+  EXCLUDE_FROM_LIBMLIR
+
   DEPENDS
   MLIRTestOpsIncGen
-)
-target_link_libraries(MLIRTestDialect
-  PUBLIC
-  LLVMSupport
+
+  LINK_LIBS PUBLIC
   MLIRControlFlowInterfaces
   MLIRDerivedAttributeOpInterface
   MLIRDialect

diff  --git a/mlir/test/lib/IR/CMakeLists.txt b/mlir/test/lib/IR/CMakeLists.txt
index c4e4ebc9b88e..0a55a82b1c3d 100644
--- a/mlir/test/lib/IR/CMakeLists.txt
+++ b/mlir/test/lib/IR/CMakeLists.txt
@@ -1,16 +1,15 @@
-add_llvm_library(MLIRTestIR
+# Exclude tests from libMLIR.so
+add_mlir_library(MLIRTestIR
   TestFunc.cpp
   TestMatchers.cpp
   TestSideEffects.cpp
   TestSymbolUses.cpp
 
-  ADDITIONAL_HEADER_DIRS
-  )
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../Dialect/Test)
-include_directories(${CMAKE_CURRENT_BINARY_DIR}/../Dialect/Test)
+  EXCLUDE_FROM_LIBMLIR
 
-target_link_libraries(MLIRTestIR
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRPass
   MLIRTestDialect
   )
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../Dialect/Test)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../Dialect/Test)

diff  --git a/mlir/test/lib/Pass/CMakeLists.txt b/mlir/test/lib/Pass/CMakeLists.txt
index 7d79e1137f40..608141e349d1 100644
--- a/mlir/test/lib/Pass/CMakeLists.txt
+++ b/mlir/test/lib/Pass/CMakeLists.txt
@@ -1,11 +1,13 @@
-add_llvm_library(MLIRTestPass
+# Exclude tests from libMLIR.so
+add_mlir_library(MLIRTestPass
   TestPassManager.cpp
 
+  EXCLUDE_FROM_LIBMLIR
+
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Pass
-  )
-target_link_libraries(MLIRTestPass
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRPass
   )

diff  --git a/mlir/test/lib/Transforms/CMakeLists.txt b/mlir/test/lib/Transforms/CMakeLists.txt
index 33129a9a9e0b..248da51bcec7 100644
--- a/mlir/test/lib/Transforms/CMakeLists.txt
+++ b/mlir/test/lib/Transforms/CMakeLists.txt
@@ -1,4 +1,5 @@
-add_llvm_library(MLIRTestTransforms
+# Exclude tests from libMLIR.so
+add_mlir_library(MLIRTestTransforms
   TestAllReduceLowering.cpp
   TestBufferPlacement.cpp
   TestCallGraph.cpp
@@ -20,21 +21,16 @@ add_llvm_library(MLIRTestTransforms
   TestVectorToLoopsConversion.cpp
   TestVectorTransforms.cpp
 
+  EXCLUDE_FROM_LIBMLIR
+
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Transforms
 
   DEPENDS
   MLIRStandardOpsIncGen
   MLIRTestVectorTransformPatternsIncGen
-)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../Dialect/Test)
-include_directories(${CMAKE_CURRENT_BINARY_DIR}/../Dialect/Test)
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../DeclarativeTransforms)
-include_directories(${CMAKE_CURRENT_BINARY_DIR}/../DeclarativeTransforms)
 
-target_link_libraries(MLIRTestTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRAnalysis
   MLIREDSC
@@ -51,3 +47,8 @@ target_link_libraries(MLIRTestTransforms
   MLIRVectorToLoops
   MLIRVector
   )
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../Dialect/Test)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../Dialect/Test)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../DeclarativeTransforms)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../DeclarativeTransforms)

diff  --git a/mlir/tools/mlir-cpu-runner/CMakeLists.txt b/mlir/tools/mlir-cpu-runner/CMakeLists.txt
index 9903e8d86e7e..596012c88228 100644
--- a/mlir/tools/mlir-cpu-runner/CMakeLists.txt
+++ b/mlir/tools/mlir-cpu-runner/CMakeLists.txt
@@ -1,6 +1,12 @@
+set(LLVM_LINK_COMPONENTS
+  Core
+  Support
+  nativecodegen
+  )
+
 add_llvm_tool(mlir-cpu-runner
   mlir-cpu-runner.cpp
-)
+  )
 llvm_update_compile_flags(mlir-cpu-runner)
 get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 target_link_libraries(mlir-cpu-runner PRIVATE
@@ -14,6 +20,4 @@ target_link_libraries(mlir-cpu-runner PRIVATE
   MLIRParser
   MLIRTargetLLVMIR
   MLIRSupport
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/tools/mlir-linalg-ods-gen/CMakeLists.txt b/mlir/tools/mlir-linalg-ods-gen/CMakeLists.txt
index b4fa6e35fc9a..3736a18b2009 100644
--- a/mlir/tools/mlir-linalg-ods-gen/CMakeLists.txt
+++ b/mlir/tools/mlir-linalg-ods-gen/CMakeLists.txt
@@ -1,3 +1,7 @@
+set(LLVM_LINK_COMPONENTS
+  Core
+  Support
+  )
 add_llvm_tool(mlir-linalg-ods-gen
   mlir-linalg-ods-gen.cpp
 )
@@ -5,6 +9,4 @@ llvm_update_compile_flags(mlir-linalg-ods-gen)
 target_link_libraries(mlir-linalg-ods-gen PRIVATE
   MLIRParser
   MLIRSupport
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/tools/mlir-opt/CMakeLists.txt b/mlir/tools/mlir-opt/CMakeLists.txt
index 55b5762923c3..2504b04420b7 100644
--- a/mlir/tools/mlir-opt/CMakeLists.txt
+++ b/mlir/tools/mlir-opt/CMakeLists.txt
@@ -4,6 +4,12 @@ set(LLVM_OPTIONAL_SOURCES
 
 get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS)
+set(LLVM_LINK_COMPONENTS
+  Core
+  Support
+  AsmParser
+  )
+
 set(LIBS
   ${dialect_libs}
   ${conversion_libs}
@@ -25,22 +31,26 @@ set(LIBS
   MLIRSupport
   MLIRIR
   MLIROptLib
-  LLVMSupport
-  LLVMCore
-  LLVMAsmParser
   )
 
-add_llvm_library(MLIRMlirOptMain
+# Exclude from libMLIR.so because this has static options intended for
+# opt-like tools only.
+add_mlir_library(MLIRMlirOptMain
   mlir-opt.cpp
-)
-target_link_libraries(MLIRMlirOptMain
-  PUBLIC
+
+  EXCLUDE_FROM_LIBMLIR
+
+  LINK_LIBS
   ${LIBS}
-)
+  )
 
 add_llvm_tool(mlir-opt
- mlir-opt.cpp
-)
+  mlir-opt.cpp
 
+  DEPENDS
+  ${LIBS}
+  )
+target_link_libraries(mlir-opt PRIVATE ${LIBS})
 llvm_update_compile_flags(mlir-opt)
-target_link_libraries(mlir-opt PRIVATE ${LIBS} ${targets_to_link})
+
+mlir_check_link_libraries(mlir-opt)

diff  --git a/mlir/tools/mlir-shlib/CMakeLists.txt b/mlir/tools/mlir-shlib/CMakeLists.txt
index d0e2e959652f..32fe833cee4e 100644
--- a/mlir/tools/mlir-shlib/CMakeLists.txt
+++ b/mlir/tools/mlir-shlib/CMakeLists.txt
@@ -8,8 +8,10 @@ if (MSVC)
   return()
 endif()
 
-get_property(mlir_libs GLOBAL PROPERTY MLIR_ALL_LIBS)
+get_property(mlir_libs GLOBAL PROPERTY MLIR_STATIC_LIBS)
+get_property(mlir_llvm_link_components GLOBAL PROPERTY MLIR_LLVM_LINK_COMPONENTS)
 list(REMOVE_DUPLICATES mlir_libs)
+list(REMOVE_DUPLICATES mlir_llvm_link_components)
 
 foreach (lib ${mlir_libs})
   if(XCODE)
@@ -19,23 +21,32 @@ foreach (lib ${mlir_libs})
   else()
     list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
   endif()
-  list(APPEND _DEPS $<TARGET_PROPERTY:${lib},LINK_LIBRARIES>)
+  # libClang needs this, but it causes problems for MLIR (probably
+  # because we use public library dependencies within MLIR.)
+  # list(APPEND _DEPS  $<TARGET_PROPERTY:${lib},LINK_LIBRARIES>)
 endforeach ()
 
 if(MLIR_LINK_MLIR_DYLIB)
   set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN)
 endif()
 
-# libMLIR.so depends on LLVM components.  To avoid multiple
-# copies of those LLVM components, libMLIR.so depends on libLLVM.so.
-# This probably won't work if some LLVM components are not included
-# in libLLVM.so.
 if(LLVM_BUILD_LLVM_DYLIB)
-  add_llvm_library(MLIR
+  add_mlir_library(
+    MLIR
     SHARED
     ${INSTALL_WITH_TOOLCHAIN}
-
     mlir-shlib.cpp
-    )
-  target_link_libraries(MLIR PRIVATE LLVM ${LLVM_PTHREAD_LIB})
+    ${_OBJECTS}
+    LINK_LIBS
+    ${_DEPS}
+
+    LINK_COMPONENTS
+    ${mlir_llvm_link_components}
+  )
+  target_link_libraries(MLIR PRIVATE ${LLVM_PTHREAD_LIB})
 endif()
+
+#message("Libraries included in libMLIR.so: ${mlir_libs}")
+#message("LLVM Components included in libMLIR.so: ${mlir_llvm_link_components}")
+
+mlir_check_all_link_libraries(MLIR)

diff  --git a/mlir/tools/mlir-tblgen/CMakeLists.txt b/mlir/tools/mlir-tblgen/CMakeLists.txt
index 19e6230e54ac..4c54e250f2c5 100644
--- a/mlir/tools/mlir-tblgen/CMakeLists.txt
+++ b/mlir/tools/mlir-tblgen/CMakeLists.txt
@@ -1,6 +1,7 @@
 set(LLVM_LINK_COMPONENTS
-  MLIRTableGen
+  Demangle
   Support
+  TableGen
   )
 
 add_tablegen(mlir-tblgen MLIR
@@ -19,4 +20,10 @@ add_tablegen(mlir-tblgen MLIR
   SPIRVUtilsGen.cpp
   StructsGen.cpp
   )
+
 set_target_properties(mlir-tblgen PROPERTIES FOLDER "Tablegenning")
+target_link_libraries(mlir-tblgen
+  PRIVATE
+  LLVMMLIRTableGen)
+
+mlir_check_all_link_libraries(mlir-tblgen)

diff  --git a/mlir/tools/mlir-translate/CMakeLists.txt b/mlir/tools/mlir-translate/CMakeLists.txt
index 9dc5971703ab..897e7adc03bd 100644
--- a/mlir/tools/mlir-translate/CMakeLists.txt
+++ b/mlir/tools/mlir-translate/CMakeLists.txt
@@ -1,16 +1,24 @@
+set(LLVM_LINK_COMPONENTS
+  Support
+  )
+
 get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 get_property(translation_libs GLOBAL PROPERTY MLIR_TRANSLATION_LIBS)
-set(LIBS
+
+add_llvm_tool(mlir-translate
+  mlir-translate.cpp
+  )
+llvm_update_compile_flags(mlir-translate)
+target_link_libraries(mlir-translate
+  PRIVATE
   ${dialect_libs}
   ${translation_libs}
+  MLIRIR
   MLIRParser
   MLIRPass
   MLIRSPIRV
   MLIRTranslation
   MLIRSupport
-)
-add_llvm_tool(mlir-translate
-  mlir-translate.cpp
-)
-llvm_update_compile_flags(mlir-translate)
-target_link_libraries(mlir-translate PRIVATE MLIRIR MLIRTranslation ${LIBS} LLVMSupport)
+  )
+
+mlir_check_link_libraries(mlir-translate)


        


More information about the Mlir-commits mailing list