[Openmp-commits] [flang] [llvm] [openmp] [Flang-RT] Fix GCC 15.1 Fortran Runtime libstdc++ Undefined Symbols (PR #157385)
Patrick Simmons via Openmp-commits
openmp-commits at lists.llvm.org
Fri Sep 19 03:58:57 PDT 2025
https://github.com/linuxrocks123 updated https://github.com/llvm/llvm-project/pull/157385
>From 0118d197324b6440eb18acaf2a4a6f1bd6ab2fb8 Mon Sep 17 00:00:00 2001
From: Patrick Simmons <psimmons at pensando.io>
Date: Sun, 7 Sep 2025 23:44:02 -0500
Subject: [PATCH 1/4] Remaining work necessary for GCC 15
---
flang-rt/cmake/modules/AddFlangRT.cmake | 8 ++++++++
openmp/runtime/src/CMakeLists.txt | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 43b1451d65e32..14b8c2962f3ed 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -195,6 +195,14 @@ function (add_flangrt_library name)
# Use same stem name for .a and .so. Common in UNIX environments.
# Not possible in Windows environments.
set_target_properties(${tgtname} PROPERTIES OUTPUT_NAME "${name}")
+
+ # Must use minimum optimization level of -O2 to prevent dependency on libstdc++
+ string(REPLACE "-O0" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
+ string(REPLACE "-O1" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
+ string(FIND "-O" CMAKE_CXX_FLAGS opt_idx)
+ if (opt_idx EQUAL -1)
+ target_compile_options(${tgtname} PRIVATE -O2)
+ endif ()
endif ()
if (ARG_INSTALL_WITH_TOOLCHAIN)
diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt
index 6ac047a833fe5..6f84a753c2788 100644
--- a/openmp/runtime/src/CMakeLists.txt
+++ b/openmp/runtime/src/CMakeLists.txt
@@ -170,7 +170,7 @@ endif()
# avoid an unwanted dependency on libstdc++.so.
add_compile_definitions(_GLIBCXX_NO_ASSERTIONS)
if(NOT WIN32)
- add_definitions(-U_GLIBCXX_ASSERTIONS)
+ add_definitions(-U_GLIBCXX_ASSERTIONS -D_GLIBCXX_NO_ASSERTIONS)
endif()
# Add the OpenMP library
>From a9e277148bd16e471184a5dad71f6887a038ac27 Mon Sep 17 00:00:00 2001
From: Patrick Simmons <psimmons at pensando.io>
Date: Mon, 8 Sep 2025 21:52:12 -0500
Subject: [PATCH 2/4] Fixed
---
openmp/runtime/src/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt
index 6f84a753c2788..6ac047a833fe5 100644
--- a/openmp/runtime/src/CMakeLists.txt
+++ b/openmp/runtime/src/CMakeLists.txt
@@ -170,7 +170,7 @@ endif()
# avoid an unwanted dependency on libstdc++.so.
add_compile_definitions(_GLIBCXX_NO_ASSERTIONS)
if(NOT WIN32)
- add_definitions(-U_GLIBCXX_ASSERTIONS -D_GLIBCXX_NO_ASSERTIONS)
+ add_definitions(-U_GLIBCXX_ASSERTIONS)
endif()
# Add the OpenMP library
>From b1d55b7d5e45992b9f4e5aad497a7cfdc2b29a3f Mon Sep 17 00:00:00 2001
From: Patrick Simmons <psimmons at pensando.io>
Date: Thu, 11 Sep 2025 06:00:02 -0500
Subject: [PATCH 3/4] Make suggested change to targets loop
---
flang-rt/cmake/modules/AddFlangRT.cmake | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 14b8c2962f3ed..2ffa516ed8a2c 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -190,19 +190,22 @@ function (add_flangrt_library name)
endif ()
endif ()
+ # Must use minimum optimization level of -O2 to prevent dependency on libstdc++
+ foreach (tgtname IN LISTS srctargets)
+ string(REPLACE "-O0" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
+ string(REPLACE "-O1" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
+ string(FIND "-O" CMAKE_CXX_FLAGS opt_idx)
+ if (opt_idx EQUAL -1)
+ target_compile_options(${tgtname} PRIVATE -O2)
+ endif ()
+ endforeach ()
+
foreach (tgtname IN LISTS libtargets)
if (NOT WIN32)
# Use same stem name for .a and .so. Common in UNIX environments.
# Not possible in Windows environments.
set_target_properties(${tgtname} PROPERTIES OUTPUT_NAME "${name}")
- # Must use minimum optimization level of -O2 to prevent dependency on libstdc++
- string(REPLACE "-O0" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
- string(REPLACE "-O1" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
- string(FIND "-O" CMAKE_CXX_FLAGS opt_idx)
- if (opt_idx EQUAL -1)
- target_compile_options(${tgtname} PRIVATE -O2)
- endif ()
endif ()
if (ARG_INSTALL_WITH_TOOLCHAIN)
>From 96838b77ee07ccf2e9045b5041368c8b8afa44e5 Mon Sep 17 00:00:00 2001
From: Patrick Simmons <psimmons at pensando.io>
Date: Fri, 19 Sep 2025 05:58:01 -0500
Subject: [PATCH 4/4] Approach 3
---
flang-rt/cmake/modules/AddFlangRT.cmake | 11 -----------
flang/include/flang/Common/variant.h | 3 +++
2 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 2ffa516ed8a2c..43b1451d65e32 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -190,22 +190,11 @@ function (add_flangrt_library name)
endif ()
endif ()
- # Must use minimum optimization level of -O2 to prevent dependency on libstdc++
- foreach (tgtname IN LISTS srctargets)
- string(REPLACE "-O0" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
- string(REPLACE "-O1" "-O2" CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS)
- string(FIND "-O" CMAKE_CXX_FLAGS opt_idx)
- if (opt_idx EQUAL -1)
- target_compile_options(${tgtname} PRIVATE -O2)
- endif ()
- endforeach ()
-
foreach (tgtname IN LISTS libtargets)
if (NOT WIN32)
# Use same stem name for .a and .so. Common in UNIX environments.
# Not possible in Windows environments.
set_target_properties(${tgtname} PROPERTIES OUTPUT_NAME "${name}")
-
endif ()
if (ARG_INSTALL_WITH_TOOLCHAIN)
diff --git a/flang/include/flang/Common/variant.h b/flang/include/flang/Common/variant.h
index 1af85876afac0..ac9ca4234c432 100644
--- a/flang/include/flang/Common/variant.h
+++ b/flang/include/flang/Common/variant.h
@@ -24,6 +24,9 @@ using cuda::std::variant_size_v;
using cuda::std::visit;
} // namespace std
#else // !RT_USE_LIBCUDACXX
+#include <initializer_list>
+#undef _GLIBCXX_THROW_OR_ABORT
+#define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort())
#include <variant>
#endif // !RT_USE_LIBCUDACXX
More information about the Openmp-commits
mailing list