From 8d56caca18f6e9e03672cc3b40c59cbdfa3f11c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Mon, 23 Dec 2024 14:41:17 +0100 Subject: [PATCH] [flang] Support linking to MLIR dylib 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 9ed1a3050b7e8..b2fcc5e13cf74 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 de6bea396f3cb..4b5df0a49f403 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 0a0482505b747..d063ed36d00b4 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 2acaffbe50380..faf56e9d955a1 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 f57f0e7a77a01..f611010765cb5 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 1358219fd98d5..6fe9c70f83765 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 0960e858c4111..f8faeaa81c90c 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 f47d11875f04d..81c8a68b95367 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 08caa15700d4c..d39dca8ed0000 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 ec5484c1d6108..a0f58504eff05 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 5d4bd0785971f..e483b4a164113 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 c37b0549f7fc1..bfdd5279b6f29 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 267d6469ee7ab..8a646bedf94b8 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 25a532204dd05..09286aced6089 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 ed673121353c1..04d351ac265d6 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 026889cca238a..9fe2d3947c26d 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 40abbdfbdd651..eb25beba309bf 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 8794c24712417..f8e4fc5bcefea 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 d20d3bc4108ce..9c550f983434a 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 9c7887aecafbd..12183f590316d 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 c4b3838c9a23e..cba47a4114517 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 8aa3c7689af4e..e296827ef53be 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 3d92abdc60114..85aeb85e0c530 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 d5445d8f8e99b..6f095e24524b7 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 f0741ca282169..efbde329b8b8c 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 0ac18734be2ce..220f908d2f108 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 22c568af3d121..9177997f41f53 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 )