xref: /aosp_15_r20/external/webrtc/rtc_base/system/arch.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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