diff options
author | pliard@google.com <pliard@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2012-07-17 15:51:05 +0000 |
---|---|---|
committer | pliard@google.com <pliard@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2012-07-17 15:51:05 +0000 |
commit | daced74d777e6b0add8166a07de3f549cb4ca46c (patch) | |
tree | a8000d23d18fd74c91680148fc0ba35f09e65412 /src/google/protobuf/stubs/platform_macros.h | |
parent | d0e03932c1890c70fa7625a27cd8c237e142a27e (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.h | 89 |
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_ |