[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
Sun Oct 24 04:32:56 PDT 2021
mstorsjo updated this revision to Diff 381775.
mstorsjo added a comment.
Further small adjustments:
- Prefer `--unwindlib` instead of `-unwindlib`. The latter gets silently accepted by GCC (but meaning something entirely different, although harmless), while `--unwindlib` gets rejected by GCC (as intended by the tests).
- Set `CMAKE_TRY_COMPILE_TARGET_TYPE= STATIC_LIBRARY` temporarily during the initial compiler sanity checks. This makes sure the checks succeed and lets CMake do the initial ABI detections (for things like `CMAKE_SIZEOF_VOID_P` etc), and avoids having to set `CMAKE_*_COMPILER_WORKS`. (The same can be done later for libcxxabi/libcxx too.)
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,25 @@
include(CheckSymbolExists)
include(CheckCSourceCompiles)
+# The compiler driver may be implicitly trying to link against libunwind, which
+# might not work if libunwind doesn't exist yet. Try to check if
+# --unwindlib=none is supported, and use that if possible.
+#
+# 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
@@ -21,7 +21,12 @@
"Specify path to libc++ source.")
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR LIBUNWIND_STANDALONE_BUILD)
+ # We may have an incomplete toolchain - skip linking testing when doing
+ # compiler sanity checks and ABI inspections.
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE_ORIG ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
project(libunwind LANGUAGES C CXX ASM)
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE_ORIG})
set(PACKAGE_NAME libunwind)
set(PACKAGE_VERSION 14.0.0git)
@@ -171,6 +176,14 @@
# Get required flags.
add_target_flags_if(LIBUNWIND_BUILD_32_BITS "-m32")
+# Compiler tests may be failing if the compiler implicitly links in libunwind,
+# which doesn't exist yet. This gets waived by --unwindlib=none
+# later in config-ix below, but the tests for --target etc before that 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 +193,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.381775.patch
Type: text/x-patch
Size: 3465 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20211024/de446924/attachment-0001.bin>
More information about the libcxx-commits
mailing list