Home | History | Annotate | Download | only in src
      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 #elif defined(__aarch64__)
     80 #define WEBRTC_ARCH_64_BITS
     81 #define WEBRTC_ARCH_LITTLE_ENDIAN
     82 #elif defined(__mips__)
     83 #define WEBRTC_ARCH_32_BITS
     84 #define WEBRTC_ARCH_LITTLE_ENDIAN
     85 #else
     86 #error Please add support for your architecture in typedefs.h
     87 #endif
     88 
     89 #if defined(__SSE2__) || defined(_MSC_VER)
     90 #define WEBRTC_USE_SSE2
     91 #endif
     92 
     93 #if defined(WEBRTC_TARGET_PC)
     94 
     95 #if !defined(_MSC_VER)
     96   #include <stdint.h>
     97 #else
     98     // Define C99 equivalent types.
     99     // Since MSVC doesn't include these headers, we have to write our own
    100     // version to provide a compatibility layer between MSVC and the WebRTC
    101     // headers.
    102     typedef signed char         int8_t;
    103     typedef signed short        int16_t;
    104     typedef signed int          int32_t;
    105     typedef signed long long    int64_t;
    106     typedef unsigned char       uint8_t;
    107     typedef unsigned short      uint16_t;
    108     typedef unsigned int        uint32_t;
    109     typedef unsigned long long  uint64_t;
    110 #endif
    111 
    112 #if defined(WIN32)
    113     typedef __int64             WebRtc_Word64;
    114     typedef unsigned __int64    WebRtc_UWord64;
    115 #else
    116     typedef int64_t             WebRtc_Word64;
    117     typedef uint64_t            WebRtc_UWord64;
    118 #endif
    119     typedef int32_t             WebRtc_Word32;
    120     typedef uint32_t            WebRtc_UWord32;
    121     typedef int16_t             WebRtc_Word16;
    122     typedef uint16_t            WebRtc_UWord16;
    123     typedef char                WebRtc_Word8;
    124     typedef uint8_t             WebRtc_UWord8;
    125 
    126     // Define endian for the platform
    127     #define WEBRTC_LITTLE_ENDIAN
    128 
    129 #elif defined(WEBRTC_TARGET_MAC_INTEL)
    130     #include <stdint.h>
    131 
    132     typedef int64_t             WebRtc_Word64;
    133     typedef uint64_t            WebRtc_UWord64;
    134     typedef int32_t             WebRtc_Word32;
    135     typedef uint32_t            WebRtc_UWord32;
    136     typedef int16_t             WebRtc_Word16;
    137     typedef char                WebRtc_Word8;
    138     typedef uint16_t            WebRtc_UWord16;
    139     typedef uint8_t             WebRtc_UWord8;
    140 
    141     // Define endian for the platform
    142     #define WEBRTC_LITTLE_ENDIAN
    143 
    144 #else
    145     #error "No platform defined for WebRTC type definitions (typedefs.h)"
    146 #endif
    147 
    148 #endif  // WEBRTC_TYPEDEFS_H_
    149