Test for the presence of GCC atomic builtins at configure time. If not found,
[oota-llvm.git] / autoconf / configure.ac
index cb217a5143b67537ef046d36267c1b13030314d8..56853e96bf189b897c82f9227fa4bae421b9253b 100644 (file)
@@ -372,7 +372,6 @@ case "$enableval" in
   default) AC_SUBST(ENABLE_THREADS,[1]) ;;
   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
 esac
   default) AC_SUBST(ENABLE_THREADS,[1]) ;;
   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
 esac
-AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
 
 dnl Allow building without position independent code
 AC_ARG_ENABLE(pic,
 
 dnl Allow building without position independent code
 AC_ARG_ENABLE(pic,
@@ -897,6 +896,26 @@ if test "$llvm_cv_platform_type" = "Unix" ; then
   fi
 fi
 
   fi
 fi
 
+dnl atomic builtins are required for threading support.
+if test "$ENABLE_THREADS" -eq 1 ; then
+  AC_MSG_CHECKING(for GCC atomic builtins)
+  AC_LINK_IFELSE(
+       AC_LANG_SOURCE(
+          [[int main() { 
+              volatile unsigned long val = 1;
+              __sync_synchronize();
+              __sync_val_compare_and_swap(&val, 1, 0);
+              return 0;
+            }
+          ]]),
+        AC_MSG_RESULT(yes),
+        AC_MSG_RESULT(no)
+        AC_SUBST(ENABLE_THREADS, [0])
+        AC_MSG_WARN([Threading support disabled because atomic builtins are missing]))
+fi
+
+AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
+
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 9: Additional checks, variables, etc.
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 9: Additional checks, variables, etc.