From f27a903f7784d1cb28c683f6e3cc5b6b9ade0d9f Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Tue, 27 Nov 2018 20:59:47 +0000 Subject: [PATCH] [libcxx] Fix libc++ re-exporting logic when Command Line Tools are not installed Summary: When the Xcode Command Line tools are not installed but CMAKE_OSX_SYSROOT is set, we would try to re-export symbols from the libc++abi.dylib shipped in the sysroot, which does not exist. This commit changes the build on OS X to always re-export symbols from the explicit re-export lists, which doesn't change depending on what system you're building on, and is therefore much less flaky. Reviewers: EricWF, mclow.lists Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits Differential Revision: https://reviews.llvm.org/D54595 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@347708 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CMakeLists.txt | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1fa315b06..4ec2f8450 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -41,14 +41,14 @@ 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")) - set(LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY ON) + 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") -elseif (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY) +elseif (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS) add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}") else () add_interface_library("${LIBCXX_CXX_ABI_LIBRARY}") @@ -129,7 +129,7 @@ if (LIBCXX_TARGETING_MSVC) add_library_flags(iso_stdio_wide_specifiers) endif() -if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY) +if (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS) if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION) set(LIBCXX_LIBCPPABI_VERSION "2") # Default value execute_process( @@ -153,29 +153,22 @@ if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY) "target. If you need support for this, please contact " "the libc++ maintainers.") else() - if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") - list(FIND CMAKE_OSX_ARCHITECTURES "armv7" OSX_HAS_ARMV7) - if (NOT OSX_HAS_ARMV7 EQUAL -1) - set(OSX_RE_EXPORT_LINE - "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib" - "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp") - else() - set(OSX_RE_EXPORT_LINE - "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") - endif() + if ("armv7" IN_LIST CMAKE_OSX_ARCHITECTURES) + set(RE_EXPORT_LIST "${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp") else() - set(OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") - if (NOT LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) - add_link_flags("/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi-new-delete.exp") - endif() + set(RE_EXPORT_LIST "${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") endif() add_link_flags( "-compatibility_version 1" "-install_name /usr/lib/libc++.1.dylib" "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp" - "${OSX_RE_EXPORT_LINE}" + "-Wl,-reexported_symbols_list,${RE_EXPORT_LIST}" "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp" "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.exp") + + if (NOT LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) + add_link_flags("-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi-new-delete.exp") + endif() endif() endif()