[Mlir-commits] [mlir] 5469f43 - [MLIR] Reapply: Adjust libMLIR building to more closely follow libClang

Stephen Neuendorffer llvmlistbot at llvm.org
Mon May 4 20:48:37 PDT 2020


Author: Stephen Neuendorffer
Date: 2020-05-04T20:47:57-07:00
New Revision: 5469f434bb74c41e926cc514cb326b1333fdcf07

URL: https://github.com/llvm/llvm-project/commit/5469f434bb74c41e926cc514cb326b1333fdcf07
DIFF: https://github.com/llvm/llvm-project/commit/5469f434bb74c41e926cc514cb326b1333fdcf07.diff

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

This reverts commit ab1ca6e60fc58b857cc5030ca6e024d20d919cb9.

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/GPUToSPIRV/CMakeLists.txt
    mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
    mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
    mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt
    mlir/lib/Conversion/LoopToStandard/CMakeLists.txt
    mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
    mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
    mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt
    mlir/lib/Conversion/StandardToStandard/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/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/IR/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..d3257b136cf1 100644
--- a/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt
@@ -6,15 +6,14 @@ add_mlir_conversion_library(MLIRAVX512ToLLVM
 
   DEPENDS
   MLIRConversionPassIncGen
-)
 
-target_link_libraries(MLIRAVX512ToLLVM
-  PUBLIC
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRAVX512
   MLIRLLVMAVX512
   MLIRLLVMIR
   MLIRStandardToLLVM
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
index 9324f7b21c80..6b54324aa0d3 100644
--- a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
+++ b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt
@@ -6,16 +6,15 @@ add_mlir_conversion_library(MLIRAffineToStandard
 
   DEPENDS
   MLIRConversionPassIncGen
-)
-target_link_libraries(
-  MLIRAffineToStandard
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRLoopOps
   MLIRPass
   MLIRStandardOps
   MLIRTransforms
   MLIRIR
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt
index a64280e9ded9..98b52eb81552 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()
 
@@ -21,13 +21,13 @@ add_mlir_conversion_library(MLIRGPUtoCUDATransforms
   DEPENDS
   MLIRConversionPassIncGen
   intrinsics_gen
-)
-target_link_libraries(MLIRGPUtoCUDATransforms
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+  MC
   ${NVPTX_LIBS}
-  LLVMCore
-  LLVMMC
-  LLVMSupport
+
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRIR
   MLIRLLVMIR

diff  --git a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
index b7c583d57169..fe8502f0061c 100644
--- a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt
@@ -8,11 +8,8 @@ add_mlir_conversion_library(MLIRGPUtoNVVMTransforms
   DEPENDS
   MLIRConversionPassIncGen
   MLIRGPUToNVVMIncGen
-  )
 
-target_link_libraries(MLIRGPUtoNVVMTransforms
-  PUBLIC
-  LLVMSupport
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRLLVMIR
   MLIRNVVMIR

diff  --git a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
index 2161abd37541..38b6e1a5ea4f 100644
--- a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt
@@ -8,11 +8,8 @@ add_mlir_conversion_library(MLIRGPUtoROCDLTransforms
   DEPENDS
   MLIRConversionPassIncGen
   MLIRGPUToROCDLIncGen
-  )
 
-target_link_libraries(MLIRGPUtoROCDLTransforms
-  PUBLIC
-  LLVMSupport
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRLLVMIR
   MLIRROCDLIR

diff  --git a/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt b/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt
index f473a3e04e51..aa202a34c556 100644
--- a/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt
@@ -9,10 +9,8 @@ add_mlir_conversion_library(MLIRGPUtoSPIRVTransforms
   DEPENDS
   MLIRConversionPassIncGen
   MLIRGPUToSPIRVIncGen
-  )
 
-target_link_libraries(MLIRGPUtoSPIRVTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRIR
   MLIRPass

diff  --git a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
index ecfc2d75d5f3..c0265096d73b 100644
--- a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
+++ b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt
@@ -4,10 +4,8 @@ add_mlir_conversion_library(MLIRGPUtoVulkanTransforms
 
   DEPENDS
   MLIRConversionPassIncGen
-  )
 
-target_link_libraries(MLIRGPUtoVulkanTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRGPU
   MLIRIR
   MLIRLLVMIR
@@ -18,5 +16,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 aa2dd990de4c..45b60c7ecd86 100644
--- a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
@@ -7,10 +7,11 @@ add_mlir_conversion_library(MLIRLinalgToLLVM
   DEPENDS
   MLIRConversionPassIncGen
   intrinsics_gen
-  )
 
-target_link_libraries(MLIRLinalgToLLVM
-  PUBLIC
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRAffineToStandard
   MLIREDSC
   MLIRIR
@@ -21,6 +22,4 @@ target_link_libraries(MLIRLinalgToLLVM
   MLIRVectorToLLVM
   MLIRVectorToLoops
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt b/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt
index f0cc53223366..98553ad96748 100644
--- a/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt
+++ b/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt
@@ -8,10 +8,8 @@ add_mlir_conversion_library(MLIRLinalgToSPIRVTransforms
 
   DEPENDS
   MLIRConversionPassIncGen
-  )
 
-target_link_libraries(MLIRLinalgToSPIRVTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLinalgOps
   MLIRLinalgUtils

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

diff  --git a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
index 5b31429a0d0c..9b4e184d84c3 100644
--- a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
+++ b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt
@@ -7,9 +7,8 @@ add_mlir_conversion_library(MLIRLoopsToGPU
 
   DEPENDS
   MLIRConversionPassIncGen
-)
-target_link_libraries(MLIRLoopsToGPU
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRAffineOps
   MLIRAffineToStandard
   MLIRGPU
@@ -19,5 +18,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 ba746f78b495..83bda1048739 100644
--- a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt
@@ -7,12 +7,11 @@ add_mlir_conversion_library(MLIRStandardToLLVM
   DEPENDS
   MLIRConversionPassIncGen
   intrinsics_gen
-  )
-target_link_libraries(
-  MLIRStandardToLLVM
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRLLVMIR
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt b/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt
index bb249078d62c..e60985984da3 100644
--- a/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt
+++ b/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt
@@ -9,10 +9,8 @@ add_mlir_conversion_library(MLIRStandardToSPIRVTransforms
 
   DEPENDS
   MLIRConversionPassIncGen
-  )
 
-target_link_libraries(MLIRStandardToSPIRVTransforms
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRPass
   MLIRSPIRV

diff  --git a/mlir/lib/Conversion/StandardToStandard/CMakeLists.txt b/mlir/lib/Conversion/StandardToStandard/CMakeLists.txt
index e1bc42a746ee..2d1a0be0ab7a 100644
--- a/mlir/lib/Conversion/StandardToStandard/CMakeLists.txt
+++ b/mlir/lib/Conversion/StandardToStandard/CMakeLists.txt
@@ -3,9 +3,8 @@ add_mlir_conversion_library(MLIRStandardToStandard
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/StandardToStandard
-  )
-target_link_libraries(MLIRStandardToStandard
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRPass
   MLIRStandardOps

diff  --git a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
index 1f8abc5a9091..569619f2bcef 100644
--- a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
+++ b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt
@@ -7,14 +7,13 @@ add_mlir_conversion_library(MLIRVectorToLLVM
   DEPENDS
   MLIRConversionPassIncGen
   intrinsics_gen
-  )
 
-target_link_libraries(MLIRVectorToLLVM
-  PUBLIC
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRLLVMIR
   MLIRStandardToLLVM
   MLIRVector
   MLIRTransforms
-  LLVMCore
-  LLVMSupport
   )

diff  --git a/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt b/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
index 515c0e2d0344..08cbc392d7f6 100644
--- a/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
+++ b/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt
@@ -3,14 +3,13 @@ add_mlir_conversion_library(MLIRVectorToLoops
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/VectorToLoops
-)
 
-target_link_libraries(MLIRVectorToLoops
-  PUBLIC
+  LINK_COMPONENTS
+  Core
+
+  LINK_LIBS PUBLIC
   MLIREDSC
   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/CMakeLists.txt b/mlir/lib/Dialect/CMakeLists.txt
index b18a2a671b14..e9196f224ae0 100644
--- a/mlir/lib/Dialect/CMakeLists.txt
+++ b/mlir/lib/Dialect/CMakeLists.txt
@@ -21,8 +21,7 @@ add_mlir_library(MLIRDialect
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect
-  )
-target_link_libraries(MLIRDialect
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   )

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 1a30c94dc4e9..7ff3584508c3 100644
--- a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
+++ b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
@@ -10,15 +10,15 @@ add_mlir_dialect_library(MLIRLLVMIR
   MLIRLLVMOpsIncGen
   MLIRLLVMConversionsIncGen
   intrinsics_gen
-  )
-target_link_libraries(MLIRLLVMIR
-  PUBLIC
-  LLVMAsmParser
-  LLVMBitReader
-  LLVMBitWriter
-  LLVMCore
-  LLVMSupport
-  LLVMFrontendOpenMP
+
+  LINK_COMPONENTS
+  AsmParser
+  BitReader
+  BitWriter
+  Core
+  FrontendOpenMP
+
+  LINK_LIBS PUBLIC
   MLIRCallInterfaces
   MLIRControlFlowInterfaces
   MLIROpenMP
@@ -37,15 +37,15 @@ add_mlir_dialect_library(MLIRLLVMAVX512
   MLIRLLVMAVX512IncGen
   MLIRLLVMAVX512ConversionsIncGen
   intrinsics_gen
-  )
-target_link_libraries(MLIRLLVMAVX512
-  PUBLIC
-  LLVMAsmParser
+
+  LINK_COMPONENTS
+  AsmParser
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLLVMIR
   MLIRSideEffects
-  LLVMSupport
-  LLVMCore
   )
 
 add_mlir_dialect_library(MLIRNVVMIR
@@ -58,15 +58,15 @@ add_mlir_dialect_library(MLIRNVVMIR
   MLIRNVVMOpsIncGen
   MLIRNVVMConversionsIncGen
   intrinsics_gen
-  )
-target_link_libraries(MLIRNVVMIR
-  PUBLIC
-  LLVMAsmParser
+
+  LINK_COMPONENTS
+  AsmParser
+  Core
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRLLVMIR
   MLIRSideEffects
-  LLVMSupport
-  LLVMCore
   )
 
 add_mlir_dialect_library(MLIRROCDLIR
@@ -79,12 +79,12 @@ add_mlir_dialect_library(MLIRROCDLIR
   MLIRROCDLOpsIncGen
   MLIRROCDLConversionsIncGen
   intrinsics_gen
-  )
-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 794648929f27..5bb56236a04d 100644
--- a/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
@@ -3,12 +3,9 @@ add_mlir_dialect_library(MLIRLinalgAnalysis
   
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Linalg
-  )
 
-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 d6f03f372965..b3f3e5c0804f 100644
--- a/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
@@ -3,10 +3,8 @@ add_mlir_dialect_library(MLIRLinalgEDSC
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Linalg
-  )
 
-target_link_libraries(MLIRLinalgEDSC
-  PUBLIC
+  LINK_LIBS PUBLIC
   MLIREDSC
   MLIRIR
   MLIRAffineOps
@@ -14,5 +12,4 @@ target_link_libraries(MLIRLinalgEDSC
   MLIRLinalgOps
   MLIRLoopOps
   MLIRStandardOps
-  LLVMSupport
   )

diff  --git a/mlir/lib/Dialect/Linalg/IR/CMakeLists.txt b/mlir/lib/Dialect/Linalg/IR/CMakeLists.txt
index f088e4fdbc8e..64a51500d792 100644
--- a/mlir/lib/Dialect/Linalg/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/IR/CMakeLists.txt
@@ -9,9 +9,8 @@ add_mlir_dialect_library(MLIRLinalgOps
   MLIRLinalgOpsIncGen
   MLIRLinalgStructuredOpsIncGen
   MLIRLinalgStructuredOpsInterfaceIncGen
-  )
-target_link_libraries(MLIRLinalgOps
-  PUBLIC
+
+  LINK_LIBS PUBLIC
   MLIRIR
   MLIRSideEffects
   MLIRViewLikeInterface

diff  --git a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
index 0d8c4938fbd0..ca02cfbc4a83 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
@@ -12,9 +12,8 @@ add_mlir_dialect_library(MLIRLinalgTransforms
 
   DEPENDS
   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 544c8e6df46e..3b740748c62c 100644
--- a/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
+++ b/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
@@ -3,10 +3,8 @@ add_mlir_dialect_library(MLIRLinalgUtils
 
   ADDITIONAL_HEADER_DIRS
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Linalg
-  )
 
-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 61509b35b71c..06e25dcf27b8 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,46 +8,63 @@ 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
 
   DEPENDS
   intrinsics_gen
-  )
-target_link_libraries(MLIRExecutionEngine
-  PUBLIC
+
+  LINK_COMPONENTS
+  Core
+  ExecutionEngine
+  Object
+  OrcJIT
+  JITLink
+  Analysis
+  AggressiveInstCombine
+  InstCombine
+  MC
+  ScalarOpts
+  Target
+  Vectorize
+  TransformUtils
+  nativecodegen
+  IPO
+
+  LINK_LIBS 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)
-target_link_libraries(mlir_runner_utils
-  PUBLIC
+add_mlir_library(mlir_runner_utils
+  SHARED
+  RunnerUtils.cpp
+
+  EXCLUDE_FROM_LIBMLIR
+
+  LINK_LIBS PUBLIC
   mlir_c_runner_utils_static
 )
 target_compile_definitions(mlir_runner_utils PRIVATE mlir_runner_utils_EXPORTS)

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 193c7b41f599..dcb28518b1a2 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,23 +25,33 @@ 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
 
   DEPENDS
   intrinsics_gen
-)
-target_link_libraries(MLIRJitRunner
-  PUBLIC
+
+  EXCLUDE_FROM_LIBMLIR
+
+  LINK_COMPONENTS
+  Core
+  OrcJIT
+  JITLink
+  Support
+
+  LINK_LIBS PUBLIC
   MLIRExecutionEngine
   MLIRIR
   MLIRParser
@@ -49,6 +60,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