Skip to content

Commit

Permalink
[flang] Handle Flang examples consistently with LLVM.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
vzakhari committed Mar 14, 2023
1 parent 207ea5f commit 1c5d121
Show file tree
Hide file tree
Showing 12 changed files with 16 additions and 23 deletions.
6 changes: 2 additions & 4 deletions flang/CMakeLists.txt
Expand Up @@ -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)
Expand Down
1 change: 0 additions & 1 deletion flang/cmake/modules/AddFlang.cmake
Expand Up @@ -127,4 +127,3 @@ macro(add_flang_symlink name dest)
# Always generate install targets
llvm_install_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE)
endmacro()

2 changes: 1 addition & 1 deletion flang/docs/FlangDriver.md
Expand Up @@ -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`
Expand Down
4 changes: 0 additions & 4 deletions 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)
10 changes: 5 additions & 5 deletions 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
)
2 changes: 1 addition & 1 deletion flang/examples/FlangOmpReport/CMakeLists.txt
@@ -1,4 +1,4 @@
add_llvm_library(flangOmpReport
add_llvm_example_library(flangOmpReport
MODULE
FlangOmpReport.cpp
FlangOmpReportVisitor.cpp
Expand Down
2 changes: 1 addition & 1 deletion 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

Expand Down
4 changes: 2 additions & 2 deletions flang/test/CMakeLists.txt
Expand Up @@ -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
)
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion 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

Expand Down
2 changes: 1 addition & 1 deletion 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

Expand Down
2 changes: 1 addition & 1 deletion 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

Expand Down
2 changes: 1 addition & 1 deletion flang/test/lit.site.cfg.py.in
Expand Up @@ -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@
Expand Down

0 comments on commit 1c5d121

Please sign in to comment.