• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2011 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 
13 #ifndef WEBRTC_TYPEDEFS_H_
14 #define WEBRTC_TYPEDEFS_H_
15 
16 // Reserved words definitions
17 // TODO(andrew): Look at removing these.
18 #define WEBRTC_EXTERN extern
19 #define G_CONST const
20 #define WEBRTC_INLINE extern __inline
21 
22 // Define WebRTC preprocessor identifiers based on the current build platform.
23 // TODO(andrew): Clean these up. We can probably remove everything in this
24 // block.
25 //   - TARGET_MAC_INTEL and TARGET_MAC aren't used anywhere.
26 //   - In the few places where TARGET_PC is used, it should be replaced by
27 //     something more specific.
28 //   - Do we really support PowerPC? Probably not. Remove WEBRTC_MAC_INTEL
29 //     from build/common.gypi as well.
30 #if defined(WIN32)
31     // Windows & Windows Mobile.
32     #if !defined(WEBRTC_TARGET_PC)
33         #define WEBRTC_TARGET_PC
34     #endif
35 #elif defined(__APPLE__)
36     // Mac OS X.
37     #if defined(__LITTLE_ENDIAN__ )
38         #if !defined(WEBRTC_TARGET_MAC_INTEL)
39             #define WEBRTC_TARGET_MAC_INTEL
40         #endif
41     #else
42         #if !defined(WEBRTC_TARGET_MAC)
43             #define WEBRTC_TARGET_MAC
44         #endif
45     #endif
46 #else
47     // Linux etc.
48     #if !defined(WEBRTC_TARGET_PC)
49         #define WEBRTC_TARGET_PC
50     #endif
51 #endif
52 
53 // Derived from Chromium's build/build_config.h
54 // Processor architecture detection.  For more info on what's defined, see:
55 //   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
56 //   http://www.agner.org/optimize/calling_conventions.pdf
57 //   or with gcc, run: "echo | gcc -E -dM -"
58 // TODO(andrew): replace WEBRTC_LITTLE_ENDIAN with WEBRTC_ARCH_LITTLE_ENDIAN?
59 #if defined(_M_X64) || defined(__x86_64__)
60 #define WEBRTC_ARCH_X86_FAMILY
61 #define WEBRTC_ARCH_X86_64
62 #define WEBRTC_ARCH_64_BITS
63 #define WEBRTC_ARCH_LITTLE_ENDIAN
64 #elif defined(_M_IX86) || defined(__i386__)
65 #define WEBRTC_ARCH_X86_FAMILY
66 #define WEBRTC_ARCH_X86
67 #define WEBRTC_ARCH_32_BITS
68 #define WEBRTC_ARCH_LITTLE_ENDIAN
69 #elif defined(__ARMEL__)
70 // TODO(andrew): We'd prefer to control platform defines here, but this is
71 // currently provided by the Android makefiles. Commented to avoid duplicate
72 // definition warnings.
73 //#define WEBRTC_ARCH_ARM
74 // TODO(andrew): Chromium uses the following two defines. Should we switch?
75 //#define WEBRTC_ARCH_ARM_FAMILY
76 //#define WEBRTC_ARCH_ARMEL
77 #define WEBRTC_ARCH_32_BITS
78 #define WEBRTC_ARCH_LITTLE_ENDIAN
79 #else
80 #error Please add support for your architecture in typedefs.h
81 #endif
82 
83 #if defined(__SSE2__) || defined(_MSC_VER)
84 #define WEBRTC_USE_SSE2
85 #endif
86 
87 #if defined(WEBRTC_TARGET_PC)
88 
89 #if !defined(_MSC_VER)
90   #include <stdint.h>
91 #else
92     // Define C99 equivalent types.
93     // Since MSVC doesn't include these headers, we have to write our own
94     // version to provide a compatibility layer between MSVC and the WebRTC
95     // headers.
96     typedef signed char         int8_t;
97     typedef signed short        int16_t;
98     typedef signed int          int32_t;
99     typedef signed long long    int64_t;
100     typedef unsigned char       uint8_t;
101     typedef unsigned short      uint16_t;
102     typedef unsigned int        uint32_t;
103     typedef unsigned long long  uint64_t;
104 #endif
105 
106 #if defined(WIN32)
107     typedef __int64             WebRtc_Word64;
108     typedef unsigned __int64    WebRtc_UWord64;
109 #else
110     typedef int64_t             WebRtc_Word64;
111     typedef uint64_t            WebRtc_UWord64;
112 #endif
113     typedef int32_t             WebRtc_Word32;
114     typedef uint32_t            WebRtc_UWord32;
115     typedef int16_t             WebRtc_Word16;
116     typedef uint16_t            WebRtc_UWord16;
117     typedef char                WebRtc_Word8;
118     typedef uint8_t             WebRtc_UWord8;
119 
120     // Define endian for the platform
121     #define WEBRTC_LITTLE_ENDIAN
122 
123 #elif defined(WEBRTC_TARGET_MAC_INTEL)
124     #include <stdint.h>
125 
126     typedef int64_t             WebRtc_Word64;
127     typedef uint64_t            WebRtc_UWord64;
128     typedef int32_t             WebRtc_Word32;
129     typedef uint32_t            WebRtc_UWord32;
130     typedef int16_t             WebRtc_Word16;
131     typedef char                WebRtc_Word8;
132     typedef uint16_t            WebRtc_UWord16;
133     typedef uint8_t             WebRtc_UWord8;
134 
135     // Define endian for the platform
136     #define WEBRTC_LITTLE_ENDIAN
137 
138 #else
139     #error "No platform defined for WebRTC type definitions (typedefs.h)"
140 #endif
141 
142 #endif  // WEBRTC_TYPEDEFS_H_
143