1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker // This file contains platform-specific typedefs and defines. 12*d9f75844SAndroid Build Coastguard Worker // Much of it is derived from Chromium's build/build_config.h. 13*d9f75844SAndroid Build Coastguard Worker 14*d9f75844SAndroid Build Coastguard Worker #ifndef RTC_BASE_SYSTEM_ARCH_H_ 15*d9f75844SAndroid Build Coastguard Worker #define RTC_BASE_SYSTEM_ARCH_H_ 16*d9f75844SAndroid Build Coastguard Worker 17*d9f75844SAndroid Build Coastguard Worker // Processor architecture detection. For more info on what's defined, see: 18*d9f75844SAndroid Build Coastguard Worker // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros 19*d9f75844SAndroid Build Coastguard Worker // https://www.agner.org/optimize/calling_conventions.pdf 20*d9f75844SAndroid Build Coastguard Worker // https://sourceforge.net/p/predef/wiki/Architectures/ 21*d9f75844SAndroid Build Coastguard Worker // or with gcc, run: "echo | gcc -E -dM -" 22*d9f75844SAndroid Build Coastguard Worker #if defined(_M_X64) || defined(__x86_64__) 23*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_X86_FAMILY 24*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_X86_64 25*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 26*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 27*d9f75844SAndroid Build Coastguard Worker #elif defined(_M_ARM64) || defined(__aarch64__) 28*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_ARM_FAMILY 29*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 30*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 31*d9f75844SAndroid Build Coastguard Worker #elif defined(_M_IX86) || defined(__i386__) 32*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_X86_FAMILY 33*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_X86 34*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 35*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 36*d9f75844SAndroid Build Coastguard Worker #elif defined(_M_ARM) || defined(__ARMEL__) 37*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_ARM_FAMILY 38*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 39*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 40*d9f75844SAndroid Build Coastguard Worker #elif defined(__MIPSEL__) || defined(__MIPSEB__) 41*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_MIPS_FAMILY 42*d9f75844SAndroid Build Coastguard Worker #if defined(__LP64__) 43*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 44*d9f75844SAndroid Build Coastguard Worker #else 45*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 46*d9f75844SAndroid Build Coastguard Worker #endif 47*d9f75844SAndroid Build Coastguard Worker #if defined(__MIPSEL__) 48*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 49*d9f75844SAndroid Build Coastguard Worker #else 50*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_BIG_ENDIAN 51*d9f75844SAndroid Build Coastguard Worker #endif 52*d9f75844SAndroid Build Coastguard Worker #elif defined(__PPC__) 53*d9f75844SAndroid Build Coastguard Worker #if defined(__PPC64__) 54*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 55*d9f75844SAndroid Build Coastguard Worker #else 56*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 57*d9f75844SAndroid Build Coastguard Worker #endif 58*d9f75844SAndroid Build Coastguard Worker #if defined(__LITTLE_ENDIAN__) 59*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 60*d9f75844SAndroid Build Coastguard Worker #else 61*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_BIG_ENDIAN 62*d9f75844SAndroid Build Coastguard Worker #endif 63*d9f75844SAndroid Build Coastguard Worker #elif defined(__sparc) || defined(__sparc__) 64*d9f75844SAndroid Build Coastguard Worker #if __SIZEOF_LONG__ == 8 65*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 66*d9f75844SAndroid Build Coastguard Worker #else 67*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 68*d9f75844SAndroid Build Coastguard Worker #endif 69*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_BIG_ENDIAN 70*d9f75844SAndroid Build Coastguard Worker #elif defined(__riscv) && __riscv_xlen == 64 71*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 72*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 73*d9f75844SAndroid Build Coastguard Worker #elif defined(__riscv) && __riscv_xlen == 32 74*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 75*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 76*d9f75844SAndroid Build Coastguard Worker #elif defined(__loongarch32) 77*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LOONG_FAMILY 78*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LOONG32 79*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 80*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 81*d9f75844SAndroid Build Coastguard Worker #elif defined(__loongarch64) 82*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LOONG_FAMILY 83*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LOONG64 84*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_64_BITS 85*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 86*d9f75844SAndroid Build Coastguard Worker #elif defined(__pnacl__) 87*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 88*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 89*d9f75844SAndroid Build Coastguard Worker #elif defined(__EMSCRIPTEN__) 90*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_32_BITS 91*d9f75844SAndroid Build Coastguard Worker #define WEBRTC_ARCH_LITTLE_ENDIAN 92*d9f75844SAndroid Build Coastguard Worker #else 93*d9f75844SAndroid Build Coastguard Worker #error Please add support for your architecture in rtc_base/system/arch.h 94*d9f75844SAndroid Build Coastguard Worker #endif 95*d9f75844SAndroid Build Coastguard Worker 96*d9f75844SAndroid Build Coastguard Worker #if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN)) 97*d9f75844SAndroid Build Coastguard Worker #error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN 98*d9f75844SAndroid Build Coastguard Worker #endif 99*d9f75844SAndroid Build Coastguard Worker 100*d9f75844SAndroid Build Coastguard Worker #endif // RTC_BASE_SYSTEM_ARCH_H_ 101