aboutsummaryrefslogtreecommitdiffhomepage
path: root/absl/base/config.h
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2017-10-30 07:44:54 -0700
committerGravatar misterg <misterg@google.com>2017-10-30 15:04:23 -0400
commitc8bd28c58ba962abfe1b23633cae649099815a56 (patch)
treefcd29fd162291b36cf96f8fde9a16e3e7ca9084f /absl/base/config.h
parent0fece732a21c5ae8fef5fa8b3f0b8487bca68d83 (diff)
Changes imported from Abseil "staging" branch:
- 0726b35bb91aa98b87b340db9019fe7bdb19fe52 Fixing typo when checking CUDA compiler version, and use ... by Abseil Team <absl-team@google.com> - 3c94139e0e2ca6387c0498f24c9e44172208fffc Update comment of GUARDED_BY to match feedback provided b... by Abseil Team <absl-team@google.com> - 116d0427b845613213e26afc1203621ac7bd6910 Turn off ABSL TLS support for buggy versions of the Andro... by Abseil Team <absl-team@google.com> GitOrigin-RevId: 0726b35bb91aa98b87b340db9019fe7bdb19fe52 Change-Id: I861e4fb27d77904e705ccbcb4054f10c3f43e158
Diffstat (limited to 'absl/base/config.h')
-rw-r--r--absl/base/config.h55
1 files changed, 32 insertions, 23 deletions
diff --git a/absl/base/config.h b/absl/base/config.h
index 495811b..8a44c06 100644
--- a/absl/base/config.h
+++ b/absl/base/config.h
@@ -93,28 +93,6 @@
#define ABSL_HAVE_TLS 1
#endif
-// There are platforms for which TLS should not be used even though the compiler
-// makes it seem like it's supported (Android NDK < r12b for example).
-// This is primarily because of linker problems and toolchain misconfiguration:
-// Abseil does not intend to support this indefinitely. Currently, the newest
-// toolchain that we intend to support that requires this behavior is the
-// r11 NDK - allowing for a 5 year support window on that means this option
-// is likely to be removed around June of 2021.
-#if defined(__ANDROID__) && defined(__clang__)
-#if __has_include(<android/ndk-version.h>)
-#include <android/ndk-version.h>
-#endif
-// TLS isn't supported until NDK r12b per
-// https://developer.android.com/ndk/downloads/revision_history.html
-// Since NDK r16, `__NDK_MAJOR__` and `__NDK_MINOR__` are defined in
-// <android/ndk-version.h>. For NDK < r16, users should define these macros,
-// e.g. `-D__NDK_MAJOR__=11 -D__NKD_MINOR__=0` for NDK r11.
-#if defined(__NDK_MAJOR__) && defined(__NDK_MINOR__) && \
- ((__NDK_MAJOR__ < 12) || ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))
-#undef ABSL_HAVE_TLS
-#endif
-#endif // defined(__ANDROID__) && defined(__clang__)
-
// ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE
//
// Checks whether `std::is_trivially_destructible<T>` is supported.
@@ -168,6 +146,30 @@
#define ABSL_HAVE_THREAD_LOCAL 1
#endif
+// There are platforms for which TLS should not be used even though the compiler
+// makes it seem like it's supported (Android NDK < r12b for example).
+// This is primarily because of linker problems and toolchain misconfiguration:
+// Abseil does not intend to support this indefinitely. Currently, the newest
+// toolchain that we intend to support that requires this behavior is the
+// r11 NDK - allowing for a 5 year support window on that means this option
+// is likely to be removed around June of 2021.
+// TLS isn't supported until NDK r12b per
+// https://developer.android.com/ndk/downloads/revision_history.html
+// Since NDK r16, `__NDK_MAJOR__` and `__NDK_MINOR__` are defined in
+// <android/ndk-version.h>. For NDK < r16, users should define these macros,
+// e.g. `-D__NDK_MAJOR__=11 -D__NKD_MINOR__=0` for NDK r11.
+#if defined(__ANDROID__) && defined(__clang__)
+#if __has_include(<android/ndk-version.h>)
+#include <android/ndk-version.h>
+#endif // __has_include(<android/ndk-version.h>)
+#if defined(__ANDROID__) && defined(__clang__) && defined(__NDK_MAJOR__) && \
+ defined(__NDK_MINOR__) && \
+ ((__NDK_MAJOR__ < 12) || ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))
+#undef ABSL_HAVE_TLS
+#undef ABSL_HAVE_THREAD_LOCAL
+#endif
+#endif // defined(__ANDROID__) && defined(__clang__)
+
// ABSL_HAVE_INTRINSIC_INT128
//
// Checks whether the __int128 compiler extension for a 128-bit integral type is
@@ -182,10 +184,17 @@
#elif (defined(__clang__) && defined(__SIZEOF_INT128__) && \
!defined(__aarch64__)) || \
(defined(__CUDACC__) && defined(__SIZEOF_INT128__) && \
- __CUDACC_VER__ >= 70000) || \
+ __CUDACC_VER_MAJOR__ >= 9) || \
(!defined(__clang__) && !defined(__CUDACC__) && defined(__GNUC__) && \
defined(__SIZEOF_INT128__))
#define ABSL_HAVE_INTRINSIC_INT128 1
+// __CUDACC_VER__ is a full version number before CUDA 9, and is defined to a
+// std::string explaining that it has been removed starting with CUDA 9. We can't
+// compare both variants in a single boolean expression because there is no
+// short-circuiting in the preprocessor.
+#elif defined(__CUDACC__) && defined(__SIZEOF_INT128__) && \
+ __CUDACC_VER__ >= 7000
+#define ABSL_HAVE_INTRINSIC_INT128 1
#endif
// ABSL_HAVE_EXCEPTIONS