+// Debug
+namespace folly {
+#ifdef NDEBUG
+constexpr auto kIsDebug = false;
+#else
+constexpr auto kIsDebug = true;
+#endif
+} // namespace folly
+
+// Endianness
+namespace folly {
+#ifdef _MSC_VER
+// It's MSVC, so we just have to guess ... and allow an override
+#ifdef FOLLY_ENDIAN_BE
+constexpr auto kIsLittleEndian = false;
+#else
+constexpr auto kIsLittleEndian = true;
+#endif
+#else
+constexpr auto kIsLittleEndian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__;
+#endif
+constexpr auto kIsBigEndian = !kIsLittleEndian;
+} // namespace folly
+
+#ifndef FOLLY_SSE
+# if defined(__SSE4_2__)
+# define FOLLY_SSE 4
+# define FOLLY_SSE_MINOR 2
+# elif defined(__SSE4_1__)
+# define FOLLY_SSE 4
+# define FOLLY_SSE_MINOR 1
+# elif defined(__SSE4__)
+# define FOLLY_SSE 4
+# define FOLLY_SSE_MINOR 0
+# elif defined(__SSE3__)
+# define FOLLY_SSE 3
+# define FOLLY_SSE_MINOR 0
+# elif defined(__SSE2__)
+# define FOLLY_SSE 2
+# define FOLLY_SSE_MINOR 0
+# elif defined(__SSE__)
+# define FOLLY_SSE 1
+# define FOLLY_SSE_MINOR 0
+# else
+# define FOLLY_SSE 0
+# define FOLLY_SSE_MINOR 0
+# endif
+#endif
+
+#define FOLLY_SSE_PREREQ(major, minor) \
+ (FOLLY_SSE > major || FOLLY_SSE == major && FOLLY_SSE_MINOR >= minor)
+