Skip to content

Commit 154a71a

Browse files
committed
[CIR] Support standalone builds against MLIR dylib
This commit combines three changes needed for ClangIR to be built successfully on Gentoo with standalone Clang/MLIR install: 1. It unblocks `CLANG_ENABLE_CIR` + `CLANG_BUILT_STANDALONE` scenario, obtaining the necessary bits from system-wide installation of MLIR via `find_package(MLIR)`. 2. It switches linking to MLIR libraries to use `mlir_target_link_libraries()` introduced in 10ef20f, which supports both linking to invidual MLIR static libraries and to the shared libMLIR library. 3. It makes dependencies on MLIR-specific targets conditional to non-standalone builds -- since these targets aren't present in clang build tree when it is built standalone. These changes do not cover tests yet.
1 parent b36cb65 commit 154a71a

File tree

14 files changed

+126
-48
lines changed

14 files changed

+126
-48
lines changed

clang/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,10 @@ endif()
168168

169169
if(CLANG_ENABLE_CIR)
170170
if (CLANG_BUILT_STANDALONE)
171-
message(FATAL_ERROR
172-
"ClangIR is not yet supported in the standalone build.")
173-
endif()
174-
if (NOT "${LLVM_ENABLE_PROJECTS}" MATCHES "MLIR|mlir")
171+
find_package(MLIR REQUIRED)
172+
list(APPEND CMAKE_MODULE_PATH "${MLIR_DIR}")
173+
include(AddMLIR)
174+
elseif (NOT "${LLVM_ENABLE_PROJECTS}" MATCHES "MLIR|mlir")
175175
message(FATAL_ERROR
176176
"Cannot build ClangIR without MLIR in LLVM_ENABLE_PROJECTS")
177177
endif()

clang/lib/CIR/CodeGen/CMakeLists.txt

+10-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ set(
66

77
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
88

9+
set(deps)
10+
if (NOT CLANG_BUILT_STANDALONE)
11+
set(deps ${dialect_libs})
12+
endif()
13+
914
add_clang_library(clangCIR
1015
CIRAsm.cpp
1116
CIRGenAtomic.cpp
@@ -52,16 +57,19 @@ add_clang_library(clangCIR
5257
MLIRCIRASTAttrInterfacesIncGen
5358
MLIRCIROpInterfacesIncGen
5459
MLIRCIRLoopOpInterfaceIncGen
55-
${dialect_libs}
60+
${deps}
5661

5762
LINK_LIBS
5863
clangAST
5964
clangBasic
6065
clangLex
61-
${dialect_libs}
6266
MLIRCIR
6367
MLIRCIRTransforms
6468
MLIRCIRInterfaces
69+
)
70+
71+
mlir_target_link_libraries(clangCIR PUBLIC
72+
${dialect_libs}
6573
MLIRAffineToStandard
6674
MLIRAnalysis
6775
MLIRDLTIDialect
+14-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
set(deps)
2+
if (NOT CLANG_BUILT_STANDALONE)
3+
set(deps
4+
MLIRBuiltinLocationAttributesIncGen
5+
MLIRSymbolInterfacesIncGen
6+
)
7+
endif()
8+
19
add_clang_library(MLIRCIR
210
CIRAttrs.cpp
311
CIROpenCLAttrs.cpp
@@ -8,22 +16,23 @@ add_clang_library(MLIRCIR
816
FPEnv.cpp
917

1018
DEPENDS
11-
MLIRBuiltinLocationAttributesIncGen
19+
${deps}
1220
MLIRCIROpsIncGen
1321
MLIRCIREnumsGen
14-
MLIRSymbolInterfacesIncGen
1522
MLIRCIRASTAttrInterfacesIncGen
1623
MLIRCIROpInterfacesIncGen
1724
MLIRCIRLoopOpInterfaceIncGen
1825

1926
LINK_LIBS PUBLIC
27+
clangAST
28+
)
29+
30+
mlir_target_link_libraries(MLIRCIR PUBLIC
2031
MLIRIR
2132
MLIRCIRInterfaces
2233
MLIRDLTIDialect
2334
MLIRDataLayoutInterfaces
2435
MLIRFuncDialect
2536
MLIRLoopLikeInterface
2637
MLIRLLVMDialect
27-
MLIRSideEffectInterfaces
28-
clangAST
29-
)
38+
MLIRSideEffectInterfaces)

clang/lib/CIR/Dialect/Transforms/CMakeLists.txt

+5-3
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ add_clang_library(MLIRCIRTransforms
2323
clangBasic
2424
TargetLowering
2525

26+
MLIRCIR
27+
MLIRCIRInterfaces
28+
)
29+
30+
mlir_target_link_libraries(MLIRCIRTransforms PUBLIC
2631
MLIRAnalysis
2732
MLIRIR
2833
MLIRPass
2934
MLIRTransformUtils
30-
31-
MLIRCIR
32-
MLIRCIRInterfaces
3335
)

clang/lib/CIR/Dialect/Transforms/TargetLowering/CMakeLists.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@ add_clang_library(TargetLowering
2828
LINK_LIBS PUBLIC
2929

3030
clangBasic
31+
MLIRCIR
32+
MLIRCIRInterfaces
33+
)
34+
35+
mlir_target_link_libraries(TargetLowering PUBLIC
3136
MLIRIR
3237
MLIRPass
3338
MLIRDLTIDialect
34-
MLIRCIR
35-
MLIRCIRInterfaces
3639
)

clang/lib/CIR/FrontendAction/CMakeLists.txt

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

66
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
77

8+
set(deps)
9+
if (NOT CLANG_BUILT_STANDALONE)
10+
set(deps
11+
MLIRBuiltinLocationAttributesIncGen
12+
MLIRBuiltinTypeInterfacesIncGen
13+
MLIRFunctionInterfacesIncGen
14+
)
15+
endif()
16+
817
add_clang_library(clangCIRFrontendAction
918
CIRGenAction.cpp
1019

@@ -13,9 +22,7 @@ add_clang_library(clangCIRFrontendAction
1322
MLIRCIRASTAttrInterfacesIncGen
1423
MLIRCIROpInterfacesIncGen
1524
MLIRCIRLoopOpInterfaceIncGen
16-
MLIRBuiltinLocationAttributesIncGen
17-
MLIRBuiltinTypeInterfacesIncGen
18-
MLIRFunctionInterfacesIncGen
25+
${deps}
1926

2027
LINK_LIBS
2128
clangAST
@@ -26,8 +33,11 @@ add_clang_library(clangCIRFrontendAction
2633
clangCIR
2734
clangCIRLoweringDirectToLLVM
2835
clangCIRLoweringThroughMLIR
29-
${dialect_libs}
3036
MLIRCIR
37+
)
38+
39+
mlir_target_link_libraries(clangCIRFrontendAction PUBLIC
40+
${dialect_libs}
3141
MLIRAnalysis
3242
MLIRIR
3343
MLIRParser

clang/lib/CIR/Interfaces/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ add_clang_library(MLIRCIRInterfaces
1313
MLIRCIRFPTypeInterfaceIncGen
1414
MLIRCIRLoopOpInterfaceIncGen
1515
MLIRCIROpInterfacesIncGen
16+
)
1617

17-
LINK_LIBS
18+
mlir_target_link_libraries(clangCIRFrontendAction PUBLIC
1819
${dialect_libs}
1920
MLIRIR
2021
MLIRSupport

clang/lib/CIR/Lowering/CMakeLists.txt

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

66
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
77

8+
set(deps)
9+
if (NOT CLANG_BUILT_STANDALONE)
10+
set(deps
11+
MLIRBuiltinLocationAttributesIncGen
12+
MLIRBuiltinTypeInterfacesIncGen
13+
MLIRFunctionInterfacesIncGen
14+
)
15+
endif()
16+
817
add_clang_library(clangCIRLoweringHelpers
918
LoweringHelpers.cpp
1019

@@ -14,9 +23,7 @@ add_clang_library(clangCIRLoweringHelpers
1423
MLIRCIRASTAttrInterfacesIncGen
1524
MLIRCIROpInterfacesIncGen
1625
MLIRCIRLoopOpInterfaceIncGen
17-
MLIRBuiltinLocationAttributesIncGen
18-
MLIRBuiltinTypeInterfacesIncGen
19-
MLIRFunctionInterfacesIncGen
26+
${deps}
2027

2128
LINK_LIBS
2229
clangAST
@@ -25,8 +32,11 @@ add_clang_library(clangCIRLoweringHelpers
2532
clangLex
2633
clangFrontend
2734
clangCIR
28-
${dialect_libs}
2935
MLIRCIR
36+
)
37+
38+
mlir_target_link_libraries(clangCIRLoweringHelpers PUBLIC
39+
${dialect_libs}
3040
MLIRAnalysis
3141
MLIRBuiltinToLLVMIRTranslation
3242
MLIRLLVMToLLVMIRTranslation

clang/lib/CIR/Lowering/DirectToLLVM/CMakeLists.txt

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

66
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
77

8+
set(deps)
9+
if (NOT CLANG_BUILT_STANDALONE)
10+
set(deps
11+
MLIRBuiltinLocationAttributesIncGen
12+
MLIRBuiltinTypeInterfacesIncGen
13+
MLIRFunctionInterfacesIncGen
14+
)
15+
endif()
16+
817
add_clang_library(clangCIRLoweringDirectToLLVM
918
LowerToLLVMIR.cpp
1019
LowerToLLVM.cpp
@@ -15,9 +24,7 @@ add_clang_library(clangCIRLoweringDirectToLLVM
1524
MLIRCIRASTAttrInterfacesIncGen
1625
MLIRCIROpInterfacesIncGen
1726
MLIRCIRLoopOpInterfaceIncGen
18-
MLIRBuiltinLocationAttributesIncGen
19-
MLIRBuiltinTypeInterfacesIncGen
20-
MLIRFunctionInterfacesIncGen
27+
${deps}
2128

2229
LINK_LIBS
2330
clangAST
@@ -27,8 +34,10 @@ add_clang_library(clangCIRLoweringDirectToLLVM
2734
clangFrontend
2835
clangCIR
2936
clangCIRLoweringHelpers
30-
${dialect_libs}
3137
MLIRCIR
38+
)
39+
mlir_target_link_libraries(clangCIRLoweringDirectToLLVM PUBLIC
40+
${dialect_libs}
3241
MLIRAnalysis
3342
MLIRBuiltinToLLVMIRTranslation
3443
MLIRLLVMToLLVMIRTranslation

clang/lib/CIR/Lowering/ThroughMLIR/CMakeLists.txt

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

66
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
77

8+
set(deps)
9+
if (NOT CLANG_BUILT_STANDALONE)
10+
set(deps
11+
MLIRBuiltinLocationAttributesIncGen
12+
MLIRBuiltinTypeInterfacesIncGen
13+
MLIRFunctionInterfacesIncGen
14+
)
15+
endif()
16+
817
add_clang_library(clangCIRLoweringThroughMLIR
918
LowerCIRLoopToSCF.cpp
1019
LowerCIRToMLIR.cpp
@@ -16,9 +25,7 @@ add_clang_library(clangCIRLoweringThroughMLIR
1625
MLIRCIRASTAttrInterfacesIncGen
1726
MLIRCIROpInterfacesIncGen
1827
MLIRCIRLoopOpInterfaceIncGen
19-
MLIRBuiltinLocationAttributesIncGen
20-
MLIRBuiltinTypeInterfacesIncGen
21-
MLIRFunctionInterfacesIncGen
28+
${deps}
2229

2330
LINK_LIBS
2431
clangAST
@@ -28,8 +35,11 @@ add_clang_library(clangCIRLoweringThroughMLIR
2835
clangFrontend
2936
clangCIR
3037
clangCIRLoweringHelpers
31-
${dialect_libs}
3238
MLIRCIR
39+
)
40+
41+
mlir_target_link_libraries(clangCIRLoweringThroughMLIR PUBLIC
42+
${dialect_libs}
3343
MLIRAnalysis
3444
MLIRBuiltinToLLVMIRTranslation
3545
MLIRLLVMToLLVMIRTranslation

clang/lib/FrontendTool/CMakeLists.txt

+14-7
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@ set(deps)
1717
if(CLANG_ENABLE_CIR)
1818
list(APPEND link_libs
1919
clangCIRFrontendAction
20-
MLIRCIRTransforms
21-
MLIRIR
22-
MLIRPass
23-
)
24-
list(APPEND deps
25-
MLIRBuiltinLocationAttributesIncGen
26-
MLIRBuiltinTypeInterfacesIncGen
2720
)
21+
if(NOT CLANG_BUILT_STANDALONE)
22+
list(APPEND deps
23+
MLIRBuiltinLocationAttributesIncGen
24+
MLIRBuiltinTypeInterfacesIncGen
25+
)
26+
endif()
2827

2928
include_directories(${LLVM_MAIN_SRC_DIR}/../mlir/include)
3029
include_directories(${CMAKE_BINARY_DIR}/tools/mlir/include)
@@ -52,3 +51,11 @@ add_clang_library(clangFrontendTool
5251
LINK_LIBS
5352
${link_libs}
5453
)
54+
55+
if(CLANG_ENABLE_CIR)
56+
mlir_target_link_libraries(clangFrontendTool PUBLIC
57+
MLIRCIRTransforms
58+
MLIRIR
59+
MLIRPass
60+
)
61+
endif()

clang/tools/cir-lsp-server/CMakeLists.txt

+15-6
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@ get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS)
44
include_directories(${LLVM_MAIN_SRC_DIR}/../mlir/include)
55
include_directories(${CMAKE_BINARY_DIR}/tools/mlir/include)
66

7-
set(LIBS
7+
set(MLIR_LIBS
88
${dialect_libs}
99
${conversion_libs}
1010
${test_libs}
11-
clangCIR
12-
clangCIRLoweringThroughMLIR
13-
clangCIRLoweringDirectToLLVM
14-
MLIRCIR
1511
MLIRAffineAnalysis
1612
MLIRAnalysis
1713
MLIRDialect
@@ -24,12 +20,25 @@ set(LIBS
2420
MLIRIR
2521
)
2622

23+
set(LIBS
24+
clangCIR
25+
clangCIRLoweringThroughMLIR
26+
clangCIRLoweringDirectToLLVM
27+
MLIRCIR
28+
)
29+
30+
set(DEPS ${LIBS})
31+
if (NOT CLANG_BUILT_STANDALONE)
32+
list(APPEND DEPS ${MLIR_LIBS})
33+
endif()
34+
2735
add_mlir_tool(cir-lsp-server
2836
cir-lsp-server.cpp
2937

3038
DEPENDS
31-
${LIBS}
39+
${DEPS}
3240
)
3341

3442
target_link_libraries(cir-lsp-server PRIVATE ${LIBS})
43+
mlir_target_link_libraries(cir-lsp-server PRIVATE ${MLIR_LIBS})
3544
llvm_update_compile_flags(cir-lsp-server)

clang/tools/cir-opt/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ clang_target_link_libraries(cir-opt
1717
MLIRCIRTransforms
1818
)
1919

20-
target_link_libraries(cir-opt
20+
mlir_target_link_libraries(cir-opt
2121
PRIVATE
2222
${dialect_libs}
2323
${conversion_libs}

clang/tools/cir-translate/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ clang_target_link_libraries(cir-translate
1717
MLIRCIRTransforms
1818
)
1919

20-
target_link_libraries(cir-translate
20+
mlir_target_link_libraries(cir-translate
2121
PRIVATE
2222
${dialect_libs}
2323
${conversion_libs}

0 commit comments

Comments
 (0)