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__) /* GCC */ \
00040     || defined(__ARM4TM__) /* IAR: defined for all cores >= 4tm */
00041     #define CPU_ARM                 1
00042     #define CPU_ID                  arm
00043 
00044     // AT91SAM7S core family
00045     #if defined(__ARM_AT91SAM7S32__)
00046         #define CPU_ARM_AT91         1
00047         #define CPU_ARM_AT91SAM7S32  1
00048     #else
00049         #define CPU_ARM_AT91SAM7S32  0
00050     #endif
00051 
00052     #if defined(__ARM_AT91SAM7S64__)
00053         #define CPU_ARM_AT91         1
00054         #define CPU_ARM_SAM7S_LARGE  1
00055         #define CPU_ARM_AT91SAM7S64  1
00056     #else
00057         #define CPU_ARM_AT91SAM7S64  0
00058     #endif
00059 
00060     #if defined(__ARM_AT91SAM7S128__)
00061         #define CPU_ARM_AT91         1
00062         #define CPU_ARM_SAM7S_LARGE  1
00063         #define CPU_ARM_AT91SAM7S128 1
00064     #else
00065         #define CPU_ARM_AT91SAM7S128 0
00066     #endif
00067 
00068     #if defined(__ARM_AT91SAM7S256__)
00069         #define CPU_ARM_AT91         1
00070         #define CPU_ARM_SAM7S_LARGE  1
00071         #define CPU_ARM_AT91SAM7S256 1
00072     #else
00073         #define CPU_ARM_AT91SAM7S256 0
00074     #endif
00075 
00076     #if defined(__ARM_AT91SAM7S512__)
00077         #define CPU_ARM_AT91         1
00078         #define CPU_ARM_SAM7S_LARGE  1
00079         #define CPU_ARM_AT91SAM7S512 1
00080     #else
00081         #define CPU_ARM_AT91SAM7S512 0
00082     #endif
00083 
00084     // AT91SAM7X core family
00085     #if defined(__ARM_AT91SAM7X128__)
00086         #define CPU_ARM_AT91         1
00087         #define CPU_ARM_SAM7X        1
00088         #define CPU_ARM_AT91SAM7X128 1
00089     #else
00090         #define CPU_ARM_AT91SAM7X128 0
00091     #endif
00092 
00093     #if defined(__ARM_AT91SAM7X256__)
00094         #define CPU_ARM_AT91         1
00095         #define CPU_ARM_SAM7X        1
00096         #define CPU_ARM_AT91SAM7X256 1
00097     #else
00098         #define CPU_ARM_AT91SAM7X256 0
00099     #endif
00100 
00101 
00102     #if defined(__ARM_AT91SAM7X512__)
00103         #define CPU_ARM_AT91         1
00104         #define CPU_ARM_SAM7X        1
00105         #define CPU_ARM_AT91SAM7X512 1
00106     #else
00107         #define CPU_ARM_AT91SAM7X512 0
00108     #endif
00109 
00110     #if defined (__ARM_LM3S1968__)
00111         #define CPU_ARM_LM3S        1
00112         #define CPU_ARM_LM3S1968    1
00113     #else
00114         #define CPU_ARM_LM3S1968    0
00115     #endif
00116 
00117     #if !defined(CPU_ARM_SAM7S_LARGE)
00118         #define CPU_ARM_SAM7S_LARGE 0
00119     #endif
00120 
00121     #if !defined(CPU_ARM_SAM7X)
00122         #define CPU_ARM_SAM7X 0
00123     #endif
00124 
00125 
00126     #if defined(CPU_ARM_AT91)
00127         #if CPU_ARM_AT91SAM7S32 + CPU_ARM_AT91SAM7S64 \
00128         + CPU_ARM_AT91SAM7S128 + CPU_ARM_AT91SAM7S256 \
00129         + CPU_ARM_AT91SAM7S512 \
00130         + CPU_ARM_AT91SAM7X128 + CPU_ARM_AT91SAM7X256 \
00131         + CPU_ARM_AT91SAM7X512 != 1
00132             #error ARM CPU configuration error
00133         #endif
00134         #define CPU_ARM_LM3S        0
00135 
00136     #elif defined (CPU_ARM_LM3S)
00137         #if CPU_ARM_LM3S1968 + 0 != 1
00138             #error Luminary ARM CPU configuration error
00139         #endif
00140         #define CPU_ARM_AT91        0
00141     /* #elif Add other ARM families here */
00142     #else
00143         #define CPU_ARM_AT91        0
00144         #define CPU_ARM_LM3S        0
00145     #endif
00146 
00147 
00148     #if CPU_ARM_AT91 + CPU_ARM_LM3S + 0 /* Add other ARM families here */ != 1
00149         #error ARM CPU configuration error
00150     #endif
00151 #else
00152     #define CPU_ARM                 0
00153 
00154     /* ARM Families */
00155     #define CPU_ARM_AT91            0
00156     #define CPU_ARM_LM3S            0
00157 
00158     /* SAM7 sub-families */
00159     #define CPU_ARM_SAM7S_LARGE     0
00160     #define CPU_ARM_SAM7X           0
00161 
00162     /* ARM CPUs */
00163     #define CPU_ARM_AT91SAM7S32     0
00164     #define CPU_ARM_AT91SAM7S64     0
00165     #define CPU_ARM_AT91SAM7S128    0
00166     #define CPU_ARM_AT91SAM7S256    0
00167     #define CPU_ARM_AT91SAM7S512    0
00168     #define CPU_ARM_AT91SAM7X128    0
00169     #define CPU_ARM_AT91SAM7X256    0
00170     #define CPU_ARM_AT91SAM7X512    0
00171 
00172     #define CPU_ARM_LM3S1968        0
00173 #endif
00174 
00175 #if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
00176     && !defined(__ARM4TM__) /* IAR: if not ARM assume I196 */
00177     #warning Assuming CPU is I196
00178     #define CPU_I196        1
00179     #define CPU_ID                  i196
00180 #else
00181     #define CPU_I196                0
00182 #endif
00183 
00184 #if defined(__i386__) /* GCC */ \
00185     || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
00186     #define CPU_X86                 1
00187     #define CPU_X86_32              1
00188     #define CPU_X86_64              0
00189     #define CPU_ID                  x86
00190 #elif defined(__x86_64__) /* GCC */ \
00191     || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
00192     #define CPU_X86                 1
00193     #define CPU_X86_32              0
00194     #define CPU_X86_64              1
00195     #define CPU_ID                  x86
00196 #else
00197     #define CPU_X86                 0
00198     #define CPU_I386                0
00199     #define CPU_X86_64              0
00200 #endif
00201 
00202 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
00203     #define CPU_PPC                 1
00204     #define CPU_ID                  ppc
00205     #if defined(_ARCH_PPC)
00206         #define CPU_PPC32       1
00207     #else
00208             #define CPU_PPC32       0
00209     #endif
00210     #if defined(_ARCH_PPC64)
00211         #define CPU_PPC64       1
00212     #else
00213             #define CPU_PPC64       0
00214     #endif
00215 #else
00216     #define CPU_PPC                 0
00217     #define CPU_PPC32               0
00218     #define CPU_PPC64               0
00219 #endif
00220 
00221 #if defined(__m56800E__) || defined(__m56800__)
00222     #define CPU_DSP56K              1
00223     #define CPU_ID                  dsp56k
00224 #else
00225     #define CPU_DSP56K              0
00226 #endif
00227 
00228 #if defined (__AVR__)
00229     #define CPU_AVR                 1
00230     #define CPU_ID                  avr
00231 
00232     #if defined(__AVR_ATmega32__)
00233         #define CPU_AVR_ATMEGA32    1
00234     #else
00235         #define CPU_AVR_ATMEGA32    0
00236     #endif
00237 
00238     #if defined(__AVR_ATmega64__)
00239         #define CPU_AVR_ATMEGA64    1
00240     #else
00241         #define CPU_AVR_ATMEGA64    0
00242     #endif
00243 
00244     #if defined(__AVR_ATmega103__)
00245         #define CPU_AVR_ATMEGA103   1
00246     #else
00247         #define CPU_AVR_ATMEGA103   0
00248     #endif
00249 
00250     #if defined(__AVR_ATmega128__)
00251         #define CPU_AVR_ATMEGA128   1
00252     #else
00253         #define CPU_AVR_ATMEGA128   0
00254     #endif
00255 
00256     #if defined(__AVR_ATmega8__)
00257         #define CPU_AVR_ATMEGA8     1
00258     #else
00259         #define CPU_AVR_ATMEGA8     0
00260     #endif
00261 
00262     #if defined(__AVR_ATmega168__)
00263         #define CPU_AVR_ATMEGA168   1
00264     #else
00265         #define CPU_AVR_ATMEGA168   0
00266     #endif
00267 
00268     #if defined(__AVR_ATmega1281__)
00269         #define CPU_AVR_ATMEGA1281  1
00270     #else
00271         #define CPU_AVR_ATMEGA1281  0
00272     #endif
00273 
00274     #if CPU_AVR_ATMEGA32 + CPU_AVR_ATMEGA64 + CPU_AVR_ATMEGA103 + CPU_AVR_ATMEGA128 \
00275       + CPU_AVR_ATMEGA8 + CPU_AVR_ATMEGA168 + CPU_AVR_ATMEGA1281 != 1
00276         #error AVR CPU configuration error
00277     #endif
00278 #else
00279     #define CPU_AVR                 0
00280     #define CPU_AVR_ATMEGA8         0
00281     #define CPU_AVR_ATMEGA168       0
00282     #define CPU_AVR_ATMEGA32        0
00283     #define CPU_AVR_ATMEGA64        0
00284     #define CPU_AVR_ATMEGA103       0
00285     #define CPU_AVR_ATMEGA128       0
00286     #define CPU_AVR_ATMEGA1281      0
00287 #endif
00288 
00289 
00290 /* Self-check for the detection: only one CPU must be detected */
00291 #if CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
00292     #error Unknown CPU
00293 #elif !defined(CPU_ID)
00294     #error CPU_ID not defined
00295 #elif CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
00296     #error Internal CPU configuration error
00297 #endif
00298 
00299 
00300 #endif /* CPU_DETECT_H */