From fa15e8ff576362bcf97d32e525a8ca0860469ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 22 Dec 2024 12:09:27 +0100 Subject: [PATCH] [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 10ef20f6a629797d81252de143117e2a0bc6556d, 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. --- clang/CMakeLists.txt | 8 +++---- clang/lib/CIR/CodeGen/CMakeLists.txt | 12 +++++++++-- clang/lib/CIR/Dialect/IR/CMakeLists.txt | 19 ++++++++++++----- .../lib/CIR/Dialect/Transforms/CMakeLists.txt | 8 ++++--- .../Transforms/TargetLowering/CMakeLists.txt | 7 +++++-- clang/lib/CIR/FrontendAction/CMakeLists.txt | 18 ++++++++++++---- clang/lib/CIR/Interfaces/CMakeLists.txt | 3 ++- clang/lib/CIR/Lowering/CMakeLists.txt | 18 ++++++++++++---- .../CIR/Lowering/DirectToLLVM/CMakeLists.txt | 17 +++++++++++---- .../CIR/Lowering/ThroughMLIR/CMakeLists.txt | 18 ++++++++++++---- clang/lib/FrontendTool/CMakeLists.txt | 21 ++++++++++++------- clang/tools/cir-lsp-server/CMakeLists.txt | 21 +++++++++++++------ clang/tools/cir-opt/CMakeLists.txt | 2 +- clang/tools/cir-translate/CMakeLists.txt | 2 +- 14 files changed, 126 insertions(+), 48 deletions(-) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 27e8095534a6..1ecb6b254493 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -168,10 +168,10 @@ endif() if(CLANG_ENABLE_CIR) if (CLANG_BUILT_STANDALONE) - message(FATAL_ERROR - "ClangIR is not yet supported in the standalone build.") - endif() - if (NOT "${LLVM_ENABLE_PROJECTS}" MATCHES "MLIR|mlir") + find_package(MLIR REQUIRED) + list(APPEND CMAKE_MODULE_PATH "${MLIR_DIR}") + include(AddMLIR) + elseif (NOT "${LLVM_ENABLE_PROJECTS}" MATCHES "MLIR|mlir") message(FATAL_ERROR "Cannot build ClangIR without MLIR in LLVM_ENABLE_PROJECTS") endif() diff --git a/clang/lib/CIR/CodeGen/CMakeLists.txt b/clang/lib/CIR/CodeGen/CMakeLists.txt index 02ac813ef732..a6f5dec174de 100644 --- a/clang/lib/CIR/CodeGen/CMakeLists.txt +++ b/clang/lib/CIR/CodeGen/CMakeLists.txt @@ -6,6 +6,11 @@ set( get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) +set(deps) +if (NOT CLANG_BUILT_STANDALONE) + set(deps ${dialect_libs}) +endif() + add_clang_library(clangCIR CIRAsm.cpp CIRGenAtomic.cpp @@ -52,16 +57,19 @@ add_clang_library(clangCIR MLIRCIRASTAttrInterfacesIncGen MLIRCIROpInterfacesIncGen MLIRCIRLoopOpInterfaceIncGen - ${dialect_libs} + ${deps} LINK_LIBS clangAST clangBasic clangLex - ${dialect_libs} MLIRCIR MLIRCIRTransforms MLIRCIRInterfaces +) + +mlir_target_link_libraries(clangCIR PUBLIC + ${dialect_libs} MLIRAffineToStandard MLIRAnalysis MLIRDLTIDialect diff --git a/clang/lib/CIR/Dialect/IR/CMakeLists.txt b/clang/lib/CIR/Dialect/IR/CMakeLists.txt index 34e2f642cefe..1bab15305716 100644 --- a/clang/lib/CIR/Dialect/IR/CMakeLists.txt +++ b/clang/lib/CIR/Dialect/IR/CMakeLists.txt @@ -1,3 +1,11 @@ +set(deps) +if (NOT CLANG_BUILT_STANDALONE) + set(deps + MLIRBuiltinLocationAttributesIncGen + MLIRSymbolInterfacesIncGen + ) +endif() + add_clang_library(MLIRCIR CIRAttrs.cpp CIROpenCLAttrs.cpp @@ -8,15 +16,18 @@ add_clang_library(MLIRCIR FPEnv.cpp DEPENDS - MLIRBuiltinLocationAttributesIncGen + ${deps} MLIRCIROpsIncGen MLIRCIREnumsGen - MLIRSymbolInterfacesIncGen MLIRCIRASTAttrInterfacesIncGen MLIRCIROpInterfacesIncGen MLIRCIRLoopOpInterfaceIncGen LINK_LIBS PUBLIC + clangAST + ) + +mlir_target_link_libraries(MLIRCIR PUBLIC MLIRIR MLIRCIRInterfaces MLIRDLTIDialect @@ -24,6 +35,4 @@ add_clang_library(MLIRCIR MLIRFuncDialect MLIRLoopLikeInterface MLIRLLVMDialect - MLIRSideEffectInterfaces - clangAST - ) + MLIRSideEffectInterfaces) diff --git a/clang/lib/CIR/Dialect/Transforms/CMakeLists.txt b/clang/lib/CIR/Dialect/Transforms/CMakeLists.txt index 76ac0cbf1c8d..7917d89b8f04 100644 --- a/clang/lib/CIR/Dialect/Transforms/CMakeLists.txt +++ b/clang/lib/CIR/Dialect/Transforms/CMakeLists.txt @@ -23,11 +23,13 @@ add_clang_library(MLIRCIRTransforms clangBasic TargetLowering + MLIRCIR + MLIRCIRInterfaces +) + +mlir_target_link_libraries(MLIRCIRTransforms PUBLIC MLIRAnalysis MLIRIR MLIRPass MLIRTransformUtils - - MLIRCIR - MLIRCIRInterfaces ) diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/CMakeLists.txt b/clang/lib/CIR/Dialect/Transforms/TargetLowering/CMakeLists.txt index 21bfa30a111a..398d8a62cf9f 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/CMakeLists.txt +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/CMakeLists.txt @@ -28,9 +28,12 @@ add_clang_library(TargetLowering LINK_LIBS PUBLIC clangBasic + MLIRCIR + MLIRCIRInterfaces +) + +mlir_target_link_libraries(TargetLowering PUBLIC MLIRIR MLIRPass MLIRDLTIDialect - MLIRCIR - MLIRCIRInterfaces ) diff --git a/clang/lib/CIR/FrontendAction/CMakeLists.txt b/clang/lib/CIR/FrontendAction/CMakeLists.txt index 077bd733cbd8..5d9def9a319a 100644 --- a/clang/lib/CIR/FrontendAction/CMakeLists.txt +++ b/clang/lib/CIR/FrontendAction/CMakeLists.txt @@ -5,6 +5,15 @@ set(LLVM_LINK_COMPONENTS get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) +set(deps) +if (NOT CLANG_BUILT_STANDALONE) + set(deps + MLIRBuiltinLocationAttributesIncGen + MLIRBuiltinTypeInterfacesIncGen + MLIRFunctionInterfacesIncGen + ) +endif() + add_clang_library(clangCIRFrontendAction CIRGenAction.cpp @@ -13,9 +22,7 @@ add_clang_library(clangCIRFrontendAction MLIRCIRASTAttrInterfacesIncGen MLIRCIROpInterfacesIncGen MLIRCIRLoopOpInterfaceIncGen - MLIRBuiltinLocationAttributesIncGen - MLIRBuiltinTypeInterfacesIncGen - MLIRFunctionInterfacesIncGen + ${deps} LINK_LIBS clangAST @@ -26,8 +33,11 @@ add_clang_library(clangCIRFrontendAction clangCIR clangCIRLoweringDirectToLLVM clangCIRLoweringThroughMLIR - ${dialect_libs} MLIRCIR + ) + +mlir_target_link_libraries(clangCIRFrontendAction PUBLIC + ${dialect_libs} MLIRAnalysis MLIRIR MLIRParser diff --git a/clang/lib/CIR/Interfaces/CMakeLists.txt b/clang/lib/CIR/Interfaces/CMakeLists.txt index dee0a1408250..83a414f64bf6 100644 --- a/clang/lib/CIR/Interfaces/CMakeLists.txt +++ b/clang/lib/CIR/Interfaces/CMakeLists.txt @@ -13,8 +13,9 @@ add_clang_library(MLIRCIRInterfaces MLIRCIRFPTypeInterfaceIncGen MLIRCIRLoopOpInterfaceIncGen MLIRCIROpInterfacesIncGen + ) - LINK_LIBS +mlir_target_link_libraries(clangCIRFrontendAction PUBLIC ${dialect_libs} MLIRIR MLIRSupport diff --git a/clang/lib/CIR/Lowering/CMakeLists.txt b/clang/lib/CIR/Lowering/CMakeLists.txt index e34884ce21bd..79f517032b09 100644 --- a/clang/lib/CIR/Lowering/CMakeLists.txt +++ b/clang/lib/CIR/Lowering/CMakeLists.txt @@ -5,6 +5,15 @@ set(LLVM_LINK_COMPONENTS get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) +set(deps) +if (NOT CLANG_BUILT_STANDALONE) + set(deps + MLIRBuiltinLocationAttributesIncGen + MLIRBuiltinTypeInterfacesIncGen + MLIRFunctionInterfacesIncGen + ) +endif() + add_clang_library(clangCIRLoweringHelpers LoweringHelpers.cpp @@ -14,9 +23,7 @@ add_clang_library(clangCIRLoweringHelpers MLIRCIRASTAttrInterfacesIncGen MLIRCIROpInterfacesIncGen MLIRCIRLoopOpInterfaceIncGen - MLIRBuiltinLocationAttributesIncGen - MLIRBuiltinTypeInterfacesIncGen - MLIRFunctionInterfacesIncGen + ${deps} LINK_LIBS clangAST @@ -25,8 +32,11 @@ add_clang_library(clangCIRLoweringHelpers clangLex clangFrontend clangCIR - ${dialect_libs} MLIRCIR + ) + +mlir_target_link_libraries(clangCIRLoweringHelpers PUBLIC + ${dialect_libs} MLIRAnalysis MLIRBuiltinToLLVMIRTranslation MLIRLLVMToLLVMIRTranslation diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/CMakeLists.txt b/clang/lib/CIR/Lowering/DirectToLLVM/CMakeLists.txt index df89f6b2a7b7..cdd467a53928 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/CMakeLists.txt +++ b/clang/lib/CIR/Lowering/DirectToLLVM/CMakeLists.txt @@ -5,6 +5,15 @@ set(LLVM_LINK_COMPONENTS get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) +set(deps) +if (NOT CLANG_BUILT_STANDALONE) + set(deps + MLIRBuiltinLocationAttributesIncGen + MLIRBuiltinTypeInterfacesIncGen + MLIRFunctionInterfacesIncGen + ) +endif() + add_clang_library(clangCIRLoweringDirectToLLVM LowerToLLVMIR.cpp LowerToLLVM.cpp @@ -15,9 +24,7 @@ add_clang_library(clangCIRLoweringDirectToLLVM MLIRCIRASTAttrInterfacesIncGen MLIRCIROpInterfacesIncGen MLIRCIRLoopOpInterfaceIncGen - MLIRBuiltinLocationAttributesIncGen - MLIRBuiltinTypeInterfacesIncGen - MLIRFunctionInterfacesIncGen + ${deps} LINK_LIBS clangAST @@ -27,8 +34,10 @@ add_clang_library(clangCIRLoweringDirectToLLVM clangFrontend clangCIR clangCIRLoweringHelpers - ${dialect_libs} MLIRCIR + ) +mlir_target_link_libraries(clangCIRLoweringDirectToLLVM PUBLIC + ${dialect_libs} MLIRAnalysis MLIRBuiltinToLLVMIRTranslation MLIRLLVMToLLVMIRTranslation diff --git a/clang/lib/CIR/Lowering/ThroughMLIR/CMakeLists.txt b/clang/lib/CIR/Lowering/ThroughMLIR/CMakeLists.txt index 33a74b9ddf8b..0d795dc324eb 100644 --- a/clang/lib/CIR/Lowering/ThroughMLIR/CMakeLists.txt +++ b/clang/lib/CIR/Lowering/ThroughMLIR/CMakeLists.txt @@ -5,6 +5,15 @@ set(LLVM_LINK_COMPONENTS get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) +set(deps) +if (NOT CLANG_BUILT_STANDALONE) + set(deps + MLIRBuiltinLocationAttributesIncGen + MLIRBuiltinTypeInterfacesIncGen + MLIRFunctionInterfacesIncGen + ) +endif() + add_clang_library(clangCIRLoweringThroughMLIR LowerCIRLoopToSCF.cpp LowerCIRToMLIR.cpp @@ -16,9 +25,7 @@ add_clang_library(clangCIRLoweringThroughMLIR MLIRCIRASTAttrInterfacesIncGen MLIRCIROpInterfacesIncGen MLIRCIRLoopOpInterfaceIncGen - MLIRBuiltinLocationAttributesIncGen - MLIRBuiltinTypeInterfacesIncGen - MLIRFunctionInterfacesIncGen + ${deps} LINK_LIBS clangAST @@ -28,8 +35,11 @@ add_clang_library(clangCIRLoweringThroughMLIR clangFrontend clangCIR clangCIRLoweringHelpers - ${dialect_libs} MLIRCIR + ) + +mlir_target_link_libraries(clangCIRLoweringThroughMLIR PUBLIC + ${dialect_libs} MLIRAnalysis MLIRBuiltinToLLVMIRTranslation MLIRLLVMToLLVMIRTranslation diff --git a/clang/lib/FrontendTool/CMakeLists.txt b/clang/lib/FrontendTool/CMakeLists.txt index 6dae1455010c..f37f26d19252 100644 --- a/clang/lib/FrontendTool/CMakeLists.txt +++ b/clang/lib/FrontendTool/CMakeLists.txt @@ -17,14 +17,13 @@ set(deps) if(CLANG_ENABLE_CIR) list(APPEND link_libs clangCIRFrontendAction - MLIRCIRTransforms - MLIRIR - MLIRPass - ) - list(APPEND deps - MLIRBuiltinLocationAttributesIncGen - MLIRBuiltinTypeInterfacesIncGen ) + if(NOT CLANG_BUILT_STANDALONE) + list(APPEND deps + MLIRBuiltinLocationAttributesIncGen + MLIRBuiltinTypeInterfacesIncGen + ) + endif() include_directories(${LLVM_MAIN_SRC_DIR}/../mlir/include) include_directories(${CMAKE_BINARY_DIR}/tools/mlir/include) @@ -52,3 +51,11 @@ add_clang_library(clangFrontendTool LINK_LIBS ${link_libs} ) + +if(CLANG_ENABLE_CIR) + mlir_target_link_libraries(clangFrontendTool PUBLIC + MLIRCIRTransforms + MLIRIR + MLIRPass + ) +endif() diff --git a/clang/tools/cir-lsp-server/CMakeLists.txt b/clang/tools/cir-lsp-server/CMakeLists.txt index 5154a08e7d47..6ad9ba0d944b 100644 --- a/clang/tools/cir-lsp-server/CMakeLists.txt +++ b/clang/tools/cir-lsp-server/CMakeLists.txt @@ -4,14 +4,10 @@ get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) include_directories(${LLVM_MAIN_SRC_DIR}/../mlir/include) include_directories(${CMAKE_BINARY_DIR}/tools/mlir/include) -set(LIBS +set(MLIR_LIBS ${dialect_libs} ${conversion_libs} ${test_libs} - clangCIR - clangCIRLoweringThroughMLIR - clangCIRLoweringDirectToLLVM - MLIRCIR MLIRAffineAnalysis MLIRAnalysis MLIRDialect @@ -24,12 +20,25 @@ set(LIBS MLIRIR ) +set(LIBS + clangCIR + clangCIRLoweringThroughMLIR + clangCIRLoweringDirectToLLVM + MLIRCIR + ) + +set(DEPS ${LIBS}) +if (NOT CLANG_BUILT_STANDALONE) + list(APPEND DEPS ${MLIR_LIBS}) +endif() + add_mlir_tool(cir-lsp-server cir-lsp-server.cpp DEPENDS - ${LIBS} + ${DEPS} ) target_link_libraries(cir-lsp-server PRIVATE ${LIBS}) +mlir_target_link_libraries(cir-lsp-server PRIVATE ${MLIR_LIBS}) llvm_update_compile_flags(cir-lsp-server) diff --git a/clang/tools/cir-opt/CMakeLists.txt b/clang/tools/cir-opt/CMakeLists.txt index 900697ffe8e4..9e171569b1ad 100644 --- a/clang/tools/cir-opt/CMakeLists.txt +++ b/clang/tools/cir-opt/CMakeLists.txt @@ -17,7 +17,7 @@ clang_target_link_libraries(cir-opt MLIRCIRTransforms ) -target_link_libraries(cir-opt +mlir_target_link_libraries(cir-opt PRIVATE ${dialect_libs} ${conversion_libs} diff --git a/clang/tools/cir-translate/CMakeLists.txt b/clang/tools/cir-translate/CMakeLists.txt index 21834799ea82..cd161b1e9f8d 100644 --- a/clang/tools/cir-translate/CMakeLists.txt +++ b/clang/tools/cir-translate/CMakeLists.txt @@ -17,7 +17,7 @@ clang_target_link_libraries(cir-translate MLIRCIRTransforms ) -target_link_libraries(cir-translate +mlir_target_link_libraries(cir-translate PRIVATE ${dialect_libs} ${conversion_libs}