Rework libatomic handling in CMake and LIT.
This patch updates the way libc++ handles checking for libatomic, in part to prepare for https://reviews.llvm.org/D22073. Changes: * 'LIBCXX_HAS_ATOMIC_LIB' is now set whenever libatomic is available even libc++ doesn't need to manually link it. * 'LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB' is now used to detect when libatomic needs to be manually linked. * 'LIBCXX_HAS_ATOMIC_LIB' now adds 'libatomic' as a available feature in the test suite. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@275759 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -26,9 +26,9 @@ int main() {
|
|||||||
endfunction(check_cxx_atomics)
|
endfunction(check_cxx_atomics)
|
||||||
|
|
||||||
check_cxx_atomics(LIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB)
|
check_cxx_atomics(LIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB)
|
||||||
|
check_library_exists(atomic __atomic_fetch_add_8 "" LIBCXX_HAS_ATOMIC_LIB)
|
||||||
# If not, check if the library exists, and atomics work with it.
|
# If not, check if the library exists, and atomics work with it.
|
||||||
if(NOT LIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB)
|
if(NOT LIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB)
|
||||||
check_library_exists(atomic __atomic_fetch_add_8 "" LIBCXX_HAS_ATOMIC_LIB)
|
|
||||||
if(LIBCXX_HAS_ATOMIC_LIB)
|
if(LIBCXX_HAS_ATOMIC_LIB)
|
||||||
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
|
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
|
||||||
check_cxx_atomics(LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
|
check_cxx_atomics(LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ add_library_flags_if(LIBCXX_HAS_C_LIB c)
|
|||||||
add_library_flags_if(LIBCXX_HAS_M_LIB m)
|
add_library_flags_if(LIBCXX_HAS_M_LIB m)
|
||||||
add_library_flags_if(LIBCXX_HAS_RT_LIB rt)
|
add_library_flags_if(LIBCXX_HAS_RT_LIB rt)
|
||||||
add_library_flags_if(LIBCXX_HAS_GCC_S_LIB gcc_s)
|
add_library_flags_if(LIBCXX_HAS_GCC_S_LIB gcc_s)
|
||||||
add_library_flags_if(LIBCXX_HAS_ATOMIC_LIB atomic)
|
add_library_flags_if(LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB atomic)
|
||||||
|
|
||||||
# Setup flags.
|
# Setup flags.
|
||||||
add_flags_if_supported(-fPIC)
|
add_flags_if_supported(-fPIC)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ pythonize_bool(LIBCXX_GENERATE_COVERAGE)
|
|||||||
pythonize_bool(LIBCXXABI_ENABLE_SHARED)
|
pythonize_bool(LIBCXXABI_ENABLE_SHARED)
|
||||||
pythonize_bool(LIBCXXABI_USE_LLVM_UNWINDER)
|
pythonize_bool(LIBCXXABI_USE_LLVM_UNWINDER)
|
||||||
pythonize_bool(LIBCXX_HAS_ATOMIC_LIB)
|
pythonize_bool(LIBCXX_HAS_ATOMIC_LIB)
|
||||||
|
pythonize_bool(LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
|
||||||
|
|
||||||
# The tests shouldn't link to any ABI library when it has been linked into
|
# The tests shouldn't link to any ABI library when it has been linked into
|
||||||
# libc++ statically or via a linker script.
|
# libc++ statically or via a linker script.
|
||||||
|
|||||||
@@ -290,6 +290,9 @@ class Configuration(object):
|
|||||||
if self.cxx.hasCompileFlag('-fsized-deallocation'):
|
if self.cxx.hasCompileFlag('-fsized-deallocation'):
|
||||||
self.config.available_features.add('fsized-deallocation')
|
self.config.available_features.add('fsized-deallocation')
|
||||||
|
|
||||||
|
if self.get_lit_bool('has_libatomic', False):
|
||||||
|
self.config.available_features.add('libatomic')
|
||||||
|
|
||||||
def configure_compile_flags(self):
|
def configure_compile_flags(self):
|
||||||
no_default_flags = self.get_lit_bool('no_default_flags', False)
|
no_default_flags = self.get_lit_bool('no_default_flags', False)
|
||||||
if not no_default_flags:
|
if not no_default_flags:
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ config.generate_coverage = "@LIBCXX_GENERATE_COVERAGE@"
|
|||||||
config.target_info = "@LIBCXX_TARGET_INFO@"
|
config.target_info = "@LIBCXX_TARGET_INFO@"
|
||||||
config.executor = "@LIBCXX_EXECUTOR@"
|
config.executor = "@LIBCXX_EXECUTOR@"
|
||||||
config.llvm_unwinder = "@LIBCXXABI_USE_LLVM_UNWINDER@"
|
config.llvm_unwinder = "@LIBCXXABI_USE_LLVM_UNWINDER@"
|
||||||
config.use_libatomic = "@LIBCXX_HAS_ATOMIC_LIB@"
|
config.has_libatomic = "@LIBCXX_HAS_ATOMIC_LIB@"
|
||||||
|
config.use_libatomic = "@LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB@"
|
||||||
|
|
||||||
config.libcxxabi_shared = "@LIBCXXABI_ENABLE_SHARED@"
|
config.libcxxabi_shared = "@LIBCXXABI_ENABLE_SHARED@"
|
||||||
|
|
||||||
# Let the main config do the real work.
|
# Let the main config do the real work.
|
||||||
|
|||||||
Reference in New Issue
Block a user