[libc++/libc++abi] Automatically detect whether exceptions are enabled
Instead of detecting it automatically (in libc++) and relying on
_LIBCXXABI_NO_EXCEPTIONS being set explicitly (in libc++abi), always
detect whether exceptions are enabled automatically.
This commit also removes support for specifying -D_LIBCPP_NO_EXCEPTIONS
and -D_LIBCXXABI_NO_EXCEPTIONS explicitly -- those should just be inferred
from using -fno-exceptions (or an equivalent flag).
Allowing both -D_FOO_NO_EXCEPTIONS to be provided explicitly and trying
to detect it automatically is just confusing, especially since we did
specify it explicitly when building libc++abi. We should have only one
way to detect whether exceptions are enabled, but it should be robust.
GitOrigin-RevId: 71d88cebfb42c8c5ac2d54b42afdcca956e55660
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c577036..b6f1f08 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -307,7 +307,6 @@
# Do we really need to be run through the C compiler ?
add_c_compile_flags_if_supported(-funwind-tables)
else()
- add_definitions(-D_LIBCXXABI_NO_EXCEPTIONS)
add_compile_flags_if_supported(-fno-exceptions)
add_compile_flags_if_supported(-EHs-)
add_compile_flags_if_supported(-EHa-)
diff --git a/include/__cxxabi_config.h b/include/__cxxabi_config.h
index cbbb1c1..b5444d6 100644
--- a/include/__cxxabi_config.h
+++ b/include/__cxxabi_config.h
@@ -76,4 +76,12 @@
# define _LIBCXXABI_GUARD_ABI_ARM
#endif
+#if defined(_LIBCXXABI_COMPILER_CLANG)
+# if !__has_feature(cxx_exceptions)
+# define _LIBCXXABI_NO_EXCEPTIONS
+# endif
+#elif defined(_LIBCXXABI_COMPILER_GCC) && !__EXCEPTIONS
+# define _LIBCXXABI_NO_EXCEPTIONS
+#endif
+
#endif // ____CXXABI_CONFIG_H