From 7770d8ed9c1db9bd9c65c1221f39c02ac999a50d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sat, 8 Feb 2025 21:04:14 +0100 Subject: [PATCH 1/4] [flang] Skip MLIR target dependencies in standalone builds Add a new `MLIR_DEPS` argument group to `flang_add_library()`, and move MLIR-specific dependencies to that group. These dependencies are added as usual in regular builds, and are skipped in standalone builds, since MLIR targets are not visible there (and were already built and installed). With this change, it is possible to perform a standalone build of Flang ith `-DFLANG_INCLUDE_TESTS=OFF`. I will address tests separately. --- flang/cmake/modules/AddFlang.cmake | 5 ++++- flang/lib/Frontend/CMakeLists.txt | 8 +++++--- flang/lib/Lower/CMakeLists.txt | 6 ++++-- flang/lib/Optimizer/Analysis/CMakeLists.txt | 6 ++++-- flang/lib/Optimizer/Builder/CMakeLists.txt | 6 ++++-- flang/lib/Optimizer/Dialect/CMakeLists.txt | 4 +++- flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt | 4 +++- flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt | 4 +++- flang/lib/Optimizer/Dialect/Support/CMakeLists.txt | 4 +++- flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt | 4 +++- flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt | 4 +++- flang/lib/Optimizer/OpenACC/CMakeLists.txt | 4 +++- flang/lib/Optimizer/OpenMP/CMakeLists.txt | 4 +++- flang/lib/Optimizer/Support/CMakeLists.txt | 8 +++++--- flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt | 4 +++- 15 files changed, 53 insertions(+), 22 deletions(-) diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake index 1f178772067ed..7406586c5168e 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 MLIR_LIBS) + set(multiValueArgs ADDITIONAL_HEADERS CLANG_LIBS MLIR_LIBS MLIR_DEPS) cmake_parse_arguments(ARG "${options}" "" @@ -69,6 +69,9 @@ function(add_flang_library name) if (ARG_MLIR_LIBS) mlir_target_link_libraries(${name} PRIVATE ${ARG_MLIR_LIBS}) endif() + if (ARG_MLIR_DEPS AND NOT FLANG_STANDALONE_BUILD) + add_dependencies(${name} ${ARG_MLIR_DEPS}) + endif() if (TARGET ${name}) diff --git a/flang/lib/Frontend/CMakeLists.txt b/flang/lib/Frontend/CMakeLists.txt index 81eef2d468d8c..80d63fca6fb76 100644 --- a/flang/lib/Frontend/CMakeLists.txt +++ b/flang/lib/Frontend/CMakeLists.txt @@ -18,9 +18,6 @@ add_flang_library(flangFrontend FIROptCodeGenPassIncGen FIROptTransformsPassIncGen HLFIRDialect - MLIRIR - ${dialect_libs} - ${extension_libs} LINK_LIBS CUFDialect @@ -56,6 +53,11 @@ add_flang_library(flangFrontend FrontendOpenACC FrontendOpenMP + MLIR_DEPS + MLIRIR + ${dialect_libs} + ${extension_libs} + MLIR_LIBS MLIRTransforms MLIRBuiltinToLLVMIRTranslation diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt index c9b249781552e..87dc2a052796a 100644 --- a/flang/lib/Lower/CMakeLists.txt +++ b/flang/lib/Lower/CMakeLists.txt @@ -44,8 +44,6 @@ add_flang_library(FortranLower FIRDialect FIRTransforms HLFIRDialect - ${dialect_libs} - ${extension_libs} LINK_LIBS CUFAttrs @@ -64,6 +62,10 @@ add_flang_library(FortranLower LINK_COMPONENTS Support + MLIR_DEPS + ${dialect_libs} + ${extension_libs} + MLIR_LIBS ${dialect_libs} ${extension_libs} diff --git a/flang/lib/Optimizer/Analysis/CMakeLists.txt b/flang/lib/Optimizer/Analysis/CMakeLists.txt index c4dae898f8e57..4d4ad882c27d3 100644 --- a/flang/lib/Optimizer/Analysis/CMakeLists.txt +++ b/flang/lib/Optimizer/Analysis/CMakeLists.txt @@ -6,8 +6,6 @@ add_flang_library(FIRAnalysis FIRDialect FIRSupport HLFIRDialect - MLIRIR - MLIROpenMPDialect LINK_LIBS FIRBuilder @@ -15,6 +13,10 @@ add_flang_library(FIRAnalysis FIRSupport HLFIRDialect + MLIR_DEPS + MLIRIR + MLIROpenMPDialect + MLIR_LIBS MLIRFuncDialect MLIRLLVMDialect diff --git a/flang/lib/Optimizer/Builder/CMakeLists.txt b/flang/lib/Optimizer/Builder/CMakeLists.txt index f8faeaa81c90c..f0563d092e3dc 100644 --- a/flang/lib/Optimizer/Builder/CMakeLists.txt +++ b/flang/lib/Optimizer/Builder/CMakeLists.txt @@ -40,8 +40,6 @@ add_flang_library(FIRBuilder CUFDialect FIRDialect HLFIRDialect - ${dialect_libs} - ${extension_libs} LINK_LIBS CUFAttrs @@ -52,6 +50,10 @@ add_flang_library(FIRBuilder FortranEvaluate HLFIRDialect + MLIR_DEPS + ${dialect_libs} + ${extension_libs} + MLIR_LIBS ${dialect_libs} ${extension_libs} diff --git a/flang/lib/Optimizer/Dialect/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CMakeLists.txt index d39dca8ed0000..61f9c6110491e 100644 --- a/flang/lib/Optimizer/Dialect/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/CMakeLists.txt @@ -12,7 +12,6 @@ add_flang_library(FIRDialect DEPENDS CanonicalizationPatternsIncGen - MLIRIR FIROpsIncGen CUFAttrsIncGen intrinsics_gen @@ -26,6 +25,9 @@ add_flang_library(FIRDialect AsmPrinter Remarks + MLIR_DEPS + MLIRIR + MLIR_LIBS MLIRArithDialect MLIRBuiltinToLLVMIRTranslation diff --git a/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt index a0f58504eff05..713bd0e97bac3 100644 --- a/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/CUF/Attributes/CMakeLists.txt @@ -3,7 +3,6 @@ add_flang_library(CUFAttrs CUFAttr.cpp DEPENDS - MLIRIR CUFAttrsIncGen CUFOpsIncGen @@ -12,6 +11,9 @@ add_flang_library(CUFAttrs AsmPrinter Remarks + MLIR_DEPS + MLIRIR + MLIR_LIBS MLIRTargetLLVMIRExport ) diff --git a/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt b/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt index e483b4a164113..5b398f2ad506a 100644 --- a/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/CUF/CMakeLists.txt @@ -6,7 +6,6 @@ add_flang_library(CUFDialect CUFToLLVMIRTranslation.cpp DEPENDS - MLIRIR CUFAttrsIncGen CUFOpsIncGen @@ -20,6 +19,9 @@ add_flang_library(CUFDialect AsmPrinter Remarks + MLIR_DEPS + MLIRIR + MLIR_LIBS MLIRIR MLIRGPUDialect diff --git a/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt b/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt index bfdd5279b6f29..a85d9521af1c4 100644 --- a/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt +++ b/flang/lib/Optimizer/Dialect/Support/CMakeLists.txt @@ -5,9 +5,11 @@ add_flang_library(FIRDialectSupport FIRContext.cpp DEPENDS - MLIRIR intrinsics_gen + MLIR_DEPS + MLIRIR + MLIR_LIBS ${dialect_libs} ) diff --git a/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt b/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt index 8a646bedf94b8..99e31a43e01e5 100644 --- a/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt +++ b/flang/lib/Optimizer/HLFIR/IR/CMakeLists.txt @@ -8,7 +8,6 @@ add_flang_library(HLFIRDialect CUFAttrsIncGen FIRDialect HLFIROpsIncGen - ${dialect_libs} LINK_LIBS CUFAttrs @@ -19,6 +18,9 @@ add_flang_library(HLFIRDialect AsmPrinter Remarks + MLIR_DEPS + ${dialect_libs} + MLIR_LIBS MLIRIR ${dialect_libs} diff --git a/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt b/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt index 09286aced6089..7eb3cb4001d5f 100644 --- a/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt +++ b/flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt @@ -15,7 +15,6 @@ add_flang_library(HLFIRTransforms CUFAttrsIncGen FIRDialect HLFIROpsIncGen - ${dialect_libs} LINK_LIBS CUFAttrs @@ -33,6 +32,9 @@ add_flang_library(HLFIRTransforms AsmPrinter Remarks + MLIR_DEPS + ${dialect_libs} + MLIR_LIBS MLIRIR ${dialect_libs} diff --git a/flang/lib/Optimizer/OpenACC/CMakeLists.txt b/flang/lib/Optimizer/OpenACC/CMakeLists.txt index 04d351ac265d6..56f625aa0f441 100644 --- a/flang/lib/Optimizer/OpenACC/CMakeLists.txt +++ b/flang/lib/Optimizer/OpenACC/CMakeLists.txt @@ -10,7 +10,6 @@ add_flang_library(FIROpenACCSupport FIRDialectSupport FIRSupport HLFIRDialect - MLIROpenACCDialect LINK_LIBS FIRBuilder @@ -19,6 +18,9 @@ add_flang_library(FIROpenACCSupport FIRSupport HLFIRDialect + MLIR_DEPS + MLIROpenACCDialect + MLIR_LIBS MLIROpenACCDialect ) diff --git a/flang/lib/Optimizer/OpenMP/CMakeLists.txt b/flang/lib/Optimizer/OpenMP/CMakeLists.txt index 86ae93f3207cc..4a48d6e0936db 100644 --- a/flang/lib/Optimizer/OpenMP/CMakeLists.txt +++ b/flang/lib/Optimizer/OpenMP/CMakeLists.txt @@ -12,7 +12,6 @@ add_flang_library(FlangOpenMPTransforms FIRDialect HLFIROpsIncGen FlangOpenMPPassesIncGen - ${dialect_libs} LINK_LIBS FIRAnalysis @@ -24,6 +23,9 @@ add_flang_library(FlangOpenMPTransforms FortranSupport HLFIRDialect + MLIR_DEPS + ${dialect_libs} + MLIR_LIBS MLIRFuncDialect MLIROpenMPDialect diff --git a/flang/lib/Optimizer/Support/CMakeLists.txt b/flang/lib/Optimizer/Support/CMakeLists.txt index f8e4fc5bcefea..7ccdd4fd9c25c 100644 --- a/flang/lib/Optimizer/Support/CMakeLists.txt +++ b/flang/lib/Optimizer/Support/CMakeLists.txt @@ -10,9 +10,6 @@ add_flang_library(FIRSupport DEPENDS FIROpsIncGen HLFIROpsIncGen - MLIRIR - ${dialect_libs} - ${extension_libs} LINK_LIBS FIRDialect @@ -20,6 +17,11 @@ add_flang_library(FIRSupport LINK_COMPONENTS TargetParser + MLIR_DEPS + MLIRIR + ${dialect_libs} + ${extension_libs} + MLIR_LIBS ${dialect_libs} ${extension_libs} diff --git a/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt b/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt index cba47a4114517..16df2b607ca93 100644 --- a/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt +++ b/flang/test/lib/Analysis/AliasAnalysis/CMakeLists.txt @@ -8,7 +8,6 @@ add_flang_library(FIRTestAnalysis FIRSupport FIRTransforms FIRAnalysis - ${dialect_libs} LINK_LIBS FIRDialect @@ -18,6 +17,9 @@ add_flang_library(FIRTestAnalysis FIRAnalysis MLIRTestAnalysis + MLIR_DEPS + ${dialect_libs} + MLIR_LIBS ${dialect_libs} MLIRFuncDialect From 6a586927bb4db4e60174cfe762f87dca1889a8d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 9 Feb 2025 13:53:34 +0100 Subject: [PATCH 2/4] [flang] Skip out-of-flang test dependencies in standalone builds Skip test dependencies on targets from other LLVM projects when performing a standalone build, to fix missing target errors. This patch makes it possible to run CMake with `-DFLANG_INCLUDE_TESTS=ON` when building standalone. --- flang/test/CMakeLists.txt | 22 +++++++++++++--------- flang/test/lib/OpenACC/CMakeLists.txt | 10 ++++++---- flang/unittests/Optimizer/CMakeLists.txt | 8 ++++++-- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt index e398e0786147a..f0d4f54b71092 100644 --- a/flang/test/CMakeLists.txt +++ b/flang/test/CMakeLists.txt @@ -59,26 +59,30 @@ set(FLANG_TEST_PARAMS set(FLANG_TEST_DEPENDS flang - llvm-config - FileCheck - count - not module_files fir-opt tco bbc - llvm-dis - llvm-objdump - llvm-readobj - split-file FortranDecimal ) +if (NOT FLANG_STANDALONE_BUILD) + list(APPEND FLANG_TEST_DEPENDS + llvm-config + FileCheck + count + not + llvm-dis + llvm-objdump + llvm-readobj + split-file + ) +endif () if (FLANG_INCLUDE_RUNTIME) list(APPEND FLANG_TEST_DEPENDS FortranRuntime) endif () -if (LLVM_ENABLE_PLUGINS AND NOT WIN32) +if (LLVM_ENABLE_PLUGINS AND NOT WIN32 AND NOT FLANG_STANDALONE_BUILD) list(APPEND FLANG_TEST_DEPENDS Bye) endif() diff --git a/flang/test/lib/OpenACC/CMakeLists.txt b/flang/test/lib/OpenACC/CMakeLists.txt index e296827ef53be..1c0ac748f85e8 100644 --- a/flang/test/lib/OpenACC/CMakeLists.txt +++ b/flang/test/lib/OpenACC/CMakeLists.txt @@ -5,16 +5,18 @@ add_flang_library(FIRTestOpenACCInterfaces FIRDialect FIROpenACCSupport FIRSupport - MLIRIR - MLIROpenACCDialect - MLIRPass - MLIRSupport LINK_LIBS FIRDialect FIROpenACCSupport FIRSupport + MLIR_DEPS + MLIRIR + MLIROpenACCDialect + MLIRPass + MLIRSupport + MLIR_LIBS MLIRIR MLIROpenACCDialect diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt index f535677c19fd2..17782f07c0d03 100644 --- a/flang/unittests/Optimizer/CMakeLists.txt +++ b/flang/unittests/Optimizer/CMakeLists.txt @@ -39,8 +39,12 @@ DEPENDS CUFDialect FIRDialect FIRSupport - HLFIRDialect - ${dialect_libs}) + HLFIRDialect) + +if(NOT FLANG_STANDALONE_BUILD) + add_dependencies(FlangOptimizerTests + ${dialect_libs}) +endif() target_link_libraries(FlangOptimizerTests PRIVATE From f60b95a9dafe17aaed3e3b98c266956b6052de4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 9 Feb 2025 14:07:07 +0100 Subject: [PATCH 3/4] [flang] Fix MLIR_MAIN_SRC_DIR for standalone builds Set `MLIR_MAIN_SRC_DIR` in standalone builds relatively to the current source directory, rather than relying on the value embedded in the installed CMake files. The latter refers to the directory used to build the MLIR package, and is no longer correct after it is installed. --- flang/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index e6de8df5cef15..1fc033a10e628 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -228,6 +228,11 @@ if (FLANG_STANDALONE_BUILD) add_custom_target(doxygen ALL) endif() + # Override the value from installed CMake files, as they refer + # to the directory used during the original MLIR package build, + # which may be no longer available. Instead, use the current checkout. + set(MLIR_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../mlir ) + else() option(FLANG_INCLUDE_TESTS "Generate build targets for the Flang unit tests." From 0bdf09b91ec8051e3ed1f666d9b26832ab72a670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 9 Feb 2025 16:18:00 +0100 Subject: [PATCH 4/4] [flang] Fix linking to LLVM dylib in Optimizer unittests --- flang/unittests/Optimizer/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt index 17782f07c0d03..1289341619118 100644 --- a/flang/unittests/Optimizer/CMakeLists.txt +++ b/flang/unittests/Optimizer/CMakeLists.txt @@ -1,6 +1,10 @@ get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) get_property(extension_libs GLOBAL PROPERTY MLIR_EXTENSION_LIBS) +set(LLVM_LINK_COMPONENTS + TargetParser +) + set(LIBS CUFDialect FIRBuilder @@ -9,7 +13,6 @@ set(LIBS FIRDialectSupport FIRSupport HLFIRDialect - LLVMTargetParser ) add_flang_unittest(FlangOptimizerTests