Index: include/core/SkTypes.h |
diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h |
index 4e95c69f3229cdfc63b95cd2e1fa6bdaeccd8caf..b38268231df1a818d913d559e68e33a0d3dd32b1 100644 |
--- a/include/core/SkTypes.h |
+++ b/include/core/SkTypes.h |
@@ -9,6 +9,22 @@ |
#define SkTypes_DEFINED |
// IWYU pragma: begin_exports |
+ |
+// In at least two known scenarios when using GCC with libc++: |
+// * GCC 4.8 targeting ARMv7 with NEON |
+// * GCC 4.9 targeting ARMv8 64 bit |
+// we need to typedef float float32_t (or include <arm_neon.h> which does that) |
+// before #including <memory>. This makes no sense. I'm not very interested in |
+// understanding why... these are old, bizarre platform configuration that we |
+// should just let die. |
+#include <ciso646> // Include something innocuous to define _LIBCPP_VERISON if it's libc++. |
+#if defined(__GNUC__) && __GNUC__ == 4 \ |
+ && ((defined(SK_CPU_ARM32) && defined(SK_ARM_HAS_NEON)) || defined(SK_CPU_ARM64)) \ |
+ && defined(_LIBCPP_VERSION) |
+ typedef float float32_t; |
+ #include <memory> |
+#endif |
+ |
#include "SkPreConfig.h" |
#include "SkUserConfig.h" |
#include "SkPostConfig.h" |