Home | History | Annotate | Download | only in modules
      1 # atomic builtins are required for threading support.
      2 
      3 INCLUDE(CheckCXXSourceCompiles)
      4 
      5 CHECK_CXX_SOURCE_COMPILES("
      6 #ifdef _MSC_VER
      7 #include <windows.h>
      8 #endif
      9 int main() {
     10 #ifdef _MSC_VER
     11         volatile LONG val = 1;
     12         MemoryBarrier();
     13         InterlockedCompareExchange(&val, 0, 1);
     14         InterlockedIncrement(&val);
     15         InterlockedDecrement(&val);
     16 #else
     17         volatile unsigned long val = 1;
     18         __sync_synchronize();
     19         __sync_val_compare_and_swap(&val, 1, 0);
     20         __sync_add_and_fetch(&val, 1);
     21         __sync_sub_and_fetch(&val, 1);
     22 #endif
     23         return 0;
     24       }
     25 " LLVM_HAS_ATOMICS)
     26 
     27 if( NOT LLVM_HAS_ATOMICS )
     28   message(STATUS "Warning: LLVM will be built thread-unsafe because atomic builtins are missing")
     29 endif()
     30