mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 23:00:15 +00:00
[libcxx] Add support for linking libc++ against a static ABI library.
Summary: This patch add the CMake option `LIBCXX_ENABLE_STATIC_ABI_LIBRARY` which, when enabled, will link libc++ against the static version of the ABI library. Reviewers: mclow.lists, jroelofs, danalbert Reviewed By: danalbert Subscribers: compnerd, cfe-commits Differential Revision: http://reviews.llvm.org/D8017 llvm-svn: 231076
This commit is contained in:
parent
14dbeaadc1
commit
0357171f1c
@ -61,6 +61,7 @@ option(LIBCXX_ENABLE_MONOTONIC_CLOCK
|
||||
This option may only be used when LIBCXX_ENABLE_THREADS=OFF." ON)
|
||||
option(LIBCXX_INSTALL_HEADERS "Install the libc++ headers." ON)
|
||||
option(LIBCXX_INSTALL_SUPPORT_HEADERS "Install libc++ support headers." ON)
|
||||
option(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "Statically link the ABI library" OFF)
|
||||
set(LIBCXX_SYSROOT "" CACHE STRING "Use alternate sysroot.")
|
||||
set(LIBCXX_GCC_TOOLCHAIN "" CACHE STRING "Use alternate GCC toolchain.")
|
||||
if (LIBCXX_BUILT_STANDALONE)
|
||||
@ -68,6 +69,14 @@ if (LIBCXX_BUILT_STANDALONE)
|
||||
"Define the sanitizer used to build the library and tests")
|
||||
endif()
|
||||
|
||||
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()
|
||||
endif()
|
||||
|
||||
set(CXXABIS none libcxxabi libcxxrt libstdc++ libsupc++)
|
||||
if (NOT LIBCXX_CXX_ABI)
|
||||
if (NOT DEFINED LIBCXX_BUILT_STANDALONE AND
|
||||
|
@ -78,7 +78,11 @@ if ("${LIBCXX_CXX_ABI_LIBNAME}" STREQUAL "libstdc++" OR
|
||||
elseif ("${LIBCXX_CXX_ABI_LIBNAME}" STREQUAL "libcxxabi")
|
||||
if (LIBCXX_CXX_ABI_INTREE)
|
||||
# Link against just-built "cxxabi" target.
|
||||
set(CXXABI_LIBNAME cxxabi)
|
||||
if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
|
||||
set(CXXABI_LIBNAME cxxabi_static)
|
||||
else()
|
||||
set(CXXABI_LIBNAME cxxabi_shared)
|
||||
endif()
|
||||
set(LIBCXX_LIBCPPABI_VERSION "2" PARENT_SCOPE)
|
||||
else()
|
||||
# Assume c++abi is installed in the system, rely on -lc++abi link flag.
|
||||
|
@ -34,22 +34,33 @@ else()
|
||||
)
|
||||
endif()
|
||||
|
||||
#if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
|
||||
if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH)
|
||||
target_link_libraries(cxx "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
|
||||
endif()
|
||||
|
||||
if (DEFINED LIBCXX_CXX_ABI_DEPS)
|
||||
add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
|
||||
endif()
|
||||
|
||||
set(libraries "")
|
||||
if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
|
||||
# TODO(ericwf): Remove these GNU specific linker flags and let CMake do the
|
||||
# configuration. This will be more portable.
|
||||
list(APPEND libraries "-Wl,--whole-archive" "-Wl,-Bstatic")
|
||||
list(APPEND libraries "${LIBCXX_CXX_ABI_LIBRARY}")
|
||||
list(APPEND libraries "-Wl,-Bdynamic" "-Wl,--no-whole-archive")
|
||||
else()
|
||||
list(APPEND libraries "${LIBCXX_CXX_ABI_LIBRARY}")
|
||||
endif()
|
||||
|
||||
# Generate library list.
|
||||
set(libraries ${LIBCXX_CXX_ABI_LIBRARY})
|
||||
append_if(libraries LIBCXX_HAS_PTHREAD_LIB pthread)
|
||||
append_if(libraries LIBCXX_HAS_C_LIB c)
|
||||
append_if(libraries LIBCXX_HAS_M_LIB m)
|
||||
append_if(libraries LIBCXX_HAS_RT_LIB rt)
|
||||
append_if(libraries LIBCXX_HAS_GCC_S_LIB gcc_s)
|
||||
|
||||
#if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
|
||||
if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH)
|
||||
target_link_libraries(cxx "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
|
||||
endif()
|
||||
target_link_libraries(cxx ${libraries})
|
||||
|
||||
# Setup flags.
|
||||
|
@ -44,6 +44,11 @@ if (LIT_EXECUTABLE)
|
||||
pythonize_bool(LIBCXX_BUILD_32_BITS)
|
||||
pythonize_bool(LIBCXX_ENABLE_THREADS)
|
||||
pythonize_bool(LIBCXX_ENABLE_MONOTONIC_CLOCK)
|
||||
# The tests shouldn't link to any ABI library when it has been linked into
|
||||
# libc++ statically.
|
||||
if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
|
||||
set(LIBCXX_CXX_ABI_LIBNAME "none")
|
||||
endif()
|
||||
set(LIBCXX_TARGET_INFO "libcxx.test.target_info.LocalTI" CACHE STRING
|
||||
"TargetInfo to use when setting up test environment.")
|
||||
set(LIBCXX_EXECUTOR "None" CACHE STRING
|
||||
|
Loading…
Reference in New Issue
Block a user