detect.h
Go to the documentation of this file.00001
00036 #ifndef CPU_DETECT_H
00037 #define CPU_DETECT_H
00038
00039 #if defined(__ARM_ARCH_4T__) \
00040 || (defined(__ICCARM__) && (__CORE__== __ARM4TM__))
00041 #define CPU_ARM 1
00042 #define CPU_ID arm
00043 #define CPU_CORE_NAME "ARM7TDMI"
00044
00045
00046 #if defined(__ARM_AT91SAM7S32__)
00047 #define CPU_ARM_AT91 1
00048 #define CPU_ARM_AT91SAM7S32 1
00049 #define CPU_NAME "AT91SAM7S32"
00050 #else
00051 #define CPU_ARM_AT91SAM7S32 0
00052 #endif
00053
00054 #if defined(__ARM_AT91SAM7S64__)
00055 #define CPU_ARM_AT91 1
00056 #define CPU_ARM_SAM7S_LARGE 1
00057 #define CPU_ARM_AT91SAM7S64 1
00058 #define CPU_NAME "AT91SAM7S64"
00059 #else
00060 #define CPU_ARM_AT91SAM7S64 0
00061 #endif
00062
00063 #if defined(__ARM_AT91SAM7S128__)
00064 #define CPU_ARM_AT91 1
00065 #define CPU_ARM_SAM7S_LARGE 1
00066 #define CPU_ARM_AT91SAM7S128 1
00067 #define CPU_NAME "AT91SAM7S128"
00068 #else
00069 #define CPU_ARM_AT91SAM7S128 0
00070 #endif
00071
00072 #if defined(__ARM_AT91SAM7S256__)
00073 #define CPU_ARM_AT91 1
00074 #define CPU_ARM_SAM7S_LARGE 1
00075 #define CPU_ARM_AT91SAM7S256 1
00076 #define CPU_NAME "AT91SAM7S256"
00077 #else
00078 #define CPU_ARM_AT91SAM7S256 0
00079 #endif
00080
00081 #if defined(__ARM_AT91SAM7S512__)
00082 #define CPU_ARM_AT91 1
00083 #define CPU_ARM_SAM7S_LARGE 1
00084 #define CPU_ARM_AT91SAM7S512 1
00085 #define CPU_NAME "AT91SAM7S512"
00086 #else
00087 #define CPU_ARM_AT91SAM7S512 0
00088 #endif
00089
00090
00091 #if defined(__ARM_AT91SAM7X128__)
00092 #define CPU_ARM_AT91 1
00093 #define CPU_ARM_SAM7X 1
00094 #define CPU_ARM_AT91SAM7X128 1
00095 #define CPU_NAME "AT91SAM7X128"
00096 #else
00097 #define CPU_ARM_AT91SAM7X128 0
00098 #endif
00099
00100 #if defined(__ARM_AT91SAM7X256__)
00101 #define CPU_ARM_AT91 1
00102 #define CPU_ARM_SAM7X 1
00103 #define CPU_ARM_AT91SAM7X256 1
00104 #define CPU_NAME "AT91SAM7X256"
00105 #else
00106 #define CPU_ARM_AT91SAM7X256 0
00107 #endif
00108
00109
00110 #if defined(__ARM_AT91SAM7X512__)
00111 #define CPU_ARM_AT91 1
00112 #define CPU_ARM_SAM7X 1
00113 #define CPU_ARM_AT91SAM7X512 1
00114 #define CPU_NAME "AT91SAM7X512"
00115 #else
00116 #define CPU_ARM_AT91SAM7X512 0
00117 #endif
00118
00119 #if defined(__ARM_LPC2378__)
00120 #define CPU_ARM_LPC2 1
00121 #define CPU_ARM_LPC2378 1
00122 #define CPU_NAME "LPC2378"
00123 #else
00124 #define CPU_ARM_LPC2378 0
00125 #endif
00126
00127 #if !defined(CPU_ARM_SAM7S_LARGE)
00128 #define CPU_ARM_SAM7S_LARGE 0
00129 #endif
00130
00131 #if !defined(CPU_ARM_SAM7X)
00132 #define CPU_ARM_SAM7X 0
00133 #endif
00134
00135
00136 #if defined(CPU_ARM_AT91)
00137 #if CPU_ARM_AT91SAM7S32 + CPU_ARM_AT91SAM7S64 \
00138 + CPU_ARM_AT91SAM7S128 + CPU_ARM_AT91SAM7S256 \
00139 + CPU_ARM_AT91SAM7S512 \
00140 + CPU_ARM_AT91SAM7X128 + CPU_ARM_AT91SAM7X256 \
00141 + CPU_ARM_AT91SAM7X512 != 1
00142 #error ARM CPU configuration error
00143 #endif
00144 #define CPU_ARM_LPC2 0
00145
00146 #elif defined (CPU_ARM_LPC2)
00147
00148 #if CPU_ARM_LPC2378 + 0 != 1
00149 #error NXP LPC2xxx ARM CPU configuration error
00150 #endif
00151 #define CPU_ARM_AT91 0
00152
00153 #else
00154 #define CPU_ARM_AT91 0
00155 #define CPU_ARM_LPC2 0
00156 #endif
00157
00158
00159 #if CPU_ARM_AT91 + CPU_ARM_LPC2 + 0 != 1
00160 #error ARM CPU configuration error
00161 #endif
00162 #else
00163 #define CPU_ARM 0
00164
00165
00166 #define CPU_ARM_AT91 0
00167 #define CPU_ARM_LPC2 0
00168
00169
00170 #define CPU_ARM_SAM7S_LARGE 0
00171 #define CPU_ARM_SAM7X 0
00172
00173
00174 #define CPU_ARM_AT91SAM7S32 0
00175 #define CPU_ARM_AT91SAM7S64 0
00176 #define CPU_ARM_AT91SAM7S128 0
00177 #define CPU_ARM_AT91SAM7S256 0
00178 #define CPU_ARM_AT91SAM7S512 0
00179 #define CPU_ARM_AT91SAM7X128 0
00180 #define CPU_ARM_AT91SAM7X256 0
00181 #define CPU_ARM_AT91SAM7X512 0
00182
00183 #define CPU_ARM_LPC2378 0
00184 #endif
00185
00186 #if defined(__ARM_ARCH_7M__) \
00187 || (defined(__ICCARM__) && (__CORE__== __ARM7M__))
00188
00189 #define CPU_CM3 1
00190 #define CPU_ID cm3
00191 #define CPU_CORE_NAME "Cortex-M3"
00192
00193 #if defined (__ARM_LM3S1968__)
00194 #define CPU_CM3_LM3S 1
00195 #define CPU_CM3_LM3S1968 1
00196 #define CPU_NAME "LM3S1968"
00197 #else
00198 #define CPU_CM3_LM3S1968 0
00199 #endif
00200
00201 #if defined (__ARM_LM3S8962__)
00202 #define CPU_CM3_LM3S 1
00203 #define CPU_CM3_LM3S8962 1
00204 #define CPU_NAME "LM3S8962"
00205 #else
00206 #define CPU_CM3_LM3S8962 0
00207 #endif
00208
00209 #if defined (__ARM_STM32F100RB__)
00210 #define CPU_CM3_STM32 1
00211 #define CPU_CM3_STM32F100RB 1
00212 #define CPU_NAME "STM32F100RB"
00213 #else
00214 #define CPU_CM3_STM32F100RB 0
00215 #endif
00216
00217 #if defined (__ARM_STM32F101C4__)
00218 #define CPU_CM3_STM32 1
00219 #define CPU_CM3_STM32F101C4 1
00220 #define CPU_NAME "STM32F101C4"
00221 #else
00222 #define CPU_CM3_STM32F101C4 0
00223 #endif
00224
00225 #if defined (__ARM_STM32F103RB__)
00226 #define CPU_CM3_STM32 1
00227 #define CPU_CM3_STM32F103RB 1
00228 #define CPU_NAME "STM32F103RB"
00229 #else
00230 #define CPU_CM3_STM32F103RB 0
00231 #endif
00232
00233 #if defined (__ARM_STM32F103RE__)
00234 #define CPU_CM3_STM32 1
00235 #define CPU_CM3_STM32F103RE 1
00236 #define CPU_NAME "STM32F103RE"
00237 #else
00238 #define CPU_CM3_STM32F103RE 0
00239 #endif
00240
00241
00242 #if defined (__ARM_SAM3N4__)
00243 #define CPU_CM3_SAM3 1
00244 #define CPU_CM3_SAM3N 1
00245 #define CPU_CM3_SAM3N4 1
00246 #define CPU_NAME "SAM3N4"
00247
00248 #define CPU_CM3_SAM3S 0
00249 #define CPU_CM3_SAM3U 0
00250 #define CPU_CM3_SAM3N2 0
00251 #define CPU_CM3_SAM3N1 0
00252 #define CPU_CM3_SAM3X 0
00253 #else
00254 #define CPU_CM3_SAM3N4 0
00255 #endif
00256
00257
00258 #if defined (__ARM_SAM3S4__)
00259 #define CPU_CM3_SAM3 1
00260 #define CPU_CM3_SAM3S 1
00261 #define CPU_CM3_SAM3S4 1
00262 #define CPU_NAME "SAM3S4"
00263
00264 #define CPU_CM3_SAM3N 0
00265 #define CPU_CM3_SAM3U 0
00266 #define CPU_CM3_SAM3X 0
00267 #else
00268 #define CPU_CM3_SAM3S4 0
00269 #endif
00270
00271
00272 #if defined (__ARM_SAM3U4__)
00273 #define CPU_CM3_SAM3 1
00274 #define CPU_CM3_SAM3U 1
00275 #define CPU_CM3_SAM3U4 1
00276 #define CPU_NAME "SAM3U4"
00277
00278 #define CPU_CM3_SAM3N 0
00279 #define CPU_CM3_SAM3S 0
00280 #define CPU_CM3_SAM3X 0
00281 #else
00282 #define CPU_CM3_SAM3U4 0
00283 #endif
00284
00285
00286 #if defined (__ARM_SAM3X8__)
00287 #define CPU_CM3_SAM3 1
00288 #define CPU_CM3_SAM3X 1
00289 #define CPU_CM3_SAM3X8 1
00290 #define CPU_NAME "SAM3X8"
00291
00292 #define CPU_CM3_SAM3N 0
00293 #define CPU_CM3_SAM3S 0
00294 #define CPU_CM3_SAM3U 0
00295 #else
00296 #define CPU_CM3_SAM3X8 0
00297 #endif
00298
00299 #if defined (CPU_CM3_LM3S)
00300 #if CPU_CM3_LM3S1968 + CPU_CM3_LM3S8962 + 0 != 1
00301 #error Luminary Cortex-M3 CPU configuration error
00302 #endif
00303 #define CPU_CM3_STM32 0
00304 #define CPU_CM3_SAM3 0
00305 #elif defined (CPU_CM3_STM32)
00306 #if CPU_CM3_STM32F100RB + CPU_CM3_STM32F101C4 + CPU_CM3_STM32F103RB + CPU_CM3_STM32F103RE + 0 != 1
00307 #error STM32 Cortex-M3 CPU configuration error
00308 #endif
00309 #define CPU_CM3_LM3S 0
00310 #define CPU_CM3_SAM3 0
00311 #elif defined (CPU_CM3_SAM3)
00312 #if CPU_CM3_SAM3N + CPU_CM3_SAM3U + CPU_CM3_SAM3S + CPU_CM3_SAM3X + 0 != 1
00313 #error SAM3 Cortex-M3 CPU configuration error
00314 #endif
00315 #if CPU_CM3_SAM3N4 + CPU_CM3_SAM3S4 + CPU_CM3_SAM3U4 + CPU_CM3_SAM3X8 + 0 != 1
00316 #error SAM3 Cortex-M3 CPU configuration error
00317 #endif
00318 #define CPU_CM3_LM3S 0
00319 #define CPU_CM3_STM32 0
00320
00321 #else
00322 #define CPU_CM3_LM3S 0
00323 #define CPU_CM3_STM32 0
00324 #define CPU_CM3_SAM3 0
00325 #endif
00326
00327
00328 #if CPU_CM3_LM3S + CPU_CM3_STM32 + CPU_CM3_SAM3 + 0 != 1
00329 #error Cortex-M3 CPU configuration error
00330 #endif
00331
00332 #else
00333 #define CPU_CM3 0
00334 #define CPU_CM3_LM3S 0
00335 #define CPU_CM3_LM3S1968 0
00336 #define CPU_CM3_LM3S8962 0
00337
00338 #define CPU_CM3_STM32 0
00339 #define CPU_CM3_STM32F100RB 0
00340 #define CPU_CM3_STM32F103RB 0
00341 #define CPU_CM3_STM32F101C4 0
00342 #define CPU_CM3_STM32F103RE 0
00343
00344 #define CPU_CM3_SAM3 0
00345 #define CPU_CM3_SAM3N 0
00346 #define CPU_CM3_SAM3N4 0
00347 #define CPU_CM3_SAM3X 0
00348 #define CPU_CM3_SAM3X8 0
00349 #endif
00350
00351 #if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
00352 && !defined(__ICCARM__)
00353 #warning Assuming CPU is I196
00354 #define CPU_I196 1
00355 #define CPU_ID i196
00356 #else
00357 #define CPU_I196 0
00358 #endif
00359
00360 #if defined(__i386__) \
00361 || (defined(_M_IX86) && !defined(_WIN64))
00362 #define CPU_X86 1
00363 #define CPU_X86_32 1
00364 #define CPU_X86_64 0
00365 #define CPU_ID x86
00366 #define CPU_CORE_NAME "x86"
00367 #define CPU_NAME "generic"
00368 #elif defined(__x86_64__) \
00369 || (defined(_M_IX86) && defined(_WIN64))
00370 #define CPU_X86 1
00371 #define CPU_X86_32 0
00372 #define CPU_X86_64 1
00373 #define CPU_ID x86
00374 #define CPU_CORE_NAME "x86_64"
00375 #define CPU_NAME "generic"
00376 #else
00377 #define CPU_X86 0
00378 #define CPU_I386 0
00379 #define CPU_X86_64 0
00380 #endif
00381
00382 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
00383 #define CPU_PPC 1
00384 #define CPU_ID ppc
00385 #if defined(_ARCH_PPC)
00386 #define CPU_PPC32 1
00387 #else
00388 #define CPU_PPC32 0
00389 #endif
00390 #if defined(_ARCH_PPC64)
00391 #define CPU_PPC64 1
00392 #else
00393 #define CPU_PPC64 0
00394 #endif
00395 #else
00396 #define CPU_PPC 0
00397 #define CPU_PPC32 0
00398 #define CPU_PPC64 0
00399 #endif
00400
00401 #if defined(__m56800E__) || defined(__m56800__)
00402 #define CPU_DSP56K 1
00403 #define CPU_ID dsp56k
00404 #else
00405 #define CPU_DSP56K 0
00406 #endif
00407
00408 #if defined (__AVR__)
00409 #define CPU_AVR 1
00410 #define CPU_ID avr
00411 #define CPU_CORE_NAME "AVR"
00412
00413 #if defined(__AVR_ATmega32__)
00414 #define CPU_AVR_MEGA 1
00415 #define CPU_AVR_ATMEGA32 1
00416 #define CPU_NAME "ATmega32"
00417 #else
00418 #define CPU_AVR_ATMEGA32 0
00419 #endif
00420
00421 #if defined(__AVR_ATmega64__)
00422 #define CPU_AVR_MEGA 1
00423 #define CPU_AVR_ATMEGA64 1
00424 #define CPU_NAME "ATmega64"
00425 #else
00426 #define CPU_AVR_ATMEGA64 0
00427 #endif
00428
00429 #if defined(__AVR_ATmega103__)
00430 #define CPU_AVR_MEGA 1
00431 #define CPU_AVR_ATMEGA103 1
00432 #define CPU_NAME "ATmega103"
00433 #else
00434 #define CPU_AVR_ATMEGA103 0
00435 #endif
00436
00437 #if defined(__AVR_ATmega128__)
00438 #define CPU_AVR_MEGA 1
00439 #define CPU_AVR_ATMEGA128 1
00440 #define CPU_NAME "ATmega128"
00441 #else
00442 #define CPU_AVR_ATMEGA128 0
00443 #endif
00444
00445 #if defined(__AVR_ATmega8__)
00446 #define CPU_AVR_MEGA 1
00447 #define CPU_AVR_ATMEGA8 1
00448 #define CPU_NAME "ATmega8"
00449 #else
00450 #define CPU_AVR_ATMEGA8 0
00451 #endif
00452
00453 #if defined(__AVR_ATmega168__)
00454 #define CPU_AVR_MEGA 1
00455 #define CPU_AVR_ATMEGA168 1
00456 #define CPU_NAME "ATmega168"
00457 #else
00458 #define CPU_AVR_ATMEGA168 0
00459 #endif
00460
00461 #if defined(__AVR_ATmega328P__)
00462 #define CPU_AVR_MEGA 1
00463 #define CPU_AVR_ATMEGA328P 1
00464 #define CPU_NAME "ATmega328P"
00465 #else
00466 #define CPU_AVR_ATMEGA328P 0
00467 #endif
00468
00469 #if defined(__AVR_ATmega1281__)
00470 #define CPU_AVR_MEGA 1
00471 #define CPU_AVR_ATMEGA1281 1
00472 #define CPU_NAME "ATmega1281"
00473 #else
00474 #define CPU_AVR_ATMEGA1281 0
00475 #endif
00476
00477 #if defined(__AVR_ATmega1280__)
00478 #define CPU_AVR_MEGA 1
00479 #define CPU_AVR_ATMEGA1280 1
00480 #define CPU_NAME "ATmega1280"
00481 #else
00482 #define CPU_AVR_ATMEGA1280 0
00483 #endif
00484
00485 #if defined(__AVR_ATmega2560__)
00486 #define CPU_AVR_MEGA 1
00487 #define CPU_AVR_ATMEGA2560 1
00488 #define CPU_NAME "ATmega2560"
00489 #else
00490 #define CPU_AVR_ATMEGA2560 0
00491 #endif
00492
00493 #if defined(__AVR_ATxmega32D4__)
00494 #define CPU_AVR_XMEGA 1
00495 #define CPU_AVR_XMEGA_D 1
00496 #define CPU_AVR_ATXMEGA32D4 1
00497 #define CPU_NAME "ATxmega32d4"
00498 #else
00499 #define CPU_AVR_ATXMEGA32D4 0
00500 #endif
00501
00502 #if CPU_AVR_ATMEGA32 + CPU_AVR_ATMEGA64 + CPU_AVR_ATMEGA103 + CPU_AVR_ATMEGA128 \
00503 + CPU_AVR_ATMEGA8 + CPU_AVR_ATMEGA168 + CPU_AVR_ATMEGA328P + CPU_AVR_ATMEGA1281 \
00504 + CPU_AVR_ATMEGA1280 + CPU_AVR_ATMEGA2560 + CPU_AVR_ATXMEGA32D4 != 1
00505 #error AVR CPU configuration error
00506 #endif
00507
00508 #if defined(CPU_AVR_XMEGA) && defined(CPU_AVR_MEGA)
00509 #error CPU cannot be MEGA and XMEGA
00510 #elif defined(CPU_AVR_MEGA)
00511 #define CPU_AVR_XMEGA 0
00512 #define CPU_AVR_XMEGA_D 0
00513 #elif defined(CPU_AVR_XMEGA)
00514 #define CPU_AVR_MEGA 0
00515 #endif
00516
00517 #if CPU_AVR_MEGA + CPU_AVR_XMEGA != 1
00518 #error AVR CPU configuration error
00519 #endif
00520
00521 #else
00522 #define CPU_AVR 0
00523 #define CPU_AVR_MEGA 0
00524 #define CPU_AVR_ATMEGA8 0
00525 #define CPU_AVR_ATMEGA168 0
00526 #define CPU_AVR_ATMEGA328P 0
00527 #define CPU_AVR_ATMEGA32 0
00528 #define CPU_AVR_ATMEGA64 0
00529 #define CPU_AVR_ATMEGA103 0
00530 #define CPU_AVR_ATMEGA128 0
00531 #define CPU_AVR_ATMEGA1281 0
00532 #define CPU_AVR_ATMEGA1280 0
00533 #define CPU_AVR_ATMEGA2560 0
00534 #define CPU_AVR_XMEGA 0
00535 #define CPU_AVR_XMEGA_D 0
00536 #endif
00537
00538 #if defined (__MSP430__)
00539 #define CPU_MSP430 1
00540 #define CPU_ID msp430
00541 #define CPU_CORE_NAME "MSP430"
00542
00543 #if defined(__MSP430F2274__)
00544 #define CPU_MSP430F2274 1
00545 #define CPU_NAME "MSP430F2274"
00546 #else
00547 #define CPU_MSP430F2274 0
00548 #endif
00549
00550 #if defined(__MSP430G2231__)
00551 #define CPU_MSP430G2231 1
00552 #define CPU_NAME "MSP430G2231"
00553 #else
00554 #define CPU_MSP430G2231 0
00555 #endif
00556
00557 #if CPU_MSP430F2274 + CPU_MSP430G2231 != 1
00558 #error MSP430 CPU configuration error
00559 #endif
00560 #else
00561 #define CPU_MSP430 0
00562 #define CPU_MSP430F2274 0
00563 #define CPU_MSP430G2231 0
00564 #endif
00565
00566
00567
00568 #if CPU_ARM + CPU_CM3 + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR + CPU_MSP430 == 0
00569 #error Unknown CPU
00570 #elif !defined(CPU_ID)
00571 #error CPU_ID not defined
00572 #elif CPU_ARM + CPU_CM3 + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR + CPU_MSP430 != 1
00573 #error Internal CPU configuration error
00574 #endif
00575
00576
00577 #endif