From 6a2cc122296b04a4f09768a714a74ffc82b7be87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Thu, 16 Jan 2025 14:35:26 +0100 Subject: [PATCH] [flang] Support linking to MLIR dylib (#120966) Introduce a new `MLIR_LIBS` argument to `add_flang_library`, that uses `mlir_target_link_libraries` to link the MLIR dylib alterantively to the component libraries. Use it, along with a few inline `mlir_target_link_libraries` in tools, to support linking Flang to MLIR dylib rather than the static libraries. With these changes, the vast majority of Flang can be linked dynamically. The only parts still using static libraries are these requiring MLIR test libraries, that are not included in the dylib. --- flang/cmake/modules/AddFlang.cmake | 3 ++- flang/lib/Common/CMakeLists.txt | 2 +- flang/lib/Frontend/CMakeLists.txt | 16 +++++++++------- flang/lib/FrontendTool/CMakeLists.txt | 4 +++- flang/lib/Lower/CMakeLists.txt | 12 +++++++----- flang/lib/Optimizer/Analysis/CMakeLists.txt | 2 ++ flang/lib/Optimizer/Builder/CMakeLists.txt | 2 ++ flang/lib/Optimizer/CodeGen/CMakeLists.txt | 14 ++++++++------ flang/lib/Optimizer/Dialect/CMakeLists.txt | 12 +++++++----- .../Dialect/CUF/Attributes/CMakeLists.txt | 6 +++--- flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt | 8 +++++--- .../lib/Optimizer/Dialect/Support/CMakeLists.txt | 2 +- flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt | 6 ++++-- .../Optimizer/HLFIR/Transforms/CMakeLists.txt | 6 ++++-- flang/lib/Optimizer/OpenACC/CMakeLists.txt | 2 ++ flang/lib/Optimizer/OpenMP/CMakeLists.txt | 4 +++- flang/lib/Optimizer/Passes/CMakeLists.txt | 12 +++++++----- flang/lib/Optimizer/Support/CMakeLists.txt | 8 +++++--- flang/lib/Optimizer/Transforms/CMakeLists.txt | 2 ++ flang/lib/Support/CMakeLists.txt | 6 +++--- .../lib/Analysis/AliasAnalysis/CMakeLists.txt | 6 ++++-- flang/test/lib/OpenACC/CMakeLists.txt | 2 ++ flang/tools/bbc/CMakeLists.txt | 3 +++ flang/tools/fir-lsp-server/CMakeLists.txt | 4 +++- flang/tools/fir-opt/CMakeLists.txt | 3 +++ flang/tools/tco/CMakeLists.txt | 3 +++ flang/unittests/Frontend/CMakeLists.txt | 4 ++++ 27 files changed, 102 insertions(+), 52 deletions(-) diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake index 9ed1a3050b7e..b2fcc5e13cf7 100644 --- a/flang/cmake/modules/AddFlang.cmake +++ b/flang/cmake/modules/AddFlang.cmake @@ -18,7 +18,7 @@ endmacro() function(add_flang_library name) set(options SHARED STATIC INSTALL_WITH_TOOLCHAIN) - set(multiValueArgs ADDITIONAL_HEADERS CLANG_LIBS) + set(multiValueArgs ADDITIONAL_HEADERS CLANG_LIBS MLIR_LIBS) cmake_parse_arguments(ARG "${options}" "" @@ -66,6 +66,7 @@ function(add_flang_library name) llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS}) + mlir_target_link_libraries(${name} PRIVATE ${ARG_MLIR_LIBS}) if (TARGET ${name}) diff --git a/flang/lib/Common/CMakeLists.txt b/flang/lib/Common/CMakeLists.txt index de6bea396f3c..4b5df0a49f40 100644 --- a/flang/lib/Common/CMakeLists.txt +++ b/flang/lib/Common/CMakeLists.txt @@ -47,6 +47,6 @@ add_flang_library(FortranCommon LINK_COMPONENTS Support - LINK_LIBS + MLIR_LIBS MLIRIR ) diff --git a/flang/lib/Frontend/CMakeLists.txt b/flang/lib/Frontend/CMakeLists.txt index 0a0482505b74..d063ed36d00b 100644 --- a/flang/lib/Frontend/CMakeLists.txt +++ b/flang/lib/Frontend/CMakeLists.txt @@ -41,13 +41,6 @@ add_flang_library(flangFrontend flangPasses FIROpenACCSupport FlangOpenMPTransforms - MLIRTransforms - MLIRBuiltinToLLVMIRTranslation - MLIRLLVMToLLVMIRTranslation - MLIRSCFToControlFlow - MLIRTargetLLVMIRImport - ${dialect_libs} - ${extension_libs} LINK_COMPONENTS Passes @@ -63,6 +56,15 @@ add_flang_library(flangFrontend FrontendOpenACC FrontendOpenMP + MLIR_LIBS + MLIRTransforms + MLIRBuiltinToLLVMIRTranslation + MLIRLLVMToLLVMIRTranslation + MLIRSCFToControlFlow + MLIRTargetLLVMIRImport + ${dialect_libs} + ${extension_libs} + CLANG_LIBS clangBasic clangDriver diff --git a/flang/lib/FrontendTool/CMakeLists.txt b/flang/lib/FrontendTool/CMakeLists.txt index 2acaffbe5038..faf56e9d955a 100644 --- a/flang/lib/FrontendTool/CMakeLists.txt +++ b/flang/lib/FrontendTool/CMakeLists.txt @@ -8,12 +8,14 @@ add_flang_library(flangFrontendTool LINK_LIBS flangFrontend - MLIRPass LINK_COMPONENTS Option Support + MLIR_LIBS + MLIRPass + CLANG_LIBS clangBasic clangDriver diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt index f57f0e7a77a0..f611010765cb 100644 --- a/flang/lib/Lower/CMakeLists.txt +++ b/flang/lib/Lower/CMakeLists.txt @@ -55,17 +55,19 @@ add_flang_library(FortranLower FIRSupport FIRTransforms HLFIRDialect - ${dialect_libs} - ${extension_libs} FortranCommon FortranParser FortranEvaluate FortranSemantics + + LINK_COMPONENTS + Support + + MLIR_LIBS + ${dialect_libs} + ${extension_libs} MLIRAffineToStandard MLIRFuncDialect MLIRLLVMDialect MLIRSCFToControlFlow - - LINK_COMPONENTS - Support ) diff --git a/flang/lib/Optimizer/Analysis/CMakeLists.txt b/flang/lib/Optimizer/Analysis/CMakeLists.txt index 1358219fd98d..6fe9c70f8376 100644 --- a/flang/lib/Optimizer/Analysis/CMakeLists.txt +++ b/flang/lib/Optimizer/Analysis/CMakeLists.txt @@ -13,6 +13,8 @@ add_flang_library(FIRAnalysis FIRBuilder FIRDialect HLFIRDialect + + MLIR_LIBS MLIRFuncDialect MLIRLLVMDialect MLIRMathTransforms diff --git a/flang/lib/Optimizer/Builder/CMakeLists.txt b/flang/lib/Optimizer/Builder/CMakeLists.txt index 0960e858c411..f8faeaa81c90 100644 --- a/flang/lib/Optimizer/Builder/CMakeLists.txt +++ b/flang/lib/Optimizer/Builder/CMakeLists.txt @@ -51,6 +51,8 @@ add_flang_library(FIRBuilder FIRSupport FortranEvaluate HLFIRDialect + + MLIR_LIBS ${dialect_libs} ${extension_libs} ) diff --git a/flang/lib/Optimizer/CodeGen/CMakeLists.txt b/flang/lib/Optimizer/CodeGen/CMakeLists.txt index f47d11875f04..81c8a68b9536 100644 --- a/flang/lib/Optimizer/CodeGen/CMakeLists.txt +++ b/flang/lib/Optimizer/CodeGen/CMakeLists.txt @@ -21,6 +21,14 @@ add_flang_library(FIRCodeGen FIRDialect FIRDialectSupport FIRSupport + + LINK_COMPONENTS + AsmParser + AsmPrinter + Remarks + TargetParser + + MLIR_LIBS MLIRComplexToLLVM MLIRComplexToStandard MLIRGPUDialect @@ -34,10 +42,4 @@ add_flang_library(FIRCodeGen MLIRLLVMToLLVMIRTranslation MLIRTargetLLVMIRExport MLIRVectorToLLVM - - LINK_COMPONENTS - AsmParser - AsmPrinter - Remarks - TargetParser ) diff --git a/flang/lib/Optimizer/Dialect/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CMakeLists.txt index 08caa15700d4..d39dca8ed000 100644 --- a/flang/lib/Optimizer/Dialect/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/CMakeLists.txt @@ -20,14 +20,16 @@ add_flang_library(FIRDialect LINK_LIBS CUFAttrs FIRDialectSupport - MLIRArithDialect - MLIRBuiltinToLLVMIRTranslation - MLIROpenMPToLLVM - MLIRLLVMToLLVMIRTranslation - MLIRTargetLLVMIRExport LINK_COMPONENTS AsmParser AsmPrinter Remarks + + MLIR_LIBS + MLIRArithDialect + MLIRBuiltinToLLVMIRTranslation + MLIROpenMPToLLVM + MLIRLLVMToLLVMIRTranslation + MLIRTargetLLVMIRExport ) diff --git a/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt index ec5484c1d610..a0f58504eff0 100644 --- a/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt @@ -7,11 +7,11 @@ add_flang_library(CUFAttrs CUFAttrsIncGen CUFOpsIncGen - LINK_LIBS - MLIRTargetLLVMIRExport - LINK_COMPONENTS AsmParser AsmPrinter Remarks + + MLIR_LIBS + MLIRTargetLLVMIRExport ) diff --git a/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt index 5d4bd0785971..e483b4a16411 100644 --- a/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt @@ -14,12 +14,14 @@ add_flang_library(CUFDialect CUFAttrs FIRDialect FIRDialectSupport - MLIRIR - MLIRGPUDialect - MLIRTargetLLVMIRExport LINK_COMPONENTS AsmParser AsmPrinter Remarks + + MLIR_LIBS + MLIRIR + MLIRGPUDialect + MLIRTargetLLVMIRExport ) diff --git a/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt b/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt index c37b0549f7fc..bfdd5279b6f2 100644 --- a/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt @@ -8,6 +8,6 @@ add_flang_library(FIRDialectSupport MLIRIR intrinsics_gen - LINK_LIBS + MLIR_LIBS ${dialect_libs} ) diff --git a/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt b/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt index 267d6469ee7a..8a646bedf94b 100644 --- a/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt +++ b/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt @@ -13,11 +13,13 @@ add_flang_library(HLFIRDialect LINK_LIBS CUFAttrs FIRDialect - MLIRIR - ${dialect_libs} LINK_COMPONENTS AsmParser AsmPrinter Remarks + + MLIR_LIBS + MLIRIR + ${dialect_libs} ) diff --git a/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt b/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt index 25a532204dd0..09286aced608 100644 --- a/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt +++ b/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt @@ -27,11 +27,13 @@ add_flang_library(HLFIRTransforms FIRTransforms FlangOpenMPTransforms HLFIRDialect - MLIRIR - ${dialect_libs} LINK_COMPONENTS AsmParser AsmPrinter Remarks + + MLIR_LIBS + MLIRIR + ${dialect_libs} ) diff --git a/flang/lib/Optimizer/OpenACC/CMakeLists.txt b/flang/lib/Optimizer/OpenACC/CMakeLists.txt index ed673121353c..04d351ac265d 100644 --- a/flang/lib/Optimizer/OpenACC/CMakeLists.txt +++ b/flang/lib/Optimizer/OpenACC/CMakeLists.txt @@ -18,5 +18,7 @@ add_flang_library(FIROpenACCSupport FIRDialectSupport FIRSupport HLFIRDialect + + MLIR_LIBS MLIROpenACCDialect ) diff --git a/flang/lib/Optimizer/OpenMP/CMakeLists.txt b/flang/lib/Optimizer/OpenMP/CMakeLists.txt index 026889cca238..9fe2d3947c26 100644 --- a/flang/lib/Optimizer/OpenMP/CMakeLists.txt +++ b/flang/lib/Optimizer/OpenMP/CMakeLists.txt @@ -23,9 +23,11 @@ add_flang_library(FlangOpenMPTransforms FIRSupport FortranCommon FortranEvaluate + HLFIRDialect + + MLIR_LIBS MLIRFuncDialect MLIROpenMPDialect - HLFIRDialect MLIRIR MLIRPass MLIRTransformUtils diff --git a/flang/lib/Optimizer/Passes/CMakeLists.txt b/flang/lib/Optimizer/Passes/CMakeLists.txt index 40abbdfbdd65..eb25beba309b 100644 --- a/flang/lib/Optimizer/Passes/CMakeLists.txt +++ b/flang/lib/Optimizer/Passes/CMakeLists.txt @@ -12,16 +12,18 @@ add_flang_library(flangPasses FIRCodeGen FIRTransforms FlangOpenMPTransforms - ${dialect_libs} - ${extension_libs} FortranCommon HLFIRTransforms + + LINK_COMPONENTS + Passes + + MLIR_LIBS + ${dialect_libs} + ${extension_libs} MLIRPass MLIRReconcileUnrealizedCasts MLIRSCFToControlFlow MLIRSupport MLIRTransforms - - LINK_COMPONENTS - Passes ) diff --git a/flang/lib/Optimizer/Support/CMakeLists.txt b/flang/lib/Optimizer/Support/CMakeLists.txt index 8794c2471241..f8e4fc5bcefe 100644 --- a/flang/lib/Optimizer/Support/CMakeLists.txt +++ b/flang/lib/Optimizer/Support/CMakeLists.txt @@ -16,6 +16,11 @@ add_flang_library(FIRSupport LINK_LIBS FIRDialect + + LINK_COMPONENTS + TargetParser + + MLIR_LIBS ${dialect_libs} ${extension_libs} MLIRBuiltinToLLVMIRTranslation @@ -24,7 +29,4 @@ add_flang_library(FIRSupport MLIRLLVMToLLVMIRTranslation MLIRTargetLLVMIRExport MLIRTargetLLVMIRImport - - LINK_COMPONENTS - TargetParser ) diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt index d20d3bc4108c..9c550f983434 100644 --- a/flang/lib/Optimizer/Transforms/CMakeLists.txt +++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt @@ -48,6 +48,8 @@ add_flang_library(FIRTransforms FIRSupport FortranCommon HLFIRDialect + + MLIR_LIBS MLIRAffineUtils MLIRFuncDialect MLIRGPUDialect diff --git a/flang/lib/Support/CMakeLists.txt b/flang/lib/Support/CMakeLists.txt index 9c7887aecafb..12183f590316 100644 --- a/flang/lib/Support/CMakeLists.txt +++ b/flang/lib/Support/CMakeLists.txt @@ -1,9 +1,9 @@ add_flang_library(FortranSupport Timing.cpp - LINK_LIBS - MLIRSupport - LINK_COMPONENTS Support + + MLIR_LIBS + MLIRSupport ) diff --git a/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt b/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt index c4b3838c9a23..cba47a411451 100644 --- a/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt +++ b/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt @@ -16,14 +16,16 @@ add_flang_library(FIRTestAnalysis FIRSupport FIRTransforms FIRAnalysis + MLIRTestAnalysis + + MLIR_LIBS ${dialect_libs} MLIRFuncDialect MLIRLLVMDialect MLIRAnalysis - MLIRTestAnalysis ) target_include_directories(FIRTestAnalysis PRIVATE ${MLIR_MAIN_SRC_DIR}/.. - ) \ No newline at end of file + ) diff --git a/flang/test/lib/OpenACC/CMakeLists.txt b/flang/test/lib/OpenACC/CMakeLists.txt index 8aa3c7689af4..e296827ef53b 100644 --- a/flang/test/lib/OpenACC/CMakeLists.txt +++ b/flang/test/lib/OpenACC/CMakeLists.txt @@ -14,6 +14,8 @@ add_flang_library(FIRTestOpenACCInterfaces FIRDialect FIROpenACCSupport FIRSupport + + MLIR_LIBS MLIRIR MLIROpenACCDialect MLIRPass diff --git a/flang/tools/bbc/CMakeLists.txt b/flang/tools/bbc/CMakeLists.txt index 3d92abdc6011..85aeb85e0c53 100644 --- a/flang/tools/bbc/CMakeLists.txt +++ b/flang/tools/bbc/CMakeLists.txt @@ -29,6 +29,9 @@ target_link_libraries(bbc PRIVATE flangFrontend flangPasses FlangOpenMPTransforms +) + +mlir_target_link_libraries(bbc PRIVATE ${dialect_libs} ${extension_libs} MLIRAffineToStandard diff --git a/flang/tools/fir-lsp-server/CMakeLists.txt b/flang/tools/fir-lsp-server/CMakeLists.txt index d5445d8f8e99..6f095e24524b 100644 --- a/flang/tools/fir-lsp-server/CMakeLists.txt +++ b/flang/tools/fir-lsp-server/CMakeLists.txt @@ -12,7 +12,9 @@ target_link_libraries(fir-lsp-server PRIVATE CUFDialect FIRDialect FIROpenACCSupport - HLFIRDialect + HLFIRDialect) + +mlir_target_link_libraries(fir-lsp-server PRIVATE MLIRLspServerLib ${dialect_libs} ${extension_libs}) diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt index f0741ca28216..efbde329b8b8 100644 --- a/flang/tools/fir-opt/CMakeLists.txt +++ b/flang/tools/fir-opt/CMakeLists.txt @@ -24,6 +24,9 @@ target_link_libraries(fir-opt PRIVATE FlangOpenMPTransforms FIRAnalysis ${test_libs} +) + +mlir_target_link_libraries(fir-opt PRIVATE ${dialect_libs} ${extension_libs} diff --git a/flang/tools/tco/CMakeLists.txt b/flang/tools/tco/CMakeLists.txt index 0ac18734be2c..220f908d2f10 100644 --- a/flang/tools/tco/CMakeLists.txt +++ b/flang/tools/tco/CMakeLists.txt @@ -21,6 +21,9 @@ target_link_libraries(tco PRIVATE FIROpenACCSupport FlangOpenMPTransforms FortranCommon +) + +mlir_target_link_libraries(tco PRIVATE ${dialect_libs} ${extension_libs} MLIRIR diff --git a/flang/unittests/Frontend/CMakeLists.txt b/flang/unittests/Frontend/CMakeLists.txt index 22c568af3d12..9177997f41f5 100644 --- a/flang/unittests/Frontend/CMakeLists.txt +++ b/flang/unittests/Frontend/CMakeLists.txt @@ -20,5 +20,9 @@ target_link_libraries(FlangFrontendTests FortranSemantics FortranCommon FortranEvaluate +) + +mlir_target_link_libraries(FlangFrontendTests + PRIVATE MLIRIR )