[PATCH] D21599: [Libcxx][MIPS] Use LLVM CheckAtomic.cmake module to figure out whether we need to link with libatomic.

2016-06-22 Thread Nitesh Jain via cfe-commits
nitesh.jain created this revision.
nitesh.jain added reviewers: dsanders, vkalintiris, joerg, jroelofs, EricWF, 
mclow.lists.
nitesh.jain added subscribers: jaydeep, bhushan, slthakur, mohit.bhakkad, 
zturner, cfe-commits.
nitesh.jain set the repository for this revision to rL LLVM.

The patch http://reviews.llvm.org/D20896 add check for 64 bit atomic operations 
in LLVM CheckAtomic.cmake module. We can than used this module to figure out 
whether we need to link with libatomic.

Repository:
  rL LLVM

http://reviews.llvm.org/D21599

Files:
  cmake/Modules/CheckLibcxxAtomic.cmake
  cmake/config-ix.cmake
  lib/CMakeLists.txt
  test/CMakeLists.txt
  test/lit.site.cfg.in

Index: test/lit.site.cfg.in
===
--- test/lit.site.cfg.in
+++ test/lit.site.cfg.in
@@ -22,7 +22,7 @@
 config.target_info  = "@LIBCXX_TARGET_INFO@"
 config.executor = "@LIBCXX_EXECUTOR@"
 config.llvm_unwinder= "@LIBCXXABI_USE_LLVM_UNWINDER@"
-config.use_libatomic= "@LIBCXX_HAS_ATOMIC_LIB@"
+config.use_libatomic= "@HAVE_CXX_LIBATOMICS64@"
 config.libcxxabi_shared = "@LIBCXXABI_ENABLE_SHARED@"
 
 # Let the main config do the real work.
Index: test/CMakeLists.txt
===
--- test/CMakeLists.txt
+++ test/CMakeLists.txt
@@ -18,7 +18,7 @@
 pythonize_bool(LIBCXX_GENERATE_COVERAGE)
 pythonize_bool(LIBCXXABI_ENABLE_SHARED)
 pythonize_bool(LIBCXXABI_USE_LLVM_UNWINDER)
-pythonize_bool(LIBCXX_HAS_ATOMIC_LIB)
+pythonize_bool(HAVE_CXX_LIBATOMICS64)
 
 # The tests shouldn't link to any ABI library when it has been linked into
 # libc++ statically or via a linker script.
Index: lib/CMakeLists.txt
===
--- lib/CMakeLists.txt
+++ lib/CMakeLists.txt
@@ -79,7 +79,7 @@
 add_library_flags_if(LIBCXX_HAS_M_LIB m)
 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_ATOMIC_LIB atomic)
+add_library_flags_if(HAVE_CXX_LIBATOMICS64 atomic)
 
 # Setup flags.
 add_flags_if_supported(-fPIC)
Index: cmake/config-ix.cmake
===
--- cmake/config-ix.cmake
+++ cmake/config-ix.cmake
@@ -1,6 +1,5 @@
 include(CheckLibraryExists)
 include(CheckCXXCompilerFlag)
-include(CheckLibcxxAtomic)
 
 # Check compiler flags
 
Index: cmake/Modules/CheckLibcxxAtomic.cmake
===
--- cmake/Modules/CheckLibcxxAtomic.cmake
+++ /dev/null
@@ -1,41 +0,0 @@
-INCLUDE(CheckCXXSourceCompiles)
-
-# Sometimes linking against libatomic is required for atomic ops, if
-# the platform doesn't support lock-free atomics.
-#
-# We could modify LLVM's CheckAtomic module and have it check for 64-bit
-# atomics instead. However, we would like to avoid careless uses of 64-bit
-# atomics inside LLVM over time on 32-bit platforms.
-
-function(check_cxx_atomics varname)
-  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
-  set(CMAKE_REQUIRED_FLAGS "-std=c++11 -nostdinc++ -isystem 
${LIBCXX_SOURCE_DIR}/include")
-  if (${LIBCXX_GCC_TOOLCHAIN})
-set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} 
--gcc-toolchain=${LIBCXX_GCC_TOOLCHAIN}")
-  endif()
-  check_cxx_source_compiles("
-#include 
-#include 
-std::atomic x;
-std::atomic y;
-int main() {
-  return x + y;
-}
-" ${varname})
-  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
-endfunction(check_cxx_atomics)
-
-check_cxx_atomics(LIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB)
-# If not, check if the library exists, and atomics work with it.
-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)
-list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
-check_cxx_atomics(LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
-if (NOT LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
-  message(WARNING "Host compiler must support std::atomic!")
-endif()
-  else()
-message(WARNING "Host compiler appears to require libatomic, but cannot 
find it.")
-  endif()
-endif()


Index: test/lit.site.cfg.in
===
--- test/lit.site.cfg.in
+++ test/lit.site.cfg.in
@@ -22,7 +22,7 @@
 config.target_info  = "@LIBCXX_TARGET_INFO@"
 config.executor = "@LIBCXX_EXECUTOR@"
 config.llvm_unwinder= "@LIBCXXABI_USE_LLVM_UNWINDER@"
-config.use_libatomic= "@LIBCXX_HAS_ATOMIC_LIB@"
+config.use_libatomic= "@HAVE_CXX_LIBATOMICS64@"
 config.libcxxabi_shared = "@LIBCXXABI_ENABLE_SHARED@"
 
 # Let the main config do the real work.
Index: test/CMakeLists.txt
===
--- test/CMakeLists.txt
+++ test/CMakeLists.txt
@@ -18,7 +18,7 @@
 pythonize_bool(LIBCXX_GENERATE_COVERAGE)
 pythonize_bool(LIBCXX

Re: [PATCH] D21599: [Libcxx][MIPS] Use LLVM CheckAtomic.cmake module to figure out whether we need to link with libatomic.

2016-07-12 Thread Nitesh Jain via cfe-commits
nitesh.jain added a comment.

Hi Daniel/Vasileios

Please could you find sometime to review this?

Thanks


Repository:
  rL LLVM

http://reviews.llvm.org/D21599



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D21599: [Libcxx][MIPS] Use LLVM CheckAtomic.cmake module to figure out whether we need to link with libatomic.

2016-07-12 Thread Nitesh Jain via cfe-commits
nitesh.jain added a comment.

In http://reviews.llvm.org/D21599#481553, @dsanders wrote:

> What sets HAVE_CXX_LIBATOMICS64? I don't see a reference to LLVM's 
> CheckAtomic.


The CheckAtomic.cmake module (http://reviews.llvm.org/D20896) in llvm will set  
HAVE_CXX_LIBATOMICS64 if library exit and atomics work with it. This value then 
can be read from LLVM CMake cache.

F2156495: CMakeCache.txt 


Repository:
  rL LLVM

http://reviews.llvm.org/D21599



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D21599: [Libcxx][MIPS] Use LLVM CheckAtomic.cmake module to figure out whether we need to link with libatomic.

2016-07-12 Thread Nitesh Jain via cfe-commits
nitesh.jain added a comment.

In http://reviews.llvm.org/D21599#481588, @dsanders wrote:

> Have you tried a standalone build? I suspect HAVE_CXX_LIBATOMICS64 will never 
> be set for that case. If that's the case, adding 'include(CheckAtomic)' will 
> probably fix it.


I never tried a standalone build. Please can you shared standalone build steps 
(I can't find any doc's for that) ?

Thanks


Repository:
  rL LLVM

http://reviews.llvm.org/D21599



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits