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