[Openmp-commits] [llvm] [openmp] [flang-rt][openmp] Add file-level dependencies for builtin mod files (PR #204260)
Michael Kruse via Openmp-commits
openmp-commits at lists.llvm.org
Wed Jun 17 00:19:25 PDT 2026
https://github.com/Meinersbur updated https://github.com/llvm/llvm-project/pull/204260
>From 3957449b9fa945c3c382161160c0f0705d69abf4 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 17 Jun 2026 00:31:53 +0200
Subject: [PATCH 1/3] Make it a file-level dependency
---
flang-rt/lib/runtime/CMakeLists.txt | 36 +++++++++++++++++++++++------
openmp/module/CMakeLists.txt | 6 +++++
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/flang-rt/lib/runtime/CMakeLists.txt b/flang-rt/lib/runtime/CMakeLists.txt
index a956cda31b52d..98100e890b700 100644
--- a/flang-rt/lib/runtime/CMakeLists.txt
+++ b/flang-rt/lib/runtime/CMakeLists.txt
@@ -266,7 +266,7 @@ endif ()
# When a target depends on an object library, CMake seems to try to only build
# the object files that the target actual needs. If we are only interested
-# in the module files, nothing get is built at all. To ensure that the module
+# in the module files, nothing gets built at all. To ensure that the module
# files are built, insert a custom target that is opaque to CMake so it cannot
# apply this optimization. Dependees on module files must depend on this
# barrier instead. An actual COMMAND (that does nothing) seems to be necessary
@@ -291,18 +291,40 @@ if (FLANG_RT_FORTRAN_MODULES)
# to disable this behavior, unfortunately it does not work with Ninja
# (https://gitlab.kitware.com/cmake/cmake/-/issues/26803)
# As a workaround, we build those intrinsic modules first such that the main
- # runtime can depend on it.
- add_flangrt_library(flang_rt.mod.intrinsics OBJECT
- ${intrinsics_sources}
+ # runtime can depend on it. To ensure that modules files are also transitively
+ # updated if a USE'd .mod file changes (a .mod stores the checksums of all
+ # .mod files it depends on and therefore needs to be updated as well), inject
+ # an file-level dependency via OBJECT_DEPENDS.
+
+ add_flangrt_library(flang_rt.mod.fortran.builtins OBJECT
+ __fortran_builtins.f90
+ )
+ flang_module_target(flang_rt.mod.fortran.builtins PUBLIC)
+ add_module_barrier(flang_rt.mod.fortran.builtins.barrier flang_rt.mod.fortran.builtins)
+
+ add_flangrt_library(flang_rt.mod.cuda.builtins OBJECT
+ __cuda_builtins.f90
)
- flang_module_target(flang_rt.mod.intrinsics PUBLIC)
- add_module_barrier(flang_rt.mod.intrinsics.barrier flang_rt.mod.intrinsics)
+ add_dependencies(flang_rt.mod.cuda.builtins flang_rt.mod.fortran.builtins.barrier)
+ set_property(SOURCE __cuda_builtins.f90
+ APPEND PROPERTY OBJECT_DEPENDS
+ "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/flang_rt.mod.builtins.dir/${CMAKE_CFG_INTDIR}/__fortran_builtins.f90${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ )
+ flang_module_target(flang_rt.mod.cuda.builtins PUBLIC)
+ add_module_barrier(flang_rt.mod.cuda.builtins.barrier flang_rt.mod.cuda.builtins)
# The modules themselves
add_flangrt_library(flang_rt.mod OBJECT
${module_sources}
)
- add_dependencies(flang_rt.mod flang_rt.mod.intrinsics.barrier)
+ add_dependencies(flang_rt.mod flang_rt.mod.fortran.builtins.barrier flang_rt.mod.cuda.builtins.barrier)
+ foreach(_srcfile IN LISTS module_sources)
+ set_property(SOURCE ${_srcfile}
+ APPEND PROPERTY OBJECT_DEPENDS
+ "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/flang_rt.mod.builtins.dir/${CMAKE_CFG_INTDIR}/__fortran_builtins.f90${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ )
+ endforeach()
+
flang_module_target(flang_rt.mod PUBLIC)
add_module_barrier(flang-rt-mod flang_rt.mod)
diff --git a/openmp/module/CMakeLists.txt b/openmp/module/CMakeLists.txt
index c4b9554bdffa4..262f5bb47ee72 100644
--- a/openmp/module/CMakeLists.txt
+++ b/openmp/module/CMakeLists.txt
@@ -34,6 +34,12 @@ endif ()
flang_module_target(libomp-mod PUBLIC)
add_dependencies(libomp-mod ${RUNTIMES_FORTRAN_BUILD_DEPS})
+if ("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
+ set_property(SOURCE "${CMAKE_CURRENT_BINARY_DIR}/omp_lib.F90"
+ APPEND PROPERTY OBJECT_DEPENDS
+ "${CMAKE_BINARY_DIR}/flang-rt/lib/runtime/CMakeFiles/flang_rt.mod.builtins.dir/${CMAKE_CFG_INTDIR}/__fortran_builtins.f90${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ )
+endif ()
install(FILES
"${RUNTIMES_OUTPUT_RESOURCE_MOD_DIR}/omp_lib.h"
>From 2bd909aa28fa23bcf758c65f3009dc48fd50fc52 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 17 Jun 2026 01:39:15 +0200
Subject: [PATCH 2/3] Make object file location predictable
---
flang-rt/lib/runtime/CMakeLists.txt | 7 +++++--
openmp/module/CMakeLists.txt | 2 +-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/flang-rt/lib/runtime/CMakeLists.txt b/flang-rt/lib/runtime/CMakeLists.txt
index 98100e890b700..9db7037355498 100644
--- a/flang-rt/lib/runtime/CMakeLists.txt
+++ b/flang-rt/lib/runtime/CMakeLists.txt
@@ -299,16 +299,18 @@ if (FLANG_RT_FORTRAN_MODULES)
add_flangrt_library(flang_rt.mod.fortran.builtins OBJECT
__fortran_builtins.f90
)
+ set_property(SOURCE __fortran_builtins.f90 PROPERTY OBJECT_OUTPUTS "${CMAKE_BINARY_DIR}/modules/${CMAKE_CFG_INTDIR}/__fortran_builtins${CMAKE_Fortran_OUTPUT_EXTENSION}")
flang_module_target(flang_rt.mod.fortran.builtins PUBLIC)
add_module_barrier(flang_rt.mod.fortran.builtins.barrier flang_rt.mod.fortran.builtins)
add_flangrt_library(flang_rt.mod.cuda.builtins OBJECT
__cuda_builtins.f90
)
+ set_property(SOURCE __cuda_builtins.f90 PROPERTY OBJECT_OUTPUTS "${CMAKE_BINARY_DIR}/modules/${CMAKE_CFG_INTDIR}/__cuda_builtins${CMAKE_Fortran_OUTPUT_EXTENSION}")
add_dependencies(flang_rt.mod.cuda.builtins flang_rt.mod.fortran.builtins.barrier)
set_property(SOURCE __cuda_builtins.f90
APPEND PROPERTY OBJECT_DEPENDS
- "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/flang_rt.mod.builtins.dir/${CMAKE_CFG_INTDIR}/__fortran_builtins.f90${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ "${CMAKE_BINARY_DIR}/modules/${CMAKE_CFG_INTDIR}/__fortran_builtins${CMAKE_Fortran_OUTPUT_EXTENSION}"
)
flang_module_target(flang_rt.mod.cuda.builtins PUBLIC)
add_module_barrier(flang_rt.mod.cuda.builtins.barrier flang_rt.mod.cuda.builtins)
@@ -321,7 +323,8 @@ if (FLANG_RT_FORTRAN_MODULES)
foreach(_srcfile IN LISTS module_sources)
set_property(SOURCE ${_srcfile}
APPEND PROPERTY OBJECT_DEPENDS
- "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/flang_rt.mod.builtins.dir/${CMAKE_CFG_INTDIR}/__fortran_builtins.f90${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ "${CMAKE_BINARY_DIR}/modules/${CMAKE_CFG_INTDIR}/__fortran_builtins${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ "${CMAKE_BINARY_DIR}/modules/${CMAKE_CFG_INTDIR}/__cuda_builtins${CMAKE_Fortran_OUTPUT_EXTENSION}"
)
endforeach()
diff --git a/openmp/module/CMakeLists.txt b/openmp/module/CMakeLists.txt
index 262f5bb47ee72..451cbf9cc8fc8 100644
--- a/openmp/module/CMakeLists.txt
+++ b/openmp/module/CMakeLists.txt
@@ -37,7 +37,7 @@ add_dependencies(libomp-mod ${RUNTIMES_FORTRAN_BUILD_DEPS})
if ("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
set_property(SOURCE "${CMAKE_CURRENT_BINARY_DIR}/omp_lib.F90"
APPEND PROPERTY OBJECT_DEPENDS
- "${CMAKE_BINARY_DIR}/flang-rt/lib/runtime/CMakeFiles/flang_rt.mod.builtins.dir/${CMAKE_CFG_INTDIR}/__fortran_builtins.f90${CMAKE_Fortran_OUTPUT_EXTENSION}"
+ "${CMAKE_BINARY_DIR}/modules/${CMAKE_CFG_INTDIR}/__fortran_builtins${CMAKE_Fortran_OUTPUT_EXTENSION}"
)
endif ()
>From b0a34c8c792f2d8d5598c8731825abd2959a52ae Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 17 Jun 2026 09:19:09 +0200
Subject: [PATCH 3/3] Try make GitHub update the PR
More information about the Openmp-commits
mailing list