[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