|
16 | 16 |
|
17 | 17 | #ifdef __DOXYGEN__ |
18 | 18 |
|
19 | | - |
20 | | -/// Compiler description |
21 | 19 | /// @ingroup modm_architecture |
| 20 | +/// @{ |
| 21 | + |
| 22 | +/// Compiler description string |
22 | 23 | #define MODM_COMPILER_STRING |
23 | 24 |
|
24 | | -/// Possible compilers |
25 | | -/// @ingroup modm_architecture |
26 | | -/// @{ |
| 25 | +/// Compiling with GCC |
27 | 26 | #define MODM_COMPILER_GCC |
28 | | -#define MODM_COMPILER_MSVC |
29 | | -/// @} |
| 27 | +/// Compiling with GCC on Windows |
| 28 | +#define MODM_COMPILER_MINGW |
30 | 29 |
|
31 | | -/// Operating system description |
32 | | -/// @ingroup modm_architecture |
| 30 | +/// Operating system description string |
33 | 31 | #define MODM_OS_STRING |
34 | 32 |
|
35 | | -/// Possible operating systems |
36 | | -/// @ingroup modm_architecture |
37 | | -/// @{ |
| 33 | +/// Compiling for a UNIX target |
38 | 34 | #define MODM_OS_UNIX |
| 35 | +/// Compiling for a Linux target |
39 | 36 | #define MODM_OS_LINUX |
| 37 | +/// Compiling for a macOS target |
40 | 38 | #define MODM_OS_OSX |
| 39 | +/// Compiling for a Windows 32-bit target |
41 | 40 | #define MODM_OS_WIN32 |
| 41 | +/// Compiling for a Windows 64-bit target |
42 | 42 | #define MODM_OS_WIN64 |
| 43 | +/// Compiling for a hosted (non-barebone) target |
43 | 44 | #define MODM_OS_HOSTED |
44 | | -#define MODM_OS_HOSTED_64 |
45 | | -/// @} |
| 45 | +/// Compiling for a barebone target without OS |
| 46 | +#define MODM_OS_NONE |
46 | 47 |
|
47 | | -/// CPU description |
48 | | -/// @ingroup modm_architecture |
| 48 | +/// CPU description string |
49 | 49 | #define MODM_CPU_STRING |
50 | 50 |
|
51 | | -/// Possible CPU definitions |
52 | | -/// @ingroup modm_architecture |
53 | | -/// @{ |
| 51 | +/// Compiling for x86-64 target |
| 52 | +#define MODM_CPU_AMD64 |
| 53 | +/// Compiling for x86 target |
| 54 | +#define MODM_CPU_I386 |
| 55 | + |
| 56 | +/// Compiling for AVR target |
54 | 57 | #define MODM_CPU_AVR |
55 | | -#define MODM_CPU_ATXMEGA |
| 58 | +/// Compiling for AVR ATmega target |
56 | 59 | #define MODM_CPU_ATMEGA |
| 60 | +/// Compiling for AVR ATtiny target |
57 | 61 | #define MODM_CPU_ATTINY |
58 | 62 |
|
| 63 | +/// Compiling for ARM target |
59 | 64 | #define MODM_CPU_ARM |
60 | | -#define MODM_CPU_ARM7TDMI |
| 65 | +/// Compiling for ARM Cortex-M0 or Cortex-M0+ target |
61 | 66 | #define MODM_CPU_CORTEX_M0 |
| 67 | +/// Compiling for ARM Cortex-M3 target |
62 | 68 | #define MODM_CPU_CORTEX_M3 |
| 69 | +/// Compiling for ARM Cortex-M4 or Cortex-M7 target |
63 | 70 | #define MODM_CPU_CORTEX_M4 |
64 | | -/// @} |
| 71 | +/// Compiling for ARM Cortex-M33 target |
| 72 | +#define MODM_CPU_CORTEX_M33 |
| 73 | +/// Compiling for ARM AArch64 target |
| 74 | +#define MODM_CPU_AARCH64 |
65 | 75 |
|
66 | | -/// Memory descriptions |
67 | | -/// @ingroup modm_architecture |
68 | | -/// @{ |
| 76 | +/// Native memory alignment in bytes |
69 | 77 | #define MODM_ALIGNMENT |
70 | 78 |
|
71 | | -#define MODM_ORDER_BIG_ENDIAN |
72 | | -#define MODM_ORDER_LITTLE_ENDIAN |
73 | | -#define MODM_ORDER_PDP_ENDIAN |
74 | | - |
75 | | -#define MODM_BYTE_ORDER |
76 | | - |
77 | | -#define MODM_IS_BIG_ENDIAN |
| 79 | +/// Compiling for a little endian memory layout |
78 | 80 | #define MODM_IS_LITTLE_ENDIAN |
| 81 | +/// Compiling for a big endian memory layout |
| 82 | +#define MODM_IS_BIG_ENDIAN |
79 | 83 |
|
| 84 | +/// Size of pointer in bytes |
80 | 85 | #define MODM_SIZEOF_POINTER |
| 86 | + |
81 | 87 | /// @} |
82 | 88 |
|
83 | | -#else //!__DOXYGEN__ |
| 89 | +#else // !__DOXYGEN__ |
84 | 90 |
|
85 | | -// ---------------------------------------------------------------------------- |
86 | | -// Determine compilation environment |
87 | | - |
88 | | -/** |
| 91 | +/* ---------------------------------------------------------------------------- |
| 92 | + * Determine compilation environment |
| 93 | + * |
89 | 94 | * This relies on the predefined defines of the compiler. |
90 | 95 | * To display the defines run: |
91 | 96 | * $your-gcc-compiler -dM -E - < /dev/null | sort | less |
|
99 | 104 | * $arm-none-eabi-g++ -dM -E -mcpu=cortex-m0 -mthumb -D__ARM_LPC1114_301__ -D__ARM_LPC11XX__ - < /dev/null |
100 | 105 | */ |
101 | 106 |
|
102 | | -#if defined __clang__ |
| 107 | +#ifdef __clang__ |
103 | 108 | # define MODM_COMPILER_STRING "Clang" |
104 | | -# define MODM_COMPILER_CLANG 1 |
| 109 | +# define MODM_COMPILER_CLANG 1 |
105 | 110 | #elif defined __GNUC__ |
106 | | -# define MODM_COMPILER_GCC 1 |
107 | | -# if defined __MINGW32__ |
| 111 | +# define MODM_COMPILER_GCC 1 |
| 112 | +# ifdef __MINGW32__ |
108 | 113 | # define MODM_COMPILER_STRING "MinGW / MinGW-w64" |
109 | | -# define MODM_COMPILER_MINGW 1 |
| 114 | +# define MODM_COMPILER_MINGW 1 |
110 | 115 | # else |
111 | 116 | # define MODM_COMPILER_STRING "Gnu GCC" |
112 | 117 | # endif |
113 | 118 | #endif |
114 | 119 |
|
115 | | -#if defined _MSC_VER |
116 | | -# define MODM_COMPILER_STRING "Microsoft Visual C++" |
117 | | -# define MODM_COMPILER_MSVC 1 |
118 | | -#endif |
119 | | - |
120 | | -#if !defined MODM_COMPILER_STRING |
121 | | -# define MODM_COMPILER_STRING "Unknown compiler" |
| 120 | +#ifndef MODM_COMPILER_STRING |
| 121 | +# define MODM_COMPILER_STRING "Unknown compiler" |
122 | 122 | # warning "Couldn't determine the used compiler! Please add it to <modm/architecture/detect.hpp>" |
123 | 123 | #endif |
124 | 124 |
|
125 | 125 | // ---------------------------------------------------------------------------- |
126 | 126 | // Determine target operating system |
127 | 127 |
|
128 | 128 | #if defined linux || defined __linux__ |
129 | | -# define MODM_OS_HOSTED 1 |
130 | | -# define MODM_OS_LINUX 1 |
131 | | -# define MODM_OS_STRING "Linux" |
| 129 | +# define MODM_OS_HOSTED 1 |
| 130 | +# define MODM_OS_LINUX 1 |
| 131 | +# define MODM_OS_STRING "Linux" |
132 | 132 | #endif |
133 | 133 |
|
134 | 134 | #if (defined __MWERKS__ && defined __powerc && !defined macintosh) || defined __APPLE_CC__ || defined macosx |
135 | | -# define MODM_OS_HOSTED 1 |
136 | | -# define MODM_OS_OSX 1 |
137 | | -# define MODM_OS_STRING "MacOS X" |
| 135 | +# define MODM_OS_HOSTED 1 |
| 136 | +# define MODM_OS_OSX 1 |
| 137 | +# define MODM_OS_STRING "MacOS X" |
138 | 138 | #endif |
139 | 139 |
|
140 | | -#if defined __unix__ |
141 | | -# define MODM_OS_HOSTED 1 |
142 | | -# define MODM_OS_UNIX 1 |
143 | | -# if !defined MODM_OS_STRING |
144 | | -# define MODM_OS_STRING "Unix-like(generic)" |
| 140 | +#ifdef __unix__ |
| 141 | +# define MODM_OS_HOSTED 1 |
| 142 | +# define MODM_OS_UNIX 1 |
| 143 | +# ifndef MODM_OS_STRING |
| 144 | +# define MODM_OS_STRING "Unix-like(generic)" |
145 | 145 | # endif |
146 | 146 | #endif |
147 | 147 |
|
148 | 148 | #if defined _WIN32 || defined WIN32 || defined __NT__ || defined __WIN32__ |
149 | | -# define MODM_OS_HOSTED 1 |
150 | | -# define MODM_OS_WIN32 1 |
151 | | -# if defined _WIN64 |
152 | | -# define MODM_OS_WIN64 1 |
153 | | -# define MODM_OS_STRING "Win64" |
| 149 | +# define MODM_OS_HOSTED 1 |
| 150 | +# define MODM_OS_WIN32 1 |
| 151 | +# ifdef _WIN64 |
| 152 | +# define MODM_OS_WIN64 1 |
| 153 | +# define MODM_OS_STRING "Win64" |
154 | 154 | # else |
155 | | -# if !defined MODM_OS_STRING |
| 155 | +# ifndef MODM_OS_STRING |
156 | 156 | # define MODM_OS_STRING "Win32" |
157 | 157 | # endif |
158 | 158 | # endif |
159 | 159 | #endif |
160 | 160 |
|
161 | | -#define MODM_ORDER_BIG_ENDIAN 4321 |
162 | | -#define MODM_ORDER_LITTLE_ENDIAN 1234 |
163 | | -#define MODM_ORDER_PDP_ENDIAN 3412 |
164 | | - |
165 | 161 | // If we did not detect any of Linux, OS X or Windows |
166 | | -#if !defined(MODM_OS_HOSTED) |
| 162 | +#ifndef MODM_OS_HOSTED |
167 | 163 | # define MODM_OS_NONE 1 |
168 | 164 | #endif |
169 | 165 |
|
170 | 166 | // ---------------------------------------------------------------------------- |
171 | 167 | // Determine CPU type |
172 | 168 |
|
173 | | -#if defined __AVR__ |
174 | | -# define MODM_CPU_AVR 1 |
| 169 | +#ifdef __AVR__ |
| 170 | +# define MODM_CPU_AVR 1 |
175 | 171 | # define MODM_ALIGNMENT 1 |
176 | | -# if defined __AVR_XMEGA__ |
| 172 | +# ifdef __AVR_XMEGA__ |
177 | 173 | # define MODM_CPU_ATXMEGA 1 |
178 | | -# define MODM_CPU_STRING "Atmel XMEGA" |
| 174 | +# define MODM_CPU_STRING "Atmel XMEGA" |
179 | 175 | # else |
180 | 176 | // see http://www.nongnu.org/avr-libc/user-manual/using_tools.html |
181 | 177 | # if __AVR_ARCH__ == 2 || __AVR_ARCH__ == 25 || __AVR_ARCH__ == 1 |
|
190 | 186 |
|
191 | 187 | #if defined __X86__ || defined __i386__ || defined i386 || defined _M_IX86 || defined __386__ || defined __x86_64__ || defined _M_X64 |
192 | 188 | # if defined __x86_64__ || defined _M_X64 |
193 | | -# define MODM_CPU_AMD64 1 |
194 | | -# define MODM_CPU_STRING "AMD x86-64" |
| 189 | +# define MODM_CPU_AMD64 1 |
| 190 | +# define MODM_CPU_STRING "AMD x86-64" |
195 | 191 | # define MODM_ALIGNMENT 8 |
196 | 192 | # else |
197 | | -# define MODM_CPU_I386 1 |
198 | | -# define MODM_CPU_STRING "Intel 386+" |
| 193 | +# define MODM_CPU_I386 1 |
| 194 | +# define MODM_CPU_STRING "Intel 386+" |
199 | 195 | # define MODM_ALIGNMENT 4 |
200 | 196 | # endif |
201 | 197 | #endif |
202 | 198 |
|
203 | 199 | #if defined __arm__ || defined __aarch64__ |
204 | | -# define MODM_CPU_ARM 1 |
| 200 | +# define MODM_CPU_ARM 1 |
205 | 201 | # define MODM_ALIGNMENT 4 |
206 | | -# if defined __ARM_ARCH_4T__ |
207 | | -# define MODM_CPU_ARM7TDMI 1 |
208 | | -# define MODM_CPU_STRING "ARM7TDMI" |
209 | | -# elif defined __ARM_ARCH_6SM__ || defined __ARM_ARCH_6M__ |
| 202 | +# if defined __ARM_ARCH_6SM__ || defined __ARM_ARCH_6M__ |
210 | 203 | # define MODM_CPU_CORTEX_M0 1 |
211 | 204 | # define MODM_CPU_STRING "ARM Cortex-M0" |
212 | 205 | # elif defined __ARM_ARCH_7M__ |
|
218 | 211 | # elif defined __ARM_ARCH_8M_MAIN__ |
219 | 212 | # define MODM_CPU_CORTEX_M33 1 |
220 | 213 | # define MODM_CPU_STRING "ARM Cortex-M33" |
221 | | -# elif defined __ARM_ARCH_6__ |
222 | | -# define MODM_CPU_CORTEX_A6 1 |
223 | | -# define MODM_CPU_STRING "ARM Cortex-A6" |
224 | | -# elif defined __ARM_ARCH_7A__ |
225 | | -# define MODM_CPU_CORTEX_A7 1 |
226 | | -# define MODM_CPU_STRING "ARM Cortex-A7" |
227 | 214 | # elif defined __ARM_ARCH_ISA_A64 |
228 | | -# define MODM_CPU_AARCH64 1 |
| 215 | +# define MODM_CPU_AARCH64 1 |
229 | 216 | # define MODM_CPU_STRING "ARM AArch64" |
230 | 217 | # endif |
231 | 218 | #endif |
232 | 219 |
|
233 | | -#if !defined MODM_CPU_STRING |
| 220 | +#ifndef MODM_CPU_STRING |
234 | 221 | # error "Couldn't determine target CPU!" |
235 | | -# define MODM_CPU_STRING "Unknown" |
| 222 | +# define MODM_CPU_STRING "Unknown" |
236 | 223 | #endif |
237 | 224 |
|
238 | 225 | // ---------------------------------------------------------------------------- |
239 | 226 | // Provide some additional information |
240 | 227 |
|
241 | | -#if defined __SIZEOF_POINTER__ |
242 | | -# define MODM_SIZEOF_POINTER __SIZEOF_POINTER__ |
| 228 | +#ifdef __SIZEOF_POINTER__ |
| 229 | +# define MODM_SIZEOF_POINTER __SIZEOF_POINTER__ |
243 | 230 | #else |
244 | | -# if defined(MODM_OS_HOSTED_64) |
245 | | -# define MODM_SIZEOF_POINTER 8 |
246 | | -# elif defined(MODM_OS_HOSTED_32) |
247 | | -# define MODM_SIZEOF_POINTER 4 |
248 | | -# endif |
249 | | -#endif |
250 | | - |
251 | | -#if !defined MODM_SIZEOF_POINTER |
252 | 231 | # error "MODM_SIZEOF_POINTER not defined! Please provide a suitable definition." |
253 | 232 | #endif |
254 | 233 |
|
| 234 | +#define MODM_IS_LITTLE_ENDIAN (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) |
| 235 | +#define MODM_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) |
255 | 236 |
|
256 | | -#if defined __BYTE_ORDER__ |
257 | | -# define MODM_BYTE_ORDER __BYTE_ORDER__ |
258 | | -#endif |
259 | | - |
260 | | -#if !defined MODM_BYTE_ORDER |
261 | | -# error "MODM_BYTE_ORDER not defined! Please provide a suitable definition." |
262 | | -#endif |
263 | | - |
264 | | -#define MODM_IS_BIG_ENDIAN (MODM_BYTE_ORDER == MODM_ORDER_BIG_ENDIAN) |
265 | | -#define MODM_IS_LITTLE_ENDIAN (MODM_BYTE_ORDER == MODM_ORDER_LITTLE_ENDIAN) |
266 | | - |
267 | | -#define MODM_HAS_IOSTREAM __has_include(<modm/io/iostream.hpp>) |
| 237 | +#define MODM_HAS_IOSTREAM __has_include(<modm/io/iostream.hpp>) |
268 | 238 |
|
269 | 239 | #endif // !__DOXYGEN__ |
0 commit comments