aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/stubs/platform_macros.h
diff options
context:
space:
mode:
authorGravatar pliard@google.com <pliard@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2012-07-17 15:51:05 +0000
committerGravatar pliard@google.com <pliard@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2012-07-17 15:51:05 +0000
commitdaced74d777e6b0add8166a07de3f549cb4ca46c (patch)
treea8000d23d18fd74c91680148fc0ba35f09e65412 /src/google/protobuf/stubs/platform_macros.h
parentd0e03932c1890c70fa7625a27cd8c237e142a27e (diff)
Add support for NaCl in atomicops.
This does additionally a significant cleanup in platform_macros.h (initially pulled from v8). It implemented some subtleties that we don't use like the HOST/TARGET arch distinction. Changes related to NaCl support come from Chromium's build/build_config.h. BUG=392
Diffstat (limited to 'src/google/protobuf/stubs/platform_macros.h')
-rw-r--r--src/google/protobuf/stubs/platform_macros.h89
1 files changed, 12 insertions, 77 deletions
diff --git a/src/google/protobuf/stubs/platform_macros.h b/src/google/protobuf/stubs/platform_macros.h
index 0cda2b4c..cba9fbd0 100644
--- a/src/google/protobuf/stubs/platform_macros.h
+++ b/src/google/protobuf/stubs/platform_macros.h
@@ -38,92 +38,27 @@
// http://www.agner.org/optimize/calling_conventions.pdf
// or with gcc, run: "echo | gcc -E -dM -"
#if defined(_M_X64) || defined(__x86_64__)
-#define GOOGLE_PROTOBUF_HOST_ARCH_X64 1
-#define GOOGLE_PROTOBUF_HOST_ARCH_64_BIT 1
-#define GOOGLE_PROTOBUF_HOST_CAN_READ_UNALIGNED 1
+#define GOOGLE_PROTOBUF_ARCH_X64 1
+#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
#elif defined(_M_IX86) || defined(__i386__)
-#define GOOGLE_PROTOBUF_HOST_ARCH_IA32 1
-#define GOOGLE_PROTOBUF_HOST_ARCH_32_BIT 1
-#define GOOGLE_PROTOBUF_HOST_CAN_READ_UNALIGNED 1
+#define GOOGLE_PROTOBUF_ARCH_IA32 1
+#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__ARMEL__)
-#define GOOGLE_PROTOBUF_HOST_ARCH_ARM 1
-#define GOOGLE_PROTOBUF_HOST_ARCH_32_BIT 1
-// Some CPU-OS combinations allow unaligned access on ARM. We assume
-// that unaligned accesses are not allowed unless the build system
-// defines the CAN_USE_UNALIGNED_ACCESSES macro to be non-zero.
-#if CAN_USE_UNALIGNED_ACCESSES
-#define GOOGLE_PROTOBUF_HOST_CAN_READ_UNALIGNED 1
-#endif
+#define GOOGLE_PROTOBUF_ARCH_ARM 1
+#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__MIPSEL__)
-#define GOOGLE_PROTOBUF_HOST_ARCH_MIPS 1
-#define GOOGLE_PROTOBUF_HOST_ARCH_32_BIT 1
+#define GOOGLE_PROTOBUF_ARCH_MIPS 1
+#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
+#elif defined(__pnacl__)
+#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#else
#error Host architecture was not detected as supported by protobuf
#endif
-// Target architecture detection. This may be set externally. If not, detect
-// in the same way as the host architecture, that is, target the native
-// environment as presented by the compiler.
-#if !defined(GOOGLE_PROTOBUF_TARGET_ARCH_X64) && \
- !defined(GOOGLE_PROTOBUF_TARGET_ARCH_IA32) && \
- !defined(GOOGLE_PROTOBUF_TARGET_ARCH_ARM) && \
- !defined(GOOGLE_PROTOBUF_TARGET_ARCH_MIPS)
-#if defined(_M_X64) || defined(__x86_64__)
-#define GOOGLE_PROTOBUF_TARGET_ARCH_X64 1
-#elif defined(_M_IX86) || defined(__i386__)
-#define GOOGLE_PROTOBUF_TARGET_ARCH_IA32 1
-#elif defined(__ARMEL__)
-#define GOOGLE_PROTOBUF_TARGET_ARCH_ARM 1
-#elif defined(__MIPSEL__)
-#define GOOGLE_PROTOBUF_TARGET_ARCH_MIPS 1
-#else
-#error Target architecture was not detected as supported by protobuf
-#endif
-#endif
-
-// Check for supported combinations of host and target architectures.
-#if defined(GOOGLE_PROTOBUF_TARGET_ARCH_IA32) && \
- !defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32)
-#error Target architecture ia32 is only supported on ia32 host
-#endif
-#if defined(GOOGLE_PROTOBUF_TARGET_ARCH_X64) && \
- !defined(GOOGLE_PROTOBUF_HOST_ARCH_X64)
-#error Target architecture x64 is only supported on x64 host
-#endif
-#if (defined(GOOGLE_PROTOBUF_TARGET_ARCH_ARM) && \
- !(defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) || \
- defined(GOOGLE_PROTOBUF_HOST_ARCH_ARM)))
-#error Target architecture arm is only supported on arm and ia32 host
-#endif
-#if (defined(GOOGLE_PROTOBUF_TARGET_ARCH_MIPS) && \
- !(defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) || \
- defined(GOOGLE_PROTOBUF_HOST_ARCH_MIPS)))
-#error Target architecture mips is only supported on mips and ia32 host
-#endif
-
-// Define unaligned read for the target architectures supporting it.
-#if defined(GOOGLE_PROTOBUF_TARGET_ARCH_X64) || \
- defined(GOOGLE_PROTOBUF_TARGET_ARCH_IA32)
-#define GOOGLE_PROTOBUF_TARGET_CAN_READ_UNALIGNED 1
-#elif GOOGLE_PROTOBUF_TARGET_ARCH_ARM
-// Some CPU-OS combinations allow unaligned access on ARM. We assume
-// that unaligned accesses are not allowed unless the build system
-// defines the CAN_USE_UNALIGNED_ACCESSES macro to be non-zero.
-#if CAN_USE_UNALIGNED_ACCESSES
-#define GOOGLE_PROTOBUF_TARGET_CAN_READ_UNALIGNED 1
-#endif
-#elif GOOGLE_PROTOBUF_TARGET_ARCH_MIPS
-#else
-#error Target architecture is not supported by protobuf
-#endif
-
-#if (defined(__APPLE__) && defined(__MACH__)) || \
- defined(__FreeBSD__) || defined(__OpenBSD__)
-#define GOOGLE_PROTOBUF_USING_BSD_ABI
-#endif
-
#if defined(__APPLE__)
#define GOOGLE_PROTOBUF_OS_APPLE
+#elif defined(__native_client__)
+#define GOOGLE_PROTOBUF_OS_NACL
#endif
#endif // GOOGLE_PROTOBUF_PLATFORM_MACROS_H_