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