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 #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