[libcxx-commits] [PATCH] D112126: [libunwind] Try to add -unwindlib=none while configuring and building libunwind
Martin Storsjö via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Oct 23 15:16:46 PDT 2021
mstorsjo updated this revision to Diff 381762.
mstorsjo added a comment.
Moved the tests so that the test for fopen/libc succeeds, and temporarily setting `CMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY` so that the initial test for `--target=<triple>` also can succeed.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112126/new/
https://reviews.llvm.org/D112126
Files:
libunwind/CMakeLists.txt
libunwind/cmake/config-ix.cmake
libunwind/src/CMakeLists.txt
Index: libunwind/src/CMakeLists.txt
===================================================================
--- libunwind/src/CMakeLists.txt
+++ libunwind/src/CMakeLists.txt
@@ -83,6 +83,7 @@
endif()
# Setup flags.
+add_link_flags_if(LIBUNWIND_SUPPORTS_UNWINDLIB_NONE_FLAG -unwindlib=none)
if (LIBUNWIND_SUPPORTS_NOSTDLIBXX_FLAG)
add_link_flags_if_supported(-nostdlib++)
else()
Index: libunwind/cmake/config-ix.cmake
===================================================================
--- libunwind/cmake/config-ix.cmake
+++ libunwind/cmake/config-ix.cmake
@@ -5,6 +5,27 @@
include(CheckSymbolExists)
include(CheckCSourceCompiles)
+# The compiler driver may be implicitly trying to link against libunwind,
+# which obviously might not work when building libunwind itself. Try to
+# check if -unwindlib=none is supported, and use that if possible.
+# (Note, this does succeed for GCC too, where it's treated as the linker
+# flag "-u windlib=none", which should be harmless in practice.)
+#
+# However, a plain check_c_compiler_flag(-unwindlib=none) would also fail, as
+# the tested flag is only added to the compilation command (letting the
+# compiler error out if it is unsupported), but not included in the linking
+# command (which still fails due to implicitly trying to link against the
+# possibly missing libunwind). Therefore, we must add it directly to
+# CMAKE_REQUIRED_FLAGS (which is included both when compiling and linking),
+# then do a dummy test with check_c_compiler_flag, and revert the change to
+# CMAKE_REQUIRED_FLAGS if it didn't work out.
+set(CMAKE_REQUIRED_FLAGS_ORIG "${CMAKE_REQUIRED_FLAGS}")
+set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -unwindlib=none")
+check_c_compiler_flag("" LIBUNWIND_SUPPORTS_UNWINDLIB_NONE_FLAG)
+if (NOT LIBUNWIND_SUPPORTS_UNWINDLIB_NONE_FLAG)
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_ORIG}")
+endif()
+
check_library_exists(c fopen "" LIBUNWIND_HAS_C_LIB)
if (NOT LIBUNWIND_USE_COMPILER_RT)
Index: libunwind/CMakeLists.txt
===================================================================
--- libunwind/CMakeLists.txt
+++ libunwind/CMakeLists.txt
@@ -171,6 +171,13 @@
# Get required flags.
add_target_flags_if(LIBUNWIND_BUILD_32_BITS "-m32")
+# Compiler tests may be failing if the compiler tries to link in the libunwind
+# that we're about to build. This gets waived by -unwindlib=none later in
+# config-ix below, but the tests for --target etc below may be failing
+# due to it. Only test compilation, not linking, for these tests here now.
+set(CMAKE_TRY_COMPILE_TARGET_TYPE_ORIG ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
if(LIBUNWIND_TARGET_TRIPLE)
add_target_flags_if_supported("--target=${LIBUNWIND_TARGET_TRIPLE}")
endif()
@@ -180,6 +187,7 @@
if(LIBUNWIND_SYSROOT)
add_target_flags_if_supported("--sysroot=${LIBUNWIND_SYSROOT}")
endif()
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE_ORIG})
# Configure compiler.
include(config-ix)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112126.381762.patch
Type: text/x-patch
Size: 3014 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20211023/a3d060fc/attachment.bin>
More information about the libcxx-commits
mailing list