Home | History | Annotate | Download | only in g722
      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