Reapply "[mlir] Link libraries that aren't included in libMLIR to libMLIR" (#123910)

Use `mlir_target_link_libraries()` to link dependencies of libraries
that are not included in libMLIR, to ensure that they link to the dylib
when they are used in Flang. Otherwise, they implicitly pull in all
their static dependencies, effectively causing Flang binaries to
simultaneously link to the dylib and to static libraries, which is never
a good idea.

I have only covered the libraries that are used by Flang. If you wish, I
can extend this approach to all non-libMLIR libraries in MLIR, making
MLIR itself also link to the dylib consistently.

[v3 with more `-DBUILD_SHARED_LIBS=ON` fixes]
This commit is contained in:
Michał Górny
2025-01-22 10:01:50 +01:00
committed by GitHub
parent 3088c31699
commit 047e8e47c1
45 changed files with 108 additions and 78 deletions

View File

@@ -305,7 +305,9 @@ endfunction()
# 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.
# with large dependencies. When using it, please link libraries included
# in libMLIR via mlir_target_link_libraries(), to ensure that the library
# does not pull in static dependencies when MLIR_LINK_MLIR_DYLIB=ON is used.
# OBJECT
# The library's object library is referenced using "obj.${name}". For this to
# work reliably, this flag ensures that the OBJECT library exists.

View File

@@ -1,6 +1,8 @@
set(LLVM_LINK_COMPONENTS
nativecodegen
native
orcjit
support
)
# Main API shared library.

View File

@@ -91,8 +91,9 @@ add_mlir_library(MLIRExecutionEngine
IPO
Passes
${LLVM_JIT_LISTENER_LIB}
)
LINK_LIBS PUBLIC
mlir_target_link_libraries(MLIRExecutionEngine PUBLIC
MLIRBuiltinToLLVMIRTranslation
MLIRExecutionEngineUtils
MLIRLLVMDialect
@@ -139,8 +140,10 @@ add_mlir_library(MLIRJitRunner
JITLink
LINK_LIBS PUBLIC
${dialect_libs}
MLIRExecutionEngine
)
mlir_target_link_libraries(MLIRJitRunner PUBLIC
${dialect_libs}
MLIRFuncDialect
MLIRFuncToLLVM
MLIRIR

View File

@@ -11,8 +11,8 @@ add_mlir_library(MLIRSparseTensorRuntime
Storage.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRSparseTensorRuntime PUBLIC
MLIRSparseTensorEnums
mlir_float16_utils
)

View File

@@ -21,12 +21,14 @@ add_mlir_library(MLIRTestAnalysis
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRTestAnalysis PUBLIC
MLIRAffineDialect
MLIRAnalysis
MLIRFunctionInterfaces
MLIRMemRefDialect
MLIRPass
MLIRTestDialect
)
target_include_directories(MLIRTestAnalysis

View File

@@ -4,8 +4,8 @@ add_mlir_library(MLIRTestConvertToSPIRV
TestSPIRVVectorUnrolling.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestConvertToSPIRV PUBLIC
MLIRArithDialect
MLIRFuncDialect
MLIRPass

View File

@@ -6,12 +6,14 @@ add_mlir_library(MLIRTestFuncToLLVM
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRTestFuncToLLVM PUBLIC
MLIRFuncToLLVM
MLIRLLVMCommonConversion
MLIRLLVMDialect
MLIRLLVMIRTransforms
MLIRPass
MLIRTestDialect
)
target_include_directories(MLIRTestFuncToLLVM

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRTestMathToVCIX
TestMathToVCIXConversion.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestMathToVCIX PUBLIC
MLIRArithDialect
MLIRFuncDialect
MLIRMathDialect

View File

@@ -4,13 +4,15 @@ add_mlir_library(MLIRTestOneToNTypeConversionPass
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRTestOneToNTypeConversionPass PUBLIC
MLIRFuncDialect
MLIRFuncTransforms
MLIRIR
MLIRPass
MLIRSCFDialect
MLIRSCFTransforms
MLIRTestDialect
MLIRTransformUtils
)

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRTestVectorToSPIRV
TestVectorReductionToSPIRVDotProd.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestVectorToSPIRV PUBLIC
MLIRVectorToSPIRV
MLIRArithDialect
MLIRFuncDialect

View File

@@ -21,6 +21,9 @@ add_mlir_library(MLIRAffineTransformsTestPasses
Core
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRAffineTransformsTestPasses PUBLIC
MLIRArithTransforms
MLIRAffineAnalysis
MLIRAffineTransforms
@@ -30,7 +33,6 @@ add_mlir_library(MLIRAffineTransformsTestPasses
MLIRSupport
MLIRMemRefDialect
MLIRTensorDialect
MLIRTestDialect
MLIRVectorUtils
)

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRArithTestPasses
TestEmulateWideInt.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRArithTestPasses PUBLIC
MLIRArithDialect
MLIRArithTransforms
MLIRFuncDialect

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRArmNeonTestPasses
TestLowerToArmNeon.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRArmNeonTestPasses PUBLIC
MLIRArmNeonDialect
MLIRArmNeonTransforms
MLIRIR

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRArmSMETestPasses
TestLowerToArmSME.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRArmSMETestPasses PUBLIC
MLIRArithToArmSME
MLIRArmSMEToLLVM
MLIRArmSMEToSCF

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRBufferizationTestPasses
TestTensorCopyInsertion.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRBufferizationTestPasses PUBLIC
MLIRBufferizationDialect
MLIRBufferizationTransforms
MLIRIR

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRControlFlowTestPasses
TestAssert.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRControlFlowTestPasses PUBLIC
MLIRControlFlowToLLVM
MLIRFuncDialect
MLIRLLVMCommonConversion

View File

@@ -5,9 +5,11 @@ add_mlir_library(MLIRDLTITestPasses
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRDLTITestPasses PUBLIC
MLIRDLTIDialect
MLIRPass
MLIRTestDialect
)
target_include_directories(MLIRDLTITestPasses

View File

@@ -5,10 +5,12 @@ add_mlir_library(MLIRFuncTestPasses
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRFuncTestPasses PUBLIC
MLIRAffineDialect
MLIRPass
MLIRFuncTransforms
MLIRTestDialect
MLIRTransformUtils
)

View File

@@ -36,8 +36,8 @@ add_mlir_library(MLIRGPUTestPasses
TestGpuRewrite.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRGPUTestPasses PUBLIC
${LIBS}
)

View File

@@ -4,8 +4,8 @@ add_mlir_library(MLIRLLVMTestPasses
TestPatterns.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRLLVMTestPasses PUBLIC
MLIRAffineToStandard
MLIRFuncDialect
MLIRFuncToLLVM

View File

@@ -10,8 +10,8 @@ add_mlir_library(MLIRLinalgTestPasses
TestPadFusion.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRLinalgTestPasses PUBLIC
MLIRAffineDialect
MLIRArithDialect
MLIRArithTransforms

View File

@@ -5,8 +5,8 @@ add_mlir_library(MLIRMathTestPasses
TestPolynomialApproximation.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRMathTestPasses PUBLIC
MLIRMathTransforms
MLIRPass
MLIRTransformUtils

View File

@@ -7,10 +7,12 @@ add_mlir_library(MLIRMemRefTestPasses
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRMemRefTestPasses PUBLIC
MLIRPass
MLIRMemRefDialect
MLIRMemRefTransforms
MLIRTestDialect
)
target_include_directories(MLIRMemRefTestPasses

View File

@@ -5,8 +5,8 @@ add_mlir_library(MLIRMeshTest
TestSimplifications.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRMeshTest PUBLIC
MLIRMeshDialect
MLIRMeshTransforms
MLIRPass

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRNVGPUTestPasses
TestNVGPUTransforms.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRNVGPUTestPasses PUBLIC
MLIRIR
MLIRAffineDialect
MLIRAnalysis

View File

@@ -8,8 +8,8 @@ add_mlir_library(MLIRSCFTestPasses
TestWhileOpBuilder.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRSCFTestPasses PUBLIC
MLIRMemRefDialect
MLIRPass
MLIRSCFDialect

View File

@@ -9,8 +9,8 @@ add_mlir_library(MLIRSPIRVTestPasses
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SPIRV
${MLIR_MAIN_INCLUDE_DIR}/mlir/IR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRSPIRVTestPasses PUBLIC
MLIRGPUDialect
MLIRIR
MLIRPass

View File

@@ -8,8 +8,8 @@ add_mlir_library(MLIRShapeTestPasses
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Shape
${MLIR_MAIN_INCLUDE_DIR}/mlir/IR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRShapeTestPasses PUBLIC
MLIRIR
MLIRPass
MLIRShapeOpsTransforms

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRTensorTestPasses
TestTensorTransforms.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTensorTestPasses PUBLIC
MLIRArithDialect
MLIRLinalgDialect
MLIRPass

View File

@@ -68,8 +68,8 @@ add_mlir_library(MLIRTestDialect
MLIRTestOpsIncGen
MLIRTestOpsSyntaxIncGen
MLIRTestOpsShardGen
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestDialect PUBLIC
MLIRControlFlowInterfaces
MLIRDataLayoutInterfaces
MLIRDerivedAttributeOpInterface

View File

@@ -2,7 +2,7 @@ add_mlir_dialect_library(MLIRTestDynDialect
TestDynDialect.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestDynDialect PUBLIC
MLIRIR
)

View File

@@ -8,8 +8,8 @@ add_mlir_dialect_library(MLIRTosaTestPasses
DEPENDS
MLIRTosaPassIncGen
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTosaTestPasses PUBLIC
MLIRFuncDialect
MLIRPass
MLIRTosaDialect

View File

@@ -15,8 +15,8 @@ add_mlir_library(MLIRTestTransformDialect
DEPENDS
MLIRTestTransformDialectExtensionIncGen
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestTransformDialect PUBLIC
MLIRIR
MLIRPass
MLIRPDLDialect

View File

@@ -3,8 +3,8 @@ add_mlir_library(MLIRVectorTestPasses
TestVectorTransforms.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRVectorTestPasses PUBLIC
MLIRAffineDialect
MLIRAnalysis
MLIRArithDialect

View File

@@ -27,8 +27,8 @@ add_mlir_library(MLIRTestIR
TestVisitorsGeneric.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestIR PUBLIC
MLIRPass
MLIRBytecodeReader
MLIRBytecodeWriter

View File

@@ -2,8 +2,8 @@ add_mlir_library(MLIRLoopLikeInterfaceTestPasses
TestBlockInLoop.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRLoopLikeInterfaceTestPasses PUBLIC
MLIRPass
MLIRLoopLikeInterface
MLIRFuncDialect

View File

@@ -10,8 +10,8 @@ add_mlir_library(MLIRTilingInterfaceTestPasses
MLIRTestTilingInterfaceTransformOpsIncGen
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTilingInterfaceTestPasses PUBLIC
MLIRAffineDialect
MLIRArithDialect
MLIRIndexDialect

View File

@@ -10,8 +10,8 @@ add_mlir_library(MLIRTestPass
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Pass
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestPass PUBLIC
${conversion_libs}
MLIRIR
MLIRPass

View File

@@ -9,8 +9,8 @@ add_mlir_library(MLIRTestReducer
LINK_COMPONENTS
Core
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestReducer PUBLIC
MLIRIR
MLIRPass
MLIRSupport

View File

@@ -7,8 +7,8 @@ if (MLIR_ENABLE_PDL_IN_PATTERNMATCH)
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Rewrite
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestRewrite PUBLIC
MLIRIR
MLIRPass
MLIRSupport

View File

@@ -20,13 +20,15 @@ add_mlir_library(MLIRTestPDLL
MLIRTestPDLLPatternsIncGen
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRTestPDLL PUBLIC
MLIRCastInterfaces
MLIRIR
MLIRPass
MLIRPDLInterpDialect
MLIRPDLDialect
MLIRSupport
MLIRTestDialect
MLIRTransformUtils
)

View File

@@ -34,8 +34,8 @@ add_mlir_library(MLIRTestTransforms
DEPENDS
${MLIRTestTransformsPDLDep}
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRTestTransforms PUBLIC
MLIRAnalysis
MLIRFuncDialect
MLIRInferIntRangeInterface

View File

@@ -12,8 +12,8 @@ add_mlir_library(MLIRPythonTestDialect
DEPENDS
MLIRPythonTestIncGen
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRPythonTestDialect PUBLIC
MLIRInferTypeOpInterface
MLIRIR
MLIRSupport

View File

@@ -91,8 +91,8 @@ add_mlir_library(MLIRMlirOptMain
mlir-opt.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
)
mlir_target_link_libraries(MLIRMlirOptMain PUBLIC
${LIBS}
${test_libs}
)

View File

@@ -1,3 +1,10 @@
set(LLVM_LINK_COMPONENTS
nativecodegen
native
orcjit
support
)
add_mlir_unittest(MLIRExecutionEngineTests
DynamicMemRef.cpp
StridedMemRef.cpp