From 0642847e85a0517c4063e23f21dcd18052e8d94c Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang-solutions.com>
Date: Mon, 29 Jul 2013 15:08:18 +0200
Subject: Bailout if no native implementations are found

Some basic tests are already done in configure. This makes sure we
cover all cases by bailing out when compiling as well.
---
 erts/configure.in               | 5 ++++-
 erts/include/internal/ethread.h | 4 ++++
 2 files changed, 8 insertions(+), 1 deletion(-)

(limited to 'erts')

diff --git a/erts/configure.in b/erts/configure.in
index 2f624e5853..64436e933c 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -1051,12 +1051,15 @@ if test $ERTS_BUILD_SMP_EMU = yes; then
 
 	AC_DEFINE(ERTS_HAVE_SMP_EMU, 1, [Define if the smp emulator is built])
 
+	test "X$smp_require_native_atomics" = "Xyes" &&
+	     AC_DEFINE(ETHR_SMP_REQUIRE_NATIVE_IMPLS, 1, [Define if you want to enable check for native ethread implementations])
+
 	case "$ethr_have_native_atomics-$smp_require_native_atomics-$ethr_have_native_spinlock" in
 	  yes-*)
 		;;
 
 	  no-yes-*)
-		AC_MSG_ERROR([No native atomic implementation found. See INSTALL.md for more information.])
+		AC_MSG_ERROR([No native atomic implementation found. See Configuring section in INSTALL.md for more information.])
 		;;
 
 	  no-no-yes)
diff --git a/erts/include/internal/ethread.h b/erts/include/internal/ethread.h
index 407097d4b1..38b8e9e9b6 100644
--- a/erts/include/internal/ethread.h
+++ b/erts/include/internal/ethread.h
@@ -361,6 +361,10 @@ extern ethr_runtime_t ethr_runtime__;
 #  endif
 #endif /* !ETHR_DISABLE_NATIVE_IMPLS */
 
+#if !defined(ETHR_HAVE_NATIVE_ATOMIC32) && !defined(ETHR_HAVE_NATIVE_ATOMIC64) && !defined(ETHR_DISABLE_NATIVE_IMPLS) && defined(ETHR_SMP_REQUIRE_NATIVE_IMPLS)
+#error "No native ethread implementation found. If you want to use fallbacks you have to disable native ethread support with configure."
+#endif
+
 #include "ethr_atomics.h" /* The atomics API */
 
 #if defined(__GNUC__)
-- 
cgit v1.2.3