diff --git a/mlir/cmake/modules/AddMLIR.cmake b/mlir/cmake/modules/AddMLIR.cmake --- a/mlir/cmake/modules/AddMLIR.cmake +++ b/mlir/cmake/modules/AddMLIR.cmake @@ -29,11 +29,111 @@ 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 @@ 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 --- a/mlir/cmake/modules/MLIRConfig.cmake.in +++ b/mlir/cmake/modules/MLIRConfig.cmake.in @@ -19,9 +19,7 @@ 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 --- a/mlir/examples/toy/Ch6/CMakeLists.txt +++ b/mlir/examples/toy/Ch6/CMakeLists.txt @@ -4,6 +4,8 @@ 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 --- a/mlir/examples/toy/Ch7/CMakeLists.txt +++ b/mlir/examples/toy/Ch7/CMakeLists.txt @@ -4,6 +4,8 @@ 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 --- a/mlir/lib/Analysis/CMakeLists.txt +++ b/mlir/lib/Analysis/CMakeLists.txt @@ -17,12 +17,7 @@ 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 @@ 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 --- a/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt @@ -6,7 +6,10 @@ DEPENDS MLIRConversionPassIncGen -) + + LINK_COMPONENTS + Core + ) target_link_libraries(MLIRAVX512ToLLVM PUBLIC @@ -15,6 +18,4 @@ MLIRLLVMIR MLIRStandardToLLVM MLIRTransforms - LLVMCore - LLVMSupport ) diff --git a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt --- a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt +++ b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt @@ -6,7 +6,10 @@ DEPENDS MLIRConversionPassIncGen -) + + LINK_COMPONENTS + Core + ) target_link_libraries( MLIRAffineToStandard PUBLIC @@ -16,6 +19,4 @@ MLIRStandardOps MLIRTransforms MLIRIR - LLVMCore - LLVMSupport ) diff --git a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt --- a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt @@ -9,9 +9,9 @@ if (MLIR_CUDA_CONVERSIONS_ENABLED) list(APPEND SOURCES "ConvertKernelFuncToCubin.cpp") set(NVPTX_LIBS - LLVMNVPTXCodeGen - LLVMNVPTXDesc - LLVMNVPTXInfo + NVPTXCodeGen + NVPTXDesc + NVPTXInfo ) endif() @@ -20,13 +20,14 @@ 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 --- a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt @@ -12,7 +12,6 @@ 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 --- a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt @@ -12,7 +12,6 @@ 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 --- a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt @@ -18,5 +18,4 @@ MLIRSupport MLIRTransforms MLIRTranslation - LLVMSupport ) diff --git a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt @@ -6,7 +6,10 @@ DEPENDS MLIRConversionPassIncGen -) + + LINK_COMPONENTS + Core + ) target_link_libraries(MLIRLinalgToLLVM PUBLIC @@ -20,6 +23,4 @@ MLIRVectorToLLVM MLIRVectorToLoops MLIRTransforms - LLVMCore - LLVMSupport ) diff --git a/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt b/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt --- a/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt +++ b/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt @@ -6,12 +6,13 @@ 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 --- a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt +++ b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt @@ -19,5 +19,4 @@ MLIRStandardOps MLIRSupport MLIRTransforms - LLVMSupport ) diff --git a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt @@ -6,12 +6,13 @@ 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 --- a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt @@ -6,7 +6,10 @@ DEPENDS MLIRConversionPassIncGen -) + + LINK_COMPONENTS + Core + ) target_link_libraries(MLIRVectorToLLVM PUBLIC @@ -14,6 +17,4 @@ MLIRStandardToLLVM MLIRVector MLIRTransforms - LLVMCore - LLVMSupport ) diff --git a/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt b/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt --- a/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt +++ b/mlir/lib/Conversion/VectorToLoops/CMakeLists.txt @@ -3,7 +3,10 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/VectorToLoops -) + + LINK_COMPONENTS + Core + ) target_link_libraries(MLIRVectorToLoops PUBLIC @@ -11,6 +14,4 @@ MLIRAffineEDSC MLIRLLVMIR MLIRTransforms - LLVMCore - LLVMSupport ) diff --git a/mlir/lib/Dialect/AVX512/CMakeLists.txt b/mlir/lib/Dialect/AVX512/CMakeLists.txt --- a/mlir/lib/Dialect/AVX512/CMakeLists.txt +++ b/mlir/lib/Dialect/AVX512/CMakeLists.txt @@ -6,11 +6,9 @@ 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 --- a/mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt +++ b/mlir/lib/Dialect/Affine/EDSC/CMakeLists.txt @@ -6,9 +6,8 @@ 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 --- a/mlir/lib/Dialect/Affine/IR/CMakeLists.txt +++ b/mlir/lib/Dialect/Affine/IR/CMakeLists.txt @@ -7,9 +7,8 @@ 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 --- a/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt @@ -14,9 +14,8 @@ 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 --- a/mlir/lib/Dialect/Affine/Utils/CMakeLists.txt +++ b/mlir/lib/Dialect/Affine/Utils/CMakeLists.txt @@ -4,9 +4,7 @@ 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 --- a/mlir/lib/Dialect/GPU/CMakeLists.txt +++ b/mlir/lib/Dialect/GPU/CMakeLists.txt @@ -13,9 +13,8 @@ MLIRGPUPassIncGen MLIRParallelLoopMapperAttrGen MLIRParallelLoopMapperEnumsGen - ) -target_link_libraries(MLIRGPU - PUBLIC + + LINK_LIBS PUBLIC MLIREDSC MLIRIR MLIRLLVMIR @@ -25,5 +24,4 @@ MLIRStandardOps MLIRSupport MLIRTransformUtils - LLVMSupport ) diff --git a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt --- a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt +++ b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt @@ -9,15 +9,15 @@ 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 @@ 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 @@ 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 @@ 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 --- a/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt @@ -3,10 +3,8 @@ 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 --- a/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt +++ b/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt @@ -6,12 +6,9 @@ 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 --- a/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt +++ b/mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt @@ -6,10 +6,8 @@ DEPENDS intrinsics_gen - ) -target_link_libraries(MLIRLinalgEDSC - PUBLIC + LINK_LIBS PUBLIC MLIREDSC MLIRIR MLIRAffineOps @@ -17,5 +15,4 @@ MLIRLinalgOps MLIRLoopOps MLIRStandardOps - LLVMSupport ) diff --git a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt --- a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt @@ -13,9 +13,8 @@ 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 --- a/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt +++ b/mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt @@ -3,12 +3,11 @@ 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 --- a/mlir/lib/Dialect/LoopOps/CMakeLists.txt +++ b/mlir/lib/Dialect/LoopOps/CMakeLists.txt @@ -8,15 +8,13 @@ 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 --- a/mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt @@ -8,14 +8,12 @@ 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 --- a/mlir/lib/Dialect/OpenMP/CMakeLists.txt +++ b/mlir/lib/Dialect/OpenMP/CMakeLists.txt @@ -6,8 +6,7 @@ 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 --- a/mlir/lib/Dialect/Quant/CMakeLists.txt +++ b/mlir/lib/Dialect/Quant/CMakeLists.txt @@ -15,9 +15,8 @@ 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 --- a/mlir/lib/Dialect/SDBM/CMakeLists.txt +++ b/mlir/lib/Dialect/SDBM/CMakeLists.txt @@ -5,8 +5,7 @@ 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 --- a/mlir/lib/Dialect/SPIRV/CMakeLists.txt +++ b/mlir/lib/Dialect/SPIRV/CMakeLists.txt @@ -27,9 +27,8 @@ 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 --- a/mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt +++ b/mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt @@ -9,9 +9,8 @@ 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 --- a/mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt @@ -8,10 +8,8 @@ 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 --- a/mlir/lib/Dialect/Shape/CMakeLists.txt +++ b/mlir/lib/Dialect/Shape/CMakeLists.txt @@ -6,12 +6,10 @@ 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 --- a/mlir/lib/Dialect/StandardOps/CMakeLists.txt +++ b/mlir/lib/Dialect/StandardOps/CMakeLists.txt @@ -8,14 +8,12 @@ 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 --- a/mlir/lib/Dialect/Vector/CMakeLists.txt +++ b/mlir/lib/Dialect/Vector/CMakeLists.txt @@ -10,9 +10,8 @@ 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 --- a/mlir/lib/EDSC/CMakeLists.txt +++ b/mlir/lib/EDSC/CMakeLists.txt @@ -8,10 +8,8 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/EDSC - ) -target_link_libraries(MLIREDSC - PUBLIC + LINK_LIBS PUBLIC MLIRIR MLIRSupport ) @@ -21,9 +19,8 @@ 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 --- 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 @@ 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 --- a/mlir/lib/IR/CMakeLists.txt +++ b/mlir/lib/IR/CMakeLists.txt @@ -9,9 +9,8 @@ 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 --- a/mlir/lib/Interfaces/CMakeLists.txt +++ b/mlir/lib/Interfaces/CMakeLists.txt @@ -16,9 +16,8 @@ DEPENDS MLIRCallInterfacesIncGen - ) -target_link_libraries(MLIRCallInterfaces - PUBLIC + + LINK_LIBS PUBLIC MLIRIR ) @@ -30,9 +29,8 @@ DEPENDS MLIRControlFlowInterfacesIncGen - ) -target_link_libraries(MLIRControlFlowInterfaces - PUBLIC + + LINK_LIBS PUBLIC MLIRIR ) @@ -44,9 +42,8 @@ DEPENDS MLIRDerivedAttributeOpInterfaceIncGen - ) -target_link_libraries(MLIRDerivedAttributeOpInterface - PUBLIC + + LINK_LIBS PUBLIC MLIRIR ) @@ -58,9 +55,8 @@ DEPENDS MLIRInferTypeOpInterfaceIncGen - ) -target_link_libraries(MLIRInferTypeOpInterface - PUBLIC + + LINK_LIBS PUBLIC MLIRIR ) @@ -72,9 +68,8 @@ DEPENDS MLIRLoopLikeInterfaceIncGen - ) -target_link_libraries(MLIRLoopLikeInterface - PUBLIC + + LINK_LIBS PUBLIC MLIRIR ) @@ -86,9 +81,8 @@ DEPENDS MLIRSideEffectOpInterfacesIncGen - ) -target_link_libraries(MLIRSideEffects - PUBLIC + + LINK_LIBS PUBLIC MLIRIR ) @@ -100,8 +94,7 @@ 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 --- a/mlir/lib/Parser/CMakeLists.txt +++ b/mlir/lib/Parser/CMakeLists.txt @@ -6,10 +6,6 @@ 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 --- a/mlir/lib/Pass/CMakeLists.txt +++ b/mlir/lib/Pass/CMakeLists.txt @@ -4,9 +4,11 @@ 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 --- a/mlir/lib/Support/CMakeLists.txt +++ b/mlir/lib/Support/CMakeLists.txt @@ -13,10 +13,11 @@ 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 @@ 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 @@ MLIRTransforms MLIRStandardToLLVM MLIRSupport - LLVMCore - LLVMSupport ) diff --git a/mlir/lib/TableGen/CMakeLists.txt b/mlir/lib/TableGen/CMakeLists.txt --- 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 @@ 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 --- a/mlir/lib/Target/CMakeLists.txt +++ b/mlir/lib/Target/CMakeLists.txt @@ -4,17 +4,18 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 --- a/mlir/lib/Transforms/CMakeLists.txt +++ b/mlir/lib/Transforms/CMakeLists.txt @@ -26,10 +26,8 @@ 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 --- a/mlir/lib/Transforms/Utils/CMakeLists.txt +++ b/mlir/lib/Transforms/Utils/CMakeLists.txt @@ -12,10 +12,8 @@ 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 --- a/mlir/lib/Translation/CMakeLists.txt +++ b/mlir/lib/Translation/CMakeLists.txt @@ -3,10 +3,8 @@ 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 --- 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 @@ 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 --- 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 @@ 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 --- 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 --- 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 --- a/mlir/test/lib/Dialect/Test/CMakeLists.txt +++ b/mlir/test/lib/Dialect/Test/CMakeLists.txt @@ -14,16 +14,17 @@ 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 --- 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 --- 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 --- 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 @@ 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 @@ 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 --- 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 @@ 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 --- 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 @@ 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 --- a/mlir/tools/mlir-opt/CMakeLists.txt +++ b/mlir/tools/mlir-opt/CMakeLists.txt @@ -4,6 +4,12 @@ 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 @@ 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 --- a/mlir/tools/mlir-shlib/CMakeLists.txt +++ b/mlir/tools/mlir-shlib/CMakeLists.txt @@ -8,8 +8,10 @@ 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 @@ else() list(APPEND _OBJECTS $) endif() - list(APPEND _DEPS $) + # libClang needs this, but it causes problems for MLIR (probably + # because we use public library dependencies within MLIR.) + # list(APPEND _DEPS $) 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 --- 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 @@ 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 --- 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)