From 1c5d12144058b4cfc3028401e8a16df933ff4dc6 Mon Sep 17 00:00:00 2001 From: Slava Zakharin Date: Mon, 13 Mar 2023 14:50:13 -0700 Subject: [PATCH] [flang] Handle Flang examples consistently with LLVM. Without this change the problem is that flangOmpReport and flangPrintFunctionNames libraries are not built under 'all', but they are imported targets via LLVMExports.cmake so that any out-of-tree build that configures upon LLVM+Flang package will get this CMake error: ``` The imported target "flangPrintFunctionNames" references the file ".../lib/flangPrintFunctionNames.so" but this file does not exist. ``` flang-aarch64-out-of-tree buildbot (https://lab.llvm.org/buildbot/#/builders/175) does not catch this issue, because it does not enable Flang on the first stage. This change gets rid of FLANG_BUILD_EXAMPLES in favor of LLVM_BUILD_EXAMPLES and uses available LLVM CMake macros to add example executables/libraries. Differential Revision: https://reviews.llvm.org/D145992 --- flang/CMakeLists.txt | 6 ++---- flang/cmake/modules/AddFlang.cmake | 1 - flang/docs/FlangDriver.md | 2 +- flang/examples/CMakeLists.txt | 4 ---- flang/examples/ExternalHelloWorld/CMakeLists.txt | 10 +++++----- flang/examples/FlangOmpReport/CMakeLists.txt | 2 +- flang/examples/PrintFlangFunctionNames/CMakeLists.txt | 2 +- flang/test/CMakeLists.txt | 4 ++-- flang/test/Examples/print-fns-calls.f90 | 2 +- flang/test/Examples/print-fns-definitions.f90 | 2 +- flang/test/Examples/print-fns-interfaces.f90 | 2 +- flang/test/lit.site.cfg.py.in | 2 +- 12 files changed, 16 insertions(+), 23 deletions(-) diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index b048ea2..9be6cd7 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -430,11 +430,9 @@ if (FLANG_BUILD_TOOLS) endif() add_subdirectory(runtime) -option(FLANG_BUILD_EXAMPLES "Build Flang example programs by default." OFF) -if (FLANG_BUILD_EXAMPLES AND FLANG_STANDALONE_BUILD) - message(FATAL_ERROR "Examples are not supported in out-of-tree builds.") +if (LLVM_INCLUDE_EXAMPLES) + add_subdirectory(examples) endif() -add_subdirectory(examples) if (FLANG_INCLUDE_TESTS) add_subdirectory(test) diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake index c54c30d..4332eb8 100644 --- a/flang/cmake/modules/AddFlang.cmake +++ b/flang/cmake/modules/AddFlang.cmake @@ -127,4 +127,3 @@ macro(add_flang_symlink name dest) # Always generate install targets llvm_install_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE) endmacro() - diff --git a/flang/docs/FlangDriver.md b/flang/docs/FlangDriver.md index e87df93..6c2a473 100644 --- a/flang/docs/FlangDriver.md +++ b/flang/docs/FlangDriver.md @@ -485,7 +485,7 @@ reports an error diagnostic and returns `nullptr`. For in-tree plugins, there is the CMake flag `FLANG_PLUGIN_SUPPORT`, enabled by default, that controls the exporting of executable symbols from `flang-new`, which plugins need access to. Additionally, there is the CMake flag -`FLANG_BUILD_EXAMPLES`, turned off by default, that is used to control if the +`LLVM_BUILD_EXAMPLES`, turned off by default, that is used to control if the example programs are built. This includes plugins that are in the `flang/example` directory and added as a `sub_directory` to the `flang/examples/CMakeLists.txt`, for example, the `PrintFlangFunctionNames` diff --git a/flang/examples/CMakeLists.txt b/flang/examples/CMakeLists.txt index e1a309f..23fea39 100644 --- a/flang/examples/CMakeLists.txt +++ b/flang/examples/CMakeLists.txt @@ -1,7 +1,3 @@ -if(NOT FLANG_BUILD_EXAMPLES) - set_property(DIRECTORY PROPERTY EXCLUDE_FROM_ALL ON) -endif() - add_subdirectory(ExternalHelloWorld) add_subdirectory(PrintFlangFunctionNames) add_subdirectory(FlangOmpReport) diff --git a/flang/examples/ExternalHelloWorld/CMakeLists.txt b/flang/examples/ExternalHelloWorld/CMakeLists.txt index 3ca9fed..ec4a4b0 100644 --- a/flang/examples/ExternalHelloWorld/CMakeLists.txt +++ b/flang/examples/ExternalHelloWorld/CMakeLists.txt @@ -1,8 +1,8 @@ +set(LLVM_LINK_COMPONENTS + FortranRuntime + ) + # This test is not run by default as it requires input. -add_executable(external-hello-world +add_llvm_example(external-hello-world external-hello.cpp ) - -target_link_libraries(external-hello-world - FortranRuntime -) diff --git a/flang/examples/FlangOmpReport/CMakeLists.txt b/flang/examples/FlangOmpReport/CMakeLists.txt index ab39b2c..bd5172a 100644 --- a/flang/examples/FlangOmpReport/CMakeLists.txt +++ b/flang/examples/FlangOmpReport/CMakeLists.txt @@ -1,4 +1,4 @@ -add_llvm_library(flangOmpReport +add_llvm_example_library(flangOmpReport MODULE FlangOmpReport.cpp FlangOmpReportVisitor.cpp diff --git a/flang/examples/PrintFlangFunctionNames/CMakeLists.txt b/flang/examples/PrintFlangFunctionNames/CMakeLists.txt index 7ba91fa..db20b5e 100644 --- a/flang/examples/PrintFlangFunctionNames/CMakeLists.txt +++ b/flang/examples/PrintFlangFunctionNames/CMakeLists.txt @@ -1,6 +1,6 @@ # TODO: Note that this is currently only available on Linux. # On Windows, we would also have to specify e.g. `PLUGIN_TOOL`. -add_llvm_library(flangPrintFunctionNames +add_llvm_example_library(flangPrintFunctionNames MODULE PrintFlangFunctionNames.cpp diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt index 3252ff3..d04b69dc 100644 --- a/flang/test/CMakeLists.txt +++ b/flang/test/CMakeLists.txt @@ -3,8 +3,8 @@ add_subdirectory(lib) llvm_canonicalize_cmake_booleans( - FLANG_BUILD_EXAMPLES FLANG_STANDALONE_BUILD + LLVM_BUILD_EXAMPLES LLVM_BYE_LINK_INTO_TOOLS LLVM_ENABLE_PLUGINS ) @@ -74,7 +74,7 @@ if (FLANG_INCLUDE_TESTS) endif() endif() -if (FLANG_BUILD_EXAMPLES) +if (LLVM_BUILD_EXAMPLES) list(APPEND FLANG_TEST_DEPENDS flangPrintFunctionNames flangOmpReport diff --git a/flang/test/Examples/print-fns-calls.f90 b/flang/test/Examples/print-fns-calls.f90 index 426de00..f45a093 100644 --- a/flang/test/Examples/print-fns-calls.f90 +++ b/flang/test/Examples/print-fns-calls.f90 @@ -1,5 +1,5 @@ ! Check the Flang Print Function Names example plugin doesn't count/print function/subroutine calls (should only count definitions) -! This requires that the examples are built (FLANG_BUILD_EXAMPLES=ON) to access flangPrintFunctionNames.so +! This requires that the examples are built (LLVM_BUILD_EXAMPLES=ON) to access flangPrintFunctionNames.so ! REQUIRES: plugins, examples, shell diff --git a/flang/test/Examples/print-fns-definitions.f90 b/flang/test/Examples/print-fns-definitions.f90 index 98b8e64..a1f342a 100644 --- a/flang/test/Examples/print-fns-definitions.f90 +++ b/flang/test/Examples/print-fns-definitions.f90 @@ -1,6 +1,6 @@ ! Check the Flang Print Function Names example plugin prints and counts function/subroutine definitions ! This includes internal and external Function/Subroutines, but not Statement Functions -! This requires that the examples are built (FLANG_BUILD_EXAMPLES=ON) to access flangPrintFunctionNames.so +! This requires that the examples are built (LLVM_BUILD_EXAMPLES=ON) to access flangPrintFunctionNames.so ! REQUIRES: plugins, examples, shell diff --git a/flang/test/Examples/print-fns-interfaces.f90 b/flang/test/Examples/print-fns-interfaces.f90 index 0813fd4..c1e2f34 100644 --- a/flang/test/Examples/print-fns-interfaces.f90 +++ b/flang/test/Examples/print-fns-interfaces.f90 @@ -1,6 +1,6 @@ ! Check the Flang Print Function Names example plugin doesn't count/print Functions/Subroutines in interfaces ! (It should only count definitions, which will appear elsewhere for interfaced functions/subroutines) -! This requires that the examples are built (FLANG_BUILD_EXAMPLES=ON) to access flangPrintFunctionNames.so +! This requires that the examples are built (LLVM_BUILD_EXAMPLES=ON) to access flangPrintFunctionNames.so ! REQUIRES: plugins, examples, shell diff --git a/flang/test/lit.site.cfg.py.in b/flang/test/lit.site.cfg.py.in index dbd8435..46ba53e 100644 --- a/flang/test/lit.site.cfg.py.in +++ b/flang/test/lit.site.cfg.py.in @@ -16,7 +16,7 @@ config.flang_intrinsic_modules_dir = "@FLANG_INTRINSIC_MODULES_DIR@" config.flang_llvm_tools_dir = "@CMAKE_BINARY_DIR@/bin" config.flang_lib_dir = "@CMAKE_BINARY_DIR@/lib" config.flang_test_triple = "@FLANG_TEST_TARGET_TRIPLE@" -config.flang_examples = @FLANG_BUILD_EXAMPLES@ +config.flang_examples = @LLVM_BUILD_EXAMPLES@ config.python_executable = "@PYTHON_EXECUTABLE@" config.flang_standalone_build = @FLANG_STANDALONE_BUILD@ config.has_plugins = @LLVM_ENABLE_PLUGINS@ -- 2.7.4