From 976073794edf83b5e25c5c3bc285a1c2505bac9e Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Mon, 25 Mar 2019 14:56:29 +0000 Subject: [PATCH] [libc++][CMake] Allow merging libc++abi.a into libc++ even on Apple platforms Summary: I can't see a good reason to disallow this, even though it isn't the standard way we build libc++ for Apple platforms. Making this work on Apple platforms requires using different flags for --whole-archive and removing the -D flag when running `ar` to merge archives because that flag isn't supported by the `ar` shipped on Apple platforms. This shouldn't be an issue since the -D option appears to be enabled by default in GNU `ar`. Reviewers: phosek, EricWF, serge-sans-paille Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits Differential Revision: https://reviews.llvm.org/D59513 llvm-svn: 356903 --- libcxx/CMakeLists.txt | 8 ++------ libcxx/lib/CMakeLists.txt | 13 +++++++++---- libcxx/utils/merge_archives.py | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index 389d36f..9658fe4 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -359,13 +359,9 @@ elseif(LIBCXX_BUILD_32_BITS) message(FATAL_ERROR "LIBCXX_BUILD_32_BITS=ON is not supported on this platform.") endif() -# Check that this option is not enabled on Apple and emit a usage warning. +# Warn users that LIBCXX_ENABLE_STATIC_ABI_LIBRARY is an experimental option. if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY) - if (APPLE) - message(FATAL_ERROR "LIBCXX_ENABLE_STATIC_ABI_LIBRARY is not supported on OS X") - else() - message(WARNING "LIBCXX_ENABLE_STATIC_ABI_LIBRARY is an experimental option") - endif() + message(WARNING "LIBCXX_ENABLE_STATIC_ABI_LIBRARY is an experimental option") if (LIBCXX_ENABLE_STATIC AND NOT PYTHONINTERP_FOUND) message(FATAL_ERROR "LIBCXX_ENABLE_STATIC_ABI_LIBRARY requires python but it was not found.") endif() diff --git a/libcxx/lib/CMakeLists.txt b/libcxx/lib/CMakeLists.txt index 4397189..50b7e28 100644 --- a/libcxx/lib/CMakeLists.txt +++ b/libcxx/lib/CMakeLists.txt @@ -52,14 +52,19 @@ endif() add_library_flags_if(LIBCXX_COVERAGE_LIBRARY "${LIBCXX_COVERAGE_LIBRARY}") if (APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR - LIBCXX_CXX_ABI_LIBNAME STREQUAL "default")) + LIBCXX_CXX_ABI_LIBNAME STREQUAL "default") + AND NOT DEFINED LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS) set(LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS ON) endif() if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY) - add_library_flags("-Wl,--whole-archive" "-Wl,-Bstatic") - add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}") - add_library_flags("-Wl,-Bdynamic" "-Wl,--no-whole-archive") + if (APPLE) + add_library_flags("-Wl,-force_load" "${LIBCXX_CXX_ABI_LIBRARY}") + else() + add_library_flags("-Wl,--whole-archive" "-Wl,-Bstatic") + add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}") + add_library_flags("-Wl,-Bdynamic" "-Wl,--no-whole-archive") + endif() elseif (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS) add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}") else () diff --git a/libcxx/utils/merge_archives.py b/libcxx/utils/merge_archives.py index e57afab..75d7a54 100755 --- a/libcxx/utils/merge_archives.py +++ b/libcxx/utils/merge_archives.py @@ -127,7 +127,7 @@ def main(): out = execute_command_verbose([ar_exe, 't', arc]) files.extend(out.splitlines()) - execute_command_verbose([ar_exe, 'rcsD', args.output] + files, + execute_command_verbose([ar_exe, 'rcs', args.output] + files, cwd=temp_directory_root, verbose=args.verbose) -- 2.7.4