https://github.com/philnik777 created https://github.com/llvm/llvm-project/pull/143162
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. >From 653f4e85efdc7f413e18cf66c018773c53be07cd Mon Sep 17 00:00:00 2001 From: Nikolas Klauser <nikolasklau...@berlin.de> Date: Fri, 6 Jun 2025 17:31:23 +0200 Subject: [PATCH] [libunwind] Remove checks for -nostdlib++ --- libunwind/cmake/config-ix.cmake | 65 --------------------------------- libunwind/src/CMakeLists.txt | 12 ------ 2 files changed, 77 deletions(-) diff --git a/libunwind/cmake/config-ix.cmake b/libunwind/cmake/config-ix.cmake index 126c872f0d489..47967a7d36c57 100644 --- a/libunwind/cmake/config-ix.cmake +++ b/libunwind/cmake/config-ix.cmake @@ -26,71 +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") - endif () - if (CMAKE_C_FLAGS MATCHES -fsanitize-coverage OR CMAKE_CXX_FLAGS MATCHES -fsanitize-coverage) - set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fsanitize-coverage=0") - endif () -endif () - # Check compiler pragmas if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") cmake_push_check_state() 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() _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits