-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libunwind] Remove checks for -nostdlib++ #143162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
653f4e8
to
a5c4dbe
Compare
@llvm/pr-subscribers-libunwind Author: Nikolas Klauser (philnik777) Changeslibunwind uses a C linker, so it's never even trying to link against any C++ libraries. This removes the code which tries to drop C++ libraries, which makes the CMake configuration simpler and allows for upgrading GCC. Full diff: https://github.com/llvm/llvm-project/pull/143162.diff 2 Files Affected:
diff --git a/libunwind/cmake/config-ix.cmake b/libunwind/cmake/config-ix.cmake
index 126c872f0d489..d42ceffb1f631 100644
--- a/libunwind/cmake/config-ix.cmake
+++ b/libunwind/cmake/config-ix.cmake
@@ -26,62 +26,6 @@ if (NOT LIBUNWIND_USE_COMPILER_RT)
endif ()
endif()
-# libunwind is using -nostdlib++ at the link step when available,
-# otherwise -nodefaultlibs is used. We want all our checks to also
-# use one of these options, otherwise we may end up with an inconsistency between
-# the flags we think we require during configuration (if the checks are
-# performed without one of those options) and the flags that are actually
-# required during compilation (which has the -nostdlib++ or -nodefaultlibs). libc is
-# required for the link to go through. We remove sanitizers from the
-# configuration checks to avoid spurious link errors.
-
-llvm_check_compiler_linker_flag(CXX "-nostdlib++" CXX_SUPPORTS_NOSTDLIBXX_FLAG)
-if (CXX_SUPPORTS_NOSTDLIBXX_FLAG)
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdlib++")
-else()
- llvm_check_compiler_linker_flag(C "-nodefaultlibs" C_SUPPORTS_NODEFAULTLIBS_FLAG)
- if (C_SUPPORTS_NODEFAULTLIBS_FLAG)
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nodefaultlibs")
- endif()
-endif()
-
-# Only link against compiler-rt manually if we use -nodefaultlibs, since
-# otherwise the compiler will do the right thing on its own.
-if (NOT CXX_SUPPORTS_NOSTDLIBXX_FLAG AND C_SUPPORTS_NODEFAULTLIBS_FLAG)
- if (LIBUNWIND_HAS_C_LIB)
- list(APPEND CMAKE_REQUIRED_LIBRARIES c)
- endif ()
- if (LIBUNWIND_HAS_ROOT_LIB)
- list(APPEND CMAKE_REQUIRED_LIBRARIES root)
- endif ()
- if (LIBUNWIND_USE_COMPILER_RT)
- include(HandleCompilerRT)
- find_compiler_rt_library(builtins LIBUNWIND_BUILTINS_LIBRARY
- FLAGS ${LIBUNWIND_COMPILE_FLAGS})
- list(APPEND CMAKE_REQUIRED_LIBRARIES "${LIBUNWIND_BUILTINS_LIBRARY}")
- else ()
- if (LIBUNWIND_HAS_GCC_S_LIB)
- list(APPEND CMAKE_REQUIRED_LIBRARIES gcc_s)
- endif ()
- if (LIBUNWIND_HAS_GCC_LIB)
- list(APPEND CMAKE_REQUIRED_LIBRARIES gcc)
- endif ()
- endif ()
- if (MINGW)
- # Mingw64 requires quite a few "C" runtime libraries in order for basic
- # programs to link successfully with -nodefaultlibs.
- if (LIBUNWIND_USE_COMPILER_RT)
- set(MINGW_RUNTIME ${LIBUNWIND_BUILTINS_LIBRARY})
- else ()
- set(MINGW_RUNTIME gcc_s gcc)
- endif()
- set(MINGW_LIBRARIES mingw32 ${MINGW_RUNTIME} moldname mingwex msvcrt advapi32
- shell32 user32 kernel32 mingw32 ${MINGW_RUNTIME}
- moldname mingwex msvcrt)
- list(APPEND CMAKE_REQUIRED_LIBRARIES ${MINGW_LIBRARIES})
- endif()
-endif()
-
if (CXX_SUPPORTS_NOSTDLIBXX_FLAG OR C_SUPPORTS_NODEFAULTLIBS_FLAG)
if (CMAKE_C_FLAGS MATCHES -fsanitize OR CMAKE_CXX_FLAGS MATCHES -fsanitize)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize=all")
diff --git a/libunwind/src/CMakeLists.txt b/libunwind/src/CMakeLists.txt
index 70bd3a017cda7..03818b1bb2512 100644
--- a/libunwind/src/CMakeLists.txt
+++ b/libunwind/src/CMakeLists.txt
@@ -71,18 +71,6 @@ set(LIBUNWIND_SOURCES
${LIBUNWIND_ASM_SOURCES})
# Generate library list.
-if (CXX_SUPPORTS_NOSTDLIBXX_FLAG)
- add_link_flags_if_supported(-nostdlib++)
-else()
- if (LIBUNWIND_USE_COMPILER_RT)
- add_library_flags("${LIBUNWIND_BUILTINS_LIBRARY}")
- else()
- add_library_flags_if(LIBUNWIND_HAS_GCC_S_LIB gcc_s)
- add_library_flags_if(LIBUNWIND_HAS_GCC_LIB gcc)
- endif()
- add_library_flags_if(LIBUNWIND_HAS_C_LIB c)
-endif()
-
if (NOT APPLE)
add_library_flags_if(LIBUNWIND_HAS_DL_LIB dl)
endif()
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM assuming CI passes (modulo the usual infra issues), this indeed seems to have been copy-pasted from libc++ and libc++abi.
list(APPEND CMAKE_REQUIRED_LIBRARIES ${MINGW_LIBRARIES}) | ||
endif() | ||
endif() | ||
|
||
if (CXX_SUPPORTS_NOSTDLIBXX_FLAG OR C_SUPPORTS_NODEFAULTLIBS_FLAG) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't this also be adjusted since CXX_SUPPORTS_NOSTDLIBXX_FLAG is no longer being set?
libunwind uses a C linker, so it's never even trying to link against any C++ libraries. This removes the code which tries to drop C++ libraries, which makes the CMake configuration simpler and allows for upgrading GCC.
libunwind uses a C linker, so it's never even trying to link against any C++ libraries. This removes the code which tries to drop C++ libraries, which makes the CMake configuration simpler and allows for upgrading GCC.
libunwind uses a C linker, so it's never even trying to link against any C++ libraries. This removes the code which tries to drop C++ libraries, which makes the CMake configuration simpler and allows for upgrading GCC.