Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Modules/CMakeCompilerABI.h
5012 views
1
2
/* Size of a pointer-to-data in bytes. */
3
#define SIZEOF_DPTR (sizeof(void*))
4
char const info_sizeof_dptr[] = {
5
/* clang-format off */
6
'I', 'N', 'F', 'O', ':', 's', 'i', 'z', 'e', 'o', 'f', '_', 'd', 'p', 't',
7
'r', '[', ('0' + ((SIZEOF_DPTR / 10) % 10)), ('0' + (SIZEOF_DPTR % 10)), ']',
8
'\0'
9
/* clang-format on */
10
};
11
12
/* Byte order. Only one of these will have bytes in the right order. */
13
static unsigned short const info_byte_order_big_endian[] = {
14
/* INFO:byte_order string for BIG_ENDIAN */
15
0x494E, 0x464F, 0x3A62, 0x7974, 0x655F, 0x6F72, 0x6465, 0x725B,
16
0x4249, 0x475F, 0x454E, 0x4449, 0x414E, 0x5D00, 0x0000
17
};
18
static unsigned short const info_byte_order_little_endian[] = {
19
/* INFO:byte_order string for LITTLE_ENDIAN */
20
0x4E49, 0x4F46, 0x623A, 0x7479, 0x5F65, 0x726F, 0x6564, 0x5B72,
21
0x494C, 0x5454, 0x454C, 0x455F, 0x444E, 0x4149, 0x5D4E, 0x0000
22
};
23
24
/* Application Binary Interface. */
25
26
/* Check for (some) ARM ABIs.
27
* See e.g. http://wiki.debian.org/ArmEabiPort for some information on this. */
28
#if defined(__GNU__) && defined(__ELF__) && defined(__ARM_EABI__)
29
# define ABI_ID "ELF ARMEABI"
30
#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEB__)
31
# define ABI_ID "ELF ARM"
32
#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEL__)
33
# define ABI_ID "ELF ARM"
34
35
#elif defined(__linux__) && defined(__ELF__) && defined(__amd64__) && \
36
defined(__ILP32__)
37
# define ABI_ID "ELF X32"
38
39
#elif defined(__ELF__)
40
# define ABI_ID "ELF"
41
#endif
42
43
/* Sync with:
44
* Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
45
* Modules/CMakeFortranCompilerABI.F
46
* Modules/CMakeFortranCompilerABI.F90
47
* Modules/Internal/CMakeParseCompilerArchitectureId.cmake
48
*/
49
#if defined(__APPLE__) && defined(__arm64__)
50
# if defined(__ARM64_ARCH_8_32__)
51
# define ARCHITECTURE_ID "arm64_32"
52
# elif defined(__arm64e__)
53
# define ARCHITECTURE_ID "arm64e"
54
# else
55
# define ARCHITECTURE_ID "arm64"
56
# endif
57
#elif defined(_MSC_VER) && defined(_M_ARM64EC)
58
# define ARCHITECTURE_ID "arm64ec"
59
#elif defined(_MSC_VER) && defined(_M_ARM64)
60
# define ARCHITECTURE_ID "arm64"
61
#elif defined(__arm64ec__)
62
# define ARCHITECTURE_ID "arm64ec"
63
#elif defined(__aarch64__)
64
# define ARCHITECTURE_ID "aarch64"
65
#elif __ARM_ARCH == 7 || _M_ARM == 7 || defined(__ARM_ARCH_7__) || \
66
defined(__TI_ARM_V7__)
67
# if defined(__APPLE__) && defined(__ARM_ARCH_7K__)
68
# define ARCHITECTURE_ID "armv7k"
69
# elif defined(__APPLE__) && defined(__ARM_ARCH_7S__)
70
# define ARCHITECTURE_ID "armv7s"
71
# else
72
# define ARCHITECTURE_ID "armv7"
73
# endif
74
#elif __ARM_ARCH == 6 || _M_ARM == 6 || defined(__ARM_ARCH_6__) || \
75
defined(__TI_ARM_V6__)
76
# define ARCHITECTURE_ID "armv6"
77
#elif __ARM_ARCH == 5 || _M_ARM == 5 || defined(__ARM_ARCH_5__) || \
78
defined(__TI_ARM_V5__)
79
# define ARCHITECTURE_ID "armv5"
80
#elif defined(__alpha) || defined(__alpha) || defined(_M_ALPHA)
81
# define ARCHITECTURE_ID "alpha"
82
#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || \
83
defined(__amd64__) || defined(_M_X64) || defined(_M_AMD64)
84
# define ARCHITECTURE_ID "x86_64"
85
#elif defined(__i686) || defined(__i686__) || _M_IX86 == 600
86
# define ARCHITECTURE_ID "i686"
87
#elif defined(__i586) || defined(__i586__) || _M_IX86 == 500
88
# define ARCHITECTURE_ID "i586"
89
#elif defined(__i486) || defined(__i486__) || _M_IX86 == 400
90
# define ARCHITECTURE_ID "i486"
91
#elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
92
# define ARCHITECTURE_ID "i386"
93
#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
94
# define ARCHITECTURE_ID "ia64"
95
#elif defined(__loongarch64)
96
# define ARCHITECTURE_ID "loongarch64"
97
#elif defined(__loongarch__)
98
# define ARCHITECTURE_ID "loongarch32"
99
#elif defined(__m68k__)
100
# define ARCHITECTURE_ID "m68k"
101
#elif defined(__mips64) || defined(__mips64__)
102
# if defined(_MIPSEL)
103
# define ARCHITECTURE_ID "mips64el"
104
# else
105
# define ARCHITECTURE_ID "mips64"
106
# endif
107
#elif defined(__mips) || defined(__mips__)
108
# if defined(_MIPSEL)
109
# define ARCHITECTURE_ID "mipsel"
110
# else
111
# define ARCHITECTURE_ID "mips"
112
# endif
113
#elif defined(__riscv) && __riscv_xlen == 64
114
# define ARCHITECTURE_ID "riscv64"
115
#elif defined(__riscv) && __riscv_xlen == 32
116
# define ARCHITECTURE_ID "riscv32"
117
#elif defined(__sw_64)
118
# define ARCHITECTURE_ID "sw_64"
119
#elif defined(__s390x__)
120
# define ARCHITECTURE_ID "s390x"
121
#elif defined(__s390__)
122
# define ARCHITECTURE_ID "s390"
123
#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__)
124
# define ARCHITECTURE_ID "sparcv9"
125
#elif defined(__sparc) || defined(__sparc__)
126
# define ARCHITECTURE_ID "sparc"
127
#elif defined(__hppa) || defined(__hppa__)
128
# if defined(__LP64__)
129
# define ARCHITECTURE_ID "parisc64"
130
# else
131
# define ARCHITECTURE_ID "parisc"
132
# endif
133
#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || \
134
defined(_ARCH_PPC64)
135
# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__)
136
# define ARCHITECTURE_ID "ppc64le"
137
# else
138
# define ARCHITECTURE_ID "ppc64"
139
# endif
140
#elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) || \
141
defined(_ARCH_PPC)
142
# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__)
143
# define ARCHITECTURE_ID "ppcle"
144
# else
145
# define ARCHITECTURE_ID "ppc"
146
# endif
147
#elif defined(__wasm64) || defined(__wasm64__)
148
# define ARCHITECTURE_ID "wasm64"
149
#elif defined(__wasm32) || defined(__wasm32__)
150
# define ARCHITECTURE_ID "wasm32"
151
#endif
152
153
/* Construct the string literal in pieces to prevent the source from
154
getting matched. Store it in a pointer rather than an array
155
because some compilers will just produce instructions to fill the
156
array rather than assigning a pointer to a static array. */
157
#if defined(ABI_ID)
158
static char const* info_abi = "INFO"
159
":"
160
"abi[" ABI_ID "]";
161
#endif
162
#if defined(ARCHITECTURE_ID)
163
static char const* info_arch = "INFO"
164
":"
165
"arch[" ARCHITECTURE_ID "]";
166
#endif
167
168