|
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