• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 // This file contains platform-specific typedefs and defines.
12 // Much of it is derived from Chromium's build/build_config.h.
13 
14 #ifndef WEBRTC_TYPEDEFS_H_
15 #define WEBRTC_TYPEDEFS_H_
16 
17 // Processor architecture detection.  For more info on what's defined, see:
18 //   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
19 //   http://www.agner.org/optimize/calling_conventions.pdf
20 //   or with gcc, run: "echo | gcc -E -dM -"
21 #if defined(_M_X64) || defined(__x86_64__)
22 #define WEBRTC_ARCH_X86_FAMILY
23 #define WEBRTC_ARCH_X86_64
24 #define WEBRTC_ARCH_64_BITS
25 #define WEBRTC_ARCH_LITTLE_ENDIAN
26 #elif defined(__aarch64__)
27 #define WEBRTC_ARCH_64_BITS
28 #define WEBRTC_ARCH_LITTLE_ENDIAN
29 #elif defined(_M_IX86) || defined(__i386__)
30 #define WEBRTC_ARCH_X86_FAMILY
31 #define WEBRTC_ARCH_X86
32 #define WEBRTC_ARCH_32_BITS
33 #define WEBRTC_ARCH_LITTLE_ENDIAN
34 #elif defined(__ARMEL__)
35 // TODO(ajm): We'd prefer to control platform defines here, but this is
36 // currently provided by the Android makefiles. Commented to avoid duplicate
37 // definition warnings.
38 //#define WEBRTC_ARCH_ARM
39 // TODO(ajm): Chromium uses the following two defines. Should we switch?
40 //#define WEBRTC_ARCH_ARM_FAMILY
41 //#define WEBRTC_ARCH_ARMEL
42 #define WEBRTC_ARCH_32_BITS
43 #define WEBRTC_ARCH_LITTLE_ENDIAN
44 #elif defined(__MIPSEL__)
45 #define WEBRTC_ARCH_32_BITS
46 #define WEBRTC_ARCH_LITTLE_ENDIAN
47 #elif defined(__pnacl__)
48 #define WEBRTC_ARCH_32_BITS
49 #define WEBRTC_ARCH_LITTLE_ENDIAN
50 #else
51 #error Please add support for your architecture in typedefs.h
52 #endif
53 
54 #if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN))
55 #error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN
56 #endif
57 
58 #if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)) ||  \
59     (defined(WEBRTC_ARCH_ARM_V7) && !defined(WEBRTC_ARCH_ARM_NEON))
60 #define WEBRTC_CPU_DETECTION
61 #endif
62 
63 #if !defined(_MSC_VER)
64 #include <stdint.h>
65 #else
66 // Define C99 equivalent types, since pre-2010 MSVC doesn't provide stdint.h.
67 typedef signed char         int8_t;
68 typedef signed short        int16_t;
69 typedef signed int          int32_t;
70 typedef __int64             int64_t;
71 typedef unsigned char       uint8_t;
72 typedef unsigned short      uint16_t;
73 typedef unsigned int        uint32_t;
74 typedef unsigned __int64    uint64_t;
75 #endif
76 
77 // Borrowed from Chromium's base/compiler_specific.h.
78 // Annotate a virtual method indicating it must be overriding a virtual
79 // method in the parent class.
80 // Use like:
81 //   virtual void foo() OVERRIDE;
82 #if defined(_MSC_VER)
83 #define OVERRIDE override
84 #elif defined(__clang__)
85 // Clang defaults to C++03 and warns about using override. Squelch that.
86 // Intentionally no push/pop here so all users of OVERRIDE ignore the warning
87 // too. This is like passing -Wno-c++11-extensions, except that GCC won't die
88 // (because it won't see this pragma).
89 #pragma clang diagnostic ignored "-Wc++11-extensions"
90 #define OVERRIDE override
91 #elif defined(__GNUC__) && __cplusplus >= 201103 && \
92     (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40700
93 // GCC 4.7 supports explicit virtual overrides when C++11 support is enabled.
94 #define OVERRIDE override
95 #else
96 #define OVERRIDE
97 #endif
98 
99 // Annotate a function indicating the caller must examine the return value.
100 // Use like:
101 //   int foo() WARN_UNUSED_RESULT;
102 // TODO(ajm): Hack to avoid multiple definitions until the base/ of webrtc and
103 // libjingle are merged.
104 #if !defined(WARN_UNUSED_RESULT)
105 #if defined(__GNUC__)
106 #define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
107 #else
108 #define WARN_UNUSED_RESULT
109 #endif
110 #endif  // WARN_UNUSED_RESULT
111 
112 #endif  // WEBRTC_TYPEDEFS_H_
113