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 
00089     #if defined(CPU_ARM_AT91)
00090         #if CPU_ARM_AT91SAM7S32 + CPU_ARM_AT91SAM7S64 \
00091         + CPU_ARM_AT91SAM7S128 + CPU_ARM_AT91SAM7S256 \
00092         + CPU_ARM_AT91SAM7X128 + CPU_ARM_AT91SAM7X256 != 1
00093             #error ARM CPU configuration error
00094         #endif
00095 
00096     /* #elif Add other ARM families here */
00097     #else
00098         #define CPU_ARM_AT91         0
00099     #endif
00100 
00101 
00102     #if CPU_ARM_AT91 + 0 /* Add other ARM families here */ != 1
00103         #error ARM CPU configuration error
00104     #endif
00105 #else
00106     #define CPU_ARM                 0
00107 
00108     /* ARM Families */
00109     #define CPU_ARM_AT91            0
00110 
00111     /* ARM CPUs */
00112     #define CPU_ARM_AT91SAM7S32     0
00113     #define CPU_ARM_AT91SAM7S64     0
00114     #define CPU_ARM_AT91SAM7S128    0
00115     #define CPU_ARM_AT91SAM7S256    0
00116     #define CPU_ARM_AT91SAM7X128    0
00117     #define CPU_ARM_AT91SAM7X256    0
00118 #endif
00119 
00120 #if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
00121     && !defined(__ARM4TM__) /* IAR: if not ARM assume I196 */
00122     #warning Assuming CPU is I196
00123     #define CPU_I196        1
00124     #define CPU_ID                  i196
00125 #else
00126     #define CPU_I196                0
00127 #endif
00128 
00129 #if defined(__i386__) /* GCC */ \
00130     || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
00131     #define CPU_X86                 1
00132     #define CPU_X86_32              1
00133     #define CPU_X86_64              0
00134     #define CPU_ID                  x86
00135 #elif defined(__x86_64__) /* GCC */ \
00136     || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
00137     #define CPU_X86                 1
00138     #define CPU_X86_32              0
00139     #define CPU_X86_64              1
00140     #define CPU_ID                  x86
00141 #else
00142     #define CPU_X86                 0
00143     #define CPU_I386                0
00144     #define CPU_X86_64              0
00145 #endif
00146 
00147 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
00148     #define CPU_PPC                 1
00149     #define CPU_ID                  ppc
00150     #if defined(_ARCH_PPC)
00151         #define CPU_PPC32       1
00152     #else
00153             #define CPU_PPC32       0
00154     #endif
00155     #if defined(_ARCH_PPC64)
00156         #define CPU_PPC64       1
00157     #else
00158             #define CPU_PPC64       0
00159     #endif
00160 #else
00161     #define CPU_PPC                 0
00162     #define CPU_PPC32               0
00163     #define CPU_PPC64               0
00164 #endif
00165 
00166 #if defined(__m56800E__) || defined(__m56800__)
00167     #define CPU_DSP56K              1
00168     #define CPU_ID                  dsp56k
00169 #else
00170     #define CPU_DSP56K              0
00171 #endif
00172 
00173 #if defined (__AVR__)
00174     #define CPU_AVR                 1
00175     #define CPU_ID                  avr
00176 
00177     #if defined(__AVR_ATmega64__)
00178         #define CPU_AVR_ATMEGA64    1
00179     #else
00180         #define CPU_AVR_ATMEGA64    0
00181     #endif
00182 
00183     #if defined(__AVR_ATmega103__)
00184         #define CPU_AVR_ATMEGA103   1
00185     #else
00186         #define CPU_AVR_ATMEGA103   0
00187     #endif
00188 
00189     #if defined(__AVR_ATmega128__)
00190         #define CPU_AVR_ATMEGA128   1
00191     #else
00192         #define CPU_AVR_ATMEGA128   0
00193     #endif
00194 
00195     #if defined(__AVR_ATmega8__)
00196         #define CPU_AVR_ATMEGA8     1
00197     #else
00198         #define CPU_AVR_ATMEGA8     0
00199     #endif
00200 
00201     #if defined(__AVR_ATmega168__)
00202         #define CPU_AVR_ATMEGA168   1
00203     #else
00204         #define CPU_AVR_ATMEGA168   0
00205     #endif
00206 
00207     #if defined(__AVR_ATmega1281__)
00208         #define CPU_AVR_ATMEGA1281  1
00209     #else
00210         #define CPU_AVR_ATMEGA1281  0
00211     #endif
00212 
00213     #if CPU_AVR_ATMEGA64 + CPU_AVR_ATMEGA103 + CPU_AVR_ATMEGA128 \
00214       + CPU_AVR_ATMEGA8 + CPU_AVR_ATMEGA168 + CPU_AVR_ATMEGA1281 != 1
00215         #error AVR CPU configuration error
00216     #endif
00217 #else
00218     #define CPU_AVR                 0
00219     #define CPU_AVR_ATMEGA8         0
00220     #define CPU_AVR_ATMEGA168       0
00221     #define CPU_AVR_ATMEGA64        0
00222     #define CPU_AVR_ATMEGA103       0
00223     #define CPU_AVR_ATMEGA128       0
00224     #define CPU_AVR_ATMEGA1281      0
00225 #endif
00226 
00227 
00228 /* Self-check for the detection: only one CPU must be detected */
00229 #if CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
00230     #error Unknown CPU
00231 #elif !defined(CPU_ID)
00232     #error CPU_ID not defined
00233 #elif CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
00234     #error Internal CPU configuration error
00235 #endif
00236 
00237 
00238 #endif /* CPU_DETECT_H */