[libunwind] Remove checks for -nostdlib++ (#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.
This commit is contained in:
@@ -26,62 +26,6 @@ if (NOT LIBUNWIND_USE_COMPILER_RT)
|
|||||||
endif ()
|
endif ()
|
||||||
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 (CXX_SUPPORTS_NOSTDLIBXX_FLAG OR C_SUPPORTS_NODEFAULTLIBS_FLAG)
|
||||||
if (CMAKE_C_FLAGS MATCHES -fsanitize OR CMAKE_CXX_FLAGS MATCHES -fsanitize)
|
if (CMAKE_C_FLAGS MATCHES -fsanitize OR CMAKE_CXX_FLAGS MATCHES -fsanitize)
|
||||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize=all")
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize=all")
|
||||||
|
|||||||
@@ -71,18 +71,6 @@ set(LIBUNWIND_SOURCES
|
|||||||
${LIBUNWIND_ASM_SOURCES})
|
${LIBUNWIND_ASM_SOURCES})
|
||||||
|
|
||||||
# Generate library list.
|
# 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)
|
if (NOT APPLE)
|
||||||
add_library_flags_if(LIBUNWIND_HAS_DL_LIB dl)
|
add_library_flags_if(LIBUNWIND_HAS_DL_LIB dl)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user