Add support for ARM on IAR.
[bertos.git] / cfg / cpu_detect.h
1 /*!
2  * \file
3  * <!--
4  * Copyright 2004, 2005 Develer S.r.l. (http://www.develer.com/)
5  * Copyright 2004 Giovanni Bajo
6  * This file is part of DevLib - See README.devlib for information.
7  * -->
8  *
9  * \brief CPU detection through special preprocessor macros
10  *
11  */
12
13 /*#*
14  *#* $Log$
15  *#* Revision 1.3  2006/02/10 12:37:37  bernie
16  *#* Add support for ARM on IAR.
17  *#*
18  *#* Revision 1.2  2005/06/14 06:15:10  bernie
19  *#* Add X86_64 support.
20  *#*
21  *#* Revision 1.1  2005/04/11 19:04:13  bernie
22  *#* Move top-level headers to cfg/ subdir.
23  *#*
24  *#* Revision 1.4  2005/02/16 20:33:24  bernie
25  *#* Preliminary PPC support.
26  *#*
27  *#* Revision 1.3  2004/12/31 17:39:26  bernie
28  *#* Use C89 comments only.
29  *#*
30  *#* Revision 1.2  2004/08/25 14:12:08  rasky
31  *#* Aggiornato il comment block dei log RCS
32  *#*
33  *#* Revision 1.1  2004/07/30 17:14:49  rasky
34  *#* File sfuggito al commit precedente (nuova gestione unificata del detect della CPU
35  *#*
36  *#* Revision 1.2  2004/07/30 10:31:07  rasky
37  *#* Aggiunto detect per ATmega128
38  *#*/
39
40 #ifndef CPU_DETECT_H
41 #define CPU_DETECT_H
42
43 #if defined(__arm__) /* GCC */ \
44         || defined(__ARM4TM__) /* IAR: defined for all cores >= 4tm */
45         #define CPU_ARM                 1
46         #define CPU_ID                  arm
47 #else
48         #define CPU_ARM                 0
49 #endif
50
51 #if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
52         && !defined(__ARM4TM__) /* IAR: if not ARM assume I196 */
53         #define CPU_I196                1
54         #define CPU_ID                  i196
55 #else
56         #define CPU_I196                0
57 #endif
58
59 #if defined(__i386__) /* GCC */ \
60         || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
61         #define CPU_X86                 1
62         #define CPU_X86_32              1
63         #define CPU_X86_64              0
64         #define CPU_ID                  x86
65 #elif defined(__x86_64__) /* GCC */ \
66         || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
67         #define CPU_X86                 1
68         #define CPU_X86_32              0
69         #define CPU_X86_64              1
70         #define CPU_ID                  x86
71 #else
72         #define CPU_X86                 0
73         #define CPU_I386                0
74         #define CPU_X86_64              0
75 #endif
76
77 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
78         #define CPU_PPC                 1
79         #define CPU_ID                  ppc
80         #if defined(_ARCH_PPC)
81                 #define CPU_PPC32       1
82         #else
83                 #define CPU_PPC32       0
84         #endif
85         #if defined(_ARCH_PPC64)
86                 #define CPU_PPC64       1
87         #else
88                 #define CPU_PPC64       0
89         #endif
90 #else
91         #define CPU_PPC                 0
92         #define CPU_PPC32               0
93         #define CPU_PPC64               0
94 #endif
95
96 #if defined(__m56800E__) || defined(__m56800__)
97         #define CPU_DSP56K              1
98         #define CPU_ID                  dsp56k
99 #else
100         #define CPU_DSP56K              0
101 #endif
102
103 #if defined (__AVR__)
104         #define CPU_AVR                 1
105         #define CPU_ID                  avr
106
107         #if defined(__AVR_ATmega64__)
108                 #define CPU_AVR_ATMEGA64    1
109         #else
110                 #define CPU_AVR_ATMEGA64    0
111         #endif
112
113         #if defined(__AVR_ATmega103__)
114                 #define CPU_AVR_ATMEGA103   1
115         #else
116                 #define CPU_AVR_ATMEGA103   0
117         #endif
118
119         #if defined(__AVR_ATmega128__)
120                 #define CPU_AVR_ATMEGA128   1
121         #else
122                 #define CPU_AVR_ATMEGA128   0
123         #endif
124
125         #if defined(__AVR_ATmega8__)
126                 #define CPU_AVR_ATMEGA8     1
127         #else
128                 #define CPU_AVR_ATMEGA8     0
129         #endif
130 #else
131         #define CPU_AVR                 0
132         #define CPU_AVR_ATMEGA8         0
133         #define CPU_AVR_ATMEGA64        0
134         #define CPU_AVR_ATMEGA103       0
135         #define CPU_AVR_ATMEGA128       0
136 #endif
137
138
139 /* Self-check for the detection: only one CPU must be detected */
140 #if CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
141         #error Unknown CPU
142 #elif !defined(CPU_ID)
143         #error CPU_ID not defined
144 #elif CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
145         #error Internal CPU configuration error
146 #endif
147
148
149 #endif /* CPU_DETECT_H */