[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
This commit is contained in:
@@ -41,14 +41,14 @@ add_library_flags_if(LIBCXX_COVERAGE_LIBRARY "${LIBCXX_COVERAGE_LIBRARY}")
|
|||||||
|
|
||||||
if (APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR
|
if (APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR
|
||||||
LIBCXX_CXX_ABI_LIBNAME STREQUAL "default"))
|
LIBCXX_CXX_ABI_LIBNAME STREQUAL "default"))
|
||||||
set(LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY ON)
|
set(LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
|
if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
|
||||||
add_library_flags("-Wl,--whole-archive" "-Wl,-Bstatic")
|
add_library_flags("-Wl,--whole-archive" "-Wl,-Bstatic")
|
||||||
add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}")
|
add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}")
|
||||||
add_library_flags("-Wl,-Bdynamic" "-Wl,--no-whole-archive")
|
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}")
|
add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}")
|
||||||
else ()
|
else ()
|
||||||
add_interface_library("${LIBCXX_CXX_ABI_LIBRARY}")
|
add_interface_library("${LIBCXX_CXX_ABI_LIBRARY}")
|
||||||
@@ -129,7 +129,7 @@ if (LIBCXX_TARGETING_MSVC)
|
|||||||
add_library_flags(iso_stdio_wide_specifiers)
|
add_library_flags(iso_stdio_wide_specifiers)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY)
|
if (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS)
|
||||||
if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION)
|
if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION)
|
||||||
set(LIBCXX_LIBCPPABI_VERSION "2") # Default value
|
set(LIBCXX_LIBCPPABI_VERSION "2") # Default value
|
||||||
execute_process(
|
execute_process(
|
||||||
@@ -153,29 +153,22 @@ if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY)
|
|||||||
"target. If you need support for this, please contact "
|
"target. If you need support for this, please contact "
|
||||||
"the libc++ maintainers.")
|
"the libc++ maintainers.")
|
||||||
else()
|
else()
|
||||||
if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "")
|
if ("armv7" IN_LIST CMAKE_OSX_ARCHITECTURES)
|
||||||
list(FIND CMAKE_OSX_ARCHITECTURES "armv7" OSX_HAS_ARMV7)
|
set(RE_EXPORT_LIST "${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp")
|
||||||
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()
|
else()
|
||||||
set(OSX_RE_EXPORT_LINE
|
set(RE_EXPORT_LIST "${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp")
|
||||||
"-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib")
|
|
||||||
endif()
|
|
||||||
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()
|
|
||||||
endif()
|
endif()
|
||||||
add_link_flags(
|
add_link_flags(
|
||||||
"-compatibility_version 1"
|
"-compatibility_version 1"
|
||||||
"-install_name /usr/lib/libc++.1.dylib"
|
"-install_name /usr/lib/libc++.1.dylib"
|
||||||
"-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
|
"-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_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/notweak.exp"
|
||||||
"-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/weak.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()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user