[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
This commit is contained in:
Slava Zakharin 2023-03-13 14:50:13 -07:00
parent 207ea5f2e4
commit 1c5d121440
12 changed files with 16 additions and 23 deletions

View file

@ -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)

View file

@ -127,4 +127,3 @@ macro(add_flang_symlink name dest)
# Always generate install targets
llvm_install_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE)
endmacro()

View file

@ -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`

View file

@ -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)

View file

@ -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
)

View file

@ -1,4 +1,4 @@
add_llvm_library(flangOmpReport
add_llvm_example_library(flangOmpReport
MODULE
FlangOmpReport.cpp
FlangOmpReportVisitor.cpp

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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@