Skip to content

Commit b36cb65

Browse files
nikicmgorny
authored andcommitted
[mlir] Add support for MLIR_LINK_MLIR_DYLIB (#119408)
While MLIR currently supports building a libMLIR.so, it does not support actually linking against it for its own tools. When building with LTO, this means we have to relink the world for every tool, and the resulting binaries are large. This adds basic support for MLIR_LINK_MLIR_DYLIB, modelled after how CLANG_LINK_CLANG_DYLIB is implemented: Libraries that are part of libMLIR.so should be added via mlir_target_link_libraries instead of target_link_libraries. This will replace them with libMLIR.so if MLIR_LINK_MLIR_DYLIB is enabled. This adds basic support, I think there are two more things that can be done here: * C API unit tests should link against libMLIR-C.so. Currently these still link statically. * Linking the test libs (not part of libMLIR.so) still pulls in dependencies statically that should come from libMLIR.so.
1 parent 8d649fb commit b36cb65

File tree

11 files changed

+46
-28
lines changed

11 files changed

+46
-28
lines changed

mlir/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ set(MLIR_INSTALL_AGGREGATE_OBJECTS 1 CACHE BOOL
153153

154154
set(MLIR_BUILD_MLIR_C_DYLIB 0 CACHE BOOL "Builds libMLIR-C shared library.")
155155

156+
set(MLIR_LINK_MLIR_DYLIB ${LLVM_LINK_LLVM_DYLIB} CACHE BOOL
157+
"Link tools against libMLIR.so")
158+
156159
configure_file(
157160
${MLIR_MAIN_INCLUDE_DIR}/mlir/Config/mlir-config.h.cmake
158161
${MLIR_INCLUDE_DIR}/mlir/Config/mlir-config.h)

mlir/cmake/modules/AddMLIR.cmake

+20
Original file line numberDiff line numberDiff line change
@@ -717,3 +717,23 @@ function(mlir_check_all_link_libraries name)
717717
endforeach()
718718
endif()
719719
endfunction(mlir_check_all_link_libraries)
720+
721+
# Link target against a list of MLIR libraries. If MLIR_LINK_MLIR_DYLIB is
722+
# enabled, this will link against the MLIR dylib instead of the static
723+
# libraries.
724+
#
725+
# This function should be used instead of target_link_libraries() when linking
726+
# MLIR libraries that are part of the MLIR dylib. For libraries that are not
727+
# part of the dylib (like test libraries), target_link_libraries() should be
728+
# used.
729+
function(mlir_target_link_libraries target type)
730+
if (TARGET obj.${target})
731+
target_link_libraries(obj.${target} ${ARGN})
732+
endif()
733+
734+
if (MLIR_LINK_MLIR_DYLIB)
735+
target_link_libraries(${target} ${type} MLIR)
736+
else()
737+
target_link_libraries(${target} ${type} ${ARGN})
738+
endif()
739+
endfunction()

mlir/tools/mlir-cpu-runner/CMakeLists.txt

+5-3
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ add_mlir_tool(mlir-cpu-runner
1111
EXPORT_SYMBOLS
1212
)
1313
llvm_update_compile_flags(mlir-cpu-runner)
14-
target_link_libraries(mlir-cpu-runner PRIVATE
14+
mlir_target_link_libraries(mlir-cpu-runner PRIVATE
1515
MLIRAnalysis
1616
MLIRBuiltinToLLVMIRTranslation
17-
MLIRExecutionEngine
1817
MLIRIR
19-
MLIRJitRunner
2018
MLIRLLVMDialect
2119
MLIRLLVMToLLVMIRTranslation
2220
MLIRToLLVMIRTranslationRegistration
2321
MLIRParser
2422
MLIRTargetLLVMIRExport
2523
MLIRSupport
2624
)
25+
target_link_libraries(mlir-cpu-runner PRIVATE
26+
MLIRExecutionEngine
27+
MLIRJitRunner
28+
)

mlir/tools/mlir-lsp-server/CMakeLists.txt

+2-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ set(LIBS
3838
${conversion_libs}
3939
${dialect_libs}
4040
${extension_libs}
41-
${test_libs}
4241

4342
MLIRAffineAnalysis
4443
MLIRAnalysis
@@ -56,11 +55,9 @@ set(LIBS
5655

5756
add_mlir_tool(mlir-lsp-server
5857
mlir-lsp-server.cpp
59-
60-
DEPENDS
61-
${LIBS}
6258
)
63-
target_link_libraries(mlir-lsp-server PRIVATE ${LIBS})
59+
mlir_target_link_libraries(mlir-lsp-server PRIVATE ${LIBS})
60+
target_link_libraries(mlir-lsp-server PRIVATE ${test_libs})
6461
llvm_update_compile_flags(mlir-lsp-server)
6562

6663
mlir_check_all_link_libraries(mlir-lsp-server)

mlir/tools/mlir-opt/CMakeLists.txt

+3-4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ if(MLIR_INCLUDE_TESTS)
4545
MLIRTestReducer
4646
MLIRTestTransforms
4747
MLIRTilingInterfaceTestPasses
48+
MLIRTosaTestPasses
4849
MLIRVectorTestPasses
4950
MLIRTestVectorToSPIRV
5051
MLIRLLVMTestPasses
@@ -66,7 +67,6 @@ set(LIBS
6667
${dialect_libs}
6768
${conversion_libs}
6869
${extension_libs}
69-
${test_libs}
7070

7171
MLIRAffineAnalysis
7272
MLIRAnalysis
@@ -99,11 +99,10 @@ add_mlir_library(MLIRMlirOptMain
9999
add_mlir_tool(mlir-opt
100100
mlir-opt.cpp
101101

102-
DEPENDS
103-
${LIBS}
104102
SUPPORT_PLUGINS
105103
)
106-
target_link_libraries(mlir-opt PRIVATE ${LIBS})
104+
mlir_target_link_libraries(mlir-opt PRIVATE ${LIBS})
105+
target_link_libraries(mlir-opt PRIVATE ${test_libs})
107106
llvm_update_compile_flags(mlir-opt)
108107

109108
mlir_check_all_link_libraries(mlir-opt)

mlir/tools/mlir-parser-fuzzer/bytecode/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ add_llvm_fuzzer(mlir-bytecode-parser-fuzzer
66
mlir-bytecode-parser-fuzzer.cpp
77
DUMMY_MAIN DummyParserFuzzer.cpp
88
)
9-
target_link_libraries(mlir-bytecode-parser-fuzzer
9+
mlir_target_link_libraries(mlir-bytecode-parser-fuzzer
1010
PUBLIC
1111
MLIRIR
1212
MLIRParser

mlir/tools/mlir-parser-fuzzer/text/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ add_llvm_fuzzer(mlir-text-parser-fuzzer
66
mlir-text-parser-fuzzer.cpp
77
DUMMY_MAIN DummyParserFuzzer.cpp
88
)
9-
target_link_libraries(mlir-text-parser-fuzzer
9+
mlir_target_link_libraries(mlir-text-parser-fuzzer
1010
PUBLIC
1111
MLIRIR
1212
MLIRParser

mlir/tools/mlir-query/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ add_mlir_tool(mlir-query
1010
mlir-query.cpp
1111
)
1212
llvm_update_compile_flags(mlir-query)
13-
target_link_libraries(mlir-query
13+
mlir_target_link_libraries(mlir-query
1414
PRIVATE
1515
${dialect_libs}
16-
${test_libs}
1716
MLIRQueryLib
1817
)
18+
target_link_libraries(mlir-query PRIVATE ${test_libs})
1919

2020
mlir_check_link_libraries(mlir-query)

mlir/tools/mlir-reduce/CMakeLists.txt

+2-5
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ endif()
1010
set(LIBS
1111
${conversion_libs}
1212
${dialect_libs}
13-
${test_libs}
1413
MLIRDialect
1514
MLIRIR
1615
MLIRPass
@@ -19,12 +18,10 @@ set(LIBS
1918

2019
add_mlir_tool(mlir-reduce
2120
mlir-reduce.cpp
22-
23-
DEPENDS
24-
${LIBS}
2521
)
2622

27-
target_link_libraries(mlir-reduce PRIVATE ${LIBS})
23+
mlir_target_link_libraries(mlir-reduce PRIVATE ${LIBS})
24+
target_link_libraries(mlir-reduce PRIVATE ${test_libs})
2825
llvm_update_compile_flags(mlir-reduce)
2926

3027
mlir_check_all_link_libraries(mlir-reduce)

mlir/tools/mlir-rewrite/CMakeLists.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ set(LLVM_LINK_COMPONENTS
55

66
set(LIBS
77
${dialect_libs}
8-
${test_libs}
98

109
MLIRAffineAnalysis
1110
MLIRAnalysis
@@ -24,11 +23,9 @@ include_directories(../../../clang/include)
2423
add_mlir_tool(mlir-rewrite
2524
mlir-rewrite.cpp
2625

27-
DEPENDS
28-
${LIBS}
2926
SUPPORT_PLUGINS
3027
)
31-
target_link_libraries(mlir-rewrite PRIVATE ${LIBS})
28+
mlir_target_link_libraries(mlir-rewrite PRIVATE ${LIBS})
3229
llvm_update_compile_flags(mlir-rewrite)
3330

3431
mlir_check_all_link_libraries(mlir-rewrite)

mlir/tools/mlir-translate/CMakeLists.txt

+6-3
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,20 @@ add_mlir_tool(mlir-translate
99
mlir-translate.cpp
1010
)
1111
llvm_update_compile_flags(mlir-translate)
12-
target_link_libraries(mlir-translate
12+
mlir_target_link_libraries(mlir-translate
1313
PRIVATE
1414
${dialect_libs}
15-
${translation_libs}
16-
${test_libs}
1715
MLIRIR
1816
MLIRParser
1917
MLIRPass
2018
MLIRSPIRVDialect
2119
MLIRTranslateLib
2220
MLIRSupport
2321
)
22+
target_link_libraries(mlir-translate
23+
PRIVATE
24+
${translation_libs}
25+
${test_libs}
26+
)
2427

2528
mlir_check_link_libraries(mlir-translate)

0 commit comments

Comments
 (0)