Chameleon

Chameleon Svn Source Tree

Root/branches/cparm/i386/modules/include/TargetConditionals.h

1/*
2 * Copyright (c) 2000-2008 by Apple Inc.. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24/*
25 File: TargetConditionals.h
26
27 Contains: Autoconfiguration of TARGET_ conditionals for Mac OS X and iPhone
28
29 Note: TargetConditionals.h in 3.4 Universal Interfaces works
30 with all compilers. This header only recognizes compilers
31 known to run on Mac OS X.
32
33*/
34
35#ifndef __TARGETCONDITIONALS__
36#define __TARGETCONDITIONALS__
37/****************************************************************************************************
38
39 TARGET_CPU_*
40 These conditionals specify which microprocessor instruction set is being
41 generated. At most one of these is true, the rest are false.
42
43 TARGET_CPU_PPC - Compiler is generating PowerPC instructions for 32-bit mode
44 TARGET_CPU_PPC64 - Compiler is generating PowerPC instructions for 64-bit mode
45 TARGET_CPU_68K - Compiler is generating 680x0 instructions
46 TARGET_CPU_X86 - Compiler is generating x86 instructions
47 TARGET_CPU_ARM - Compiler is generating ARM instructions
48 TARGET_CPU_MIPS - Compiler is generating MIPS instructions
49 TARGET_CPU_SPARC - Compiler is generating Sparc instructions
50 TARGET_CPU_ALPHA - Compiler is generating Dec Alpha instructions
51
52
53 TARGET_OS_*
54 These conditionals specify in which Operating System the generated code will
55 run. The MAC/WIN32/UNIX conditionals are mutually exclusive. The EMBEDDED/IPHONE
56conditionals are variants of TARGET_OS_MAC.
57
58 TARGET_OS_MAC - Generate code will run under Mac OS
59 TARGET_OS_WIN32 - Generate code will run under 32-bit Windows
60 TARGET_OS_UNIX - Generate code will run under some non Mac OS X unix
61 TARGET_OS_EMBEDDED - Generate code will run under an embedded OS variant
62 of TARGET_OS_MAC
63 TARGET_OS_IPHONE - Generate code will run under iPhone OS which
64 is a variant of TARGET_OS_MAC.
65
66 TARGET_RT_*
67 These conditionals specify in which runtime the generated code will
68 run. This is needed when the OS and CPU support more than one runtime
69 (e.g. Mac OS X supports CFM and mach-o).
70
71 TARGET_RT_LITTLE_ENDIAN - Generated code uses little endian format for integers
72 TARGET_RT_BIG_ENDIAN - Generated code uses big endian format for integers
73 TARGET_RT_64_BIT - Generated code uses 64-bit pointers
74 TARGET_RT_MAC_CFM - TARGET_OS_MAC is true and CFM68K or PowerPC CFM (TVectors) are used
75 TARGET_RT_MAC_MACHO - TARGET_OS_MAC is true and Mach-O/dlyd runtime is used
76
77
78 TARGET_IPHONE_SIMULATOR - Generate code for running under iPhone Simulator
79
80
81****************************************************************************************************/
82
83
84/*
85 * gcc based compiler used on Mac OS X
86 */
87#if defined(__GNUC__) && ( defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__MACOS_CLASSIC__) )
88 #define TARGET_OS_MAC 1
89 #define TARGET_OS_WIN32 0
90 #define TARGET_OS_UNIX 0
91 #define TARGET_OS_EMBEDDED 0
92 #define TARGET_OS_IPHONE 0
93 #define TARGET_IPHONE_SIMULATOR 0
94 #if defined(__ppc__)
95 #define TARGET_CPU_PPC 1
96 #define TARGET_CPU_PPC64 0
97 #define TARGET_CPU_68K 0
98 #define TARGET_CPU_X86 0
99 #define TARGET_CPU_X86_64 0
100 #define TARGET_CPU_ARM 0
101 #define TARGET_CPU_MIPS 0
102 #define TARGET_CPU_SPARC 0
103 #define TARGET_CPU_ALPHA 0
104 #define TARGET_RT_LITTLE_ENDIAN 0
105 #define TARGET_RT_BIG_ENDIAN 1
106 #define TARGET_RT_64_BIT 0
107 #ifdef __MACOS_CLASSIC__
108 #define TARGET_RT_MAC_CFM 1
109 #define TARGET_RT_MAC_MACHO 0
110 #else
111 #define TARGET_RT_MAC_CFM 0
112 #define TARGET_RT_MAC_MACHO 1
113 #endif
114 #elif defined(__ppc64__)
115 #define TARGET_CPU_PPC 0
116 #define TARGET_CPU_PPC64 1
117 #define TARGET_CPU_68K 0
118 #define TARGET_CPU_X86 0
119 #define TARGET_CPU_X86_64 0
120 #define TARGET_CPU_ARM 0
121 #define TARGET_CPU_MIPS 0
122 #define TARGET_CPU_SPARC 0
123 #define TARGET_CPU_ALPHA 0
124 #define TARGET_RT_LITTLE_ENDIAN 0
125 #define TARGET_RT_BIG_ENDIAN 1
126 #define TARGET_RT_64_BIT 1
127 #define TARGET_RT_MAC_CFM 0
128 #define TARGET_RT_MAC_MACHO 1
129 #elif defined(__i386__)
130 #define TARGET_CPU_PPC 0
131 #define TARGET_CPU_PPC64 0
132 #define TARGET_CPU_68K 0
133 #define TARGET_CPU_X86 1
134 #define TARGET_CPU_X86_64 0
135 #define TARGET_CPU_ARM 0
136 #define TARGET_CPU_MIPS 0
137 #define TARGET_CPU_SPARC 0
138 #define TARGET_CPU_ALPHA 0
139 #define TARGET_RT_MAC_CFM 0
140 #define TARGET_RT_MAC_MACHO 1
141 #define TARGET_RT_LITTLE_ENDIAN 1
142 #define TARGET_RT_BIG_ENDIAN 0
143 #define TARGET_RT_64_BIT 0
144 #elif defined(__x86_64__)
145 #define TARGET_CPU_PPC 0
146 #define TARGET_CPU_PPC64 0
147 #define TARGET_CPU_68K 0
148 #define TARGET_CPU_X86 0
149 #define TARGET_CPU_X86_64 1
150 #define TARGET_CPU_ARM 0
151 #define TARGET_CPU_MIPS 0
152 #define TARGET_CPU_SPARC 0
153 #define TARGET_CPU_ALPHA 0
154 #define TARGET_RT_MAC_CFM 0
155 #define TARGET_RT_MAC_MACHO 1
156 #define TARGET_RT_LITTLE_ENDIAN 1
157 #define TARGET_RT_BIG_ENDIAN 0
158 #define TARGET_RT_64_BIT 1
159 #elif defined(__arm__)
160 #define TARGET_CPU_PPC 0
161 #define TARGET_CPU_PPC64 0
162 #define TARGET_CPU_68K 0
163 #define TARGET_CPU_X86 0
164 #define TARGET_CPU_X86_64 0
165 #define TARGET_CPU_ARM 1
166 #define TARGET_CPU_MIPS 0
167 #define TARGET_CPU_SPARC 0
168 #define TARGET_CPU_ALPHA 0
169 #define TARGET_RT_MAC_CFM 0
170 #define TARGET_RT_MAC_MACHO 1
171 #define TARGET_RT_LITTLE_ENDIAN 1
172 #define TARGET_RT_BIG_ENDIAN 0
173 #define TARGET_RT_64_BIT 0
174 #else
175 #error unrecognized GNU C compiler
176 #endif
177
178
179/*
180 * CodeWarrior compiler from Metrowerks/Motorola
181 */
182#elif defined(__MWERKS__)
183 #define TARGET_OS_MAC 1
184 #define TARGET_OS_WIN32 0
185 #define TARGET_OS_UNIX 0
186 #define TARGET_OS_EMBEDDED 0
187 #if defined(__POWERPC__)
188 #define TARGET_CPU_PPC 1
189 #define TARGET_CPU_PPC64 0
190 #define TARGET_CPU_68K 0
191 #define TARGET_CPU_X86 0
192 #define TARGET_CPU_MIPS 0
193 #define TARGET_CPU_SPARC 0
194 #define TARGET_CPU_ALPHA 0
195 #define TARGET_RT_LITTLE_ENDIAN 0
196 #define TARGET_RT_BIG_ENDIAN 1
197 #elif defined(__INTEL__)
198 #define TARGET_CPU_PPC 0
199 #define TARGET_CPU_PPC64 0
200 #define TARGET_CPU_68K 0
201 #define TARGET_CPU_X86 1
202 #define TARGET_CPU_MIPS 0
203 #define TARGET_CPU_SPARC 0
204 #define TARGET_CPU_ALPHA 0
205 #define TARGET_RT_LITTLE_ENDIAN 1
206 #define TARGET_RT_BIG_ENDIAN 0
207 #else
208 #error unknown Metrowerks CPU type
209 #endif
210 #define TARGET_RT_64_BIT 0
211 #ifdef __MACH__
212 #define TARGET_RT_MAC_CFM 0
213 #define TARGET_RT_MAC_MACHO 1
214 #else
215 #define TARGET_RT_MAC_CFM 1
216 #define TARGET_RT_MAC_MACHO 0
217 #endif
218
219/*
220 * unknown compiler
221 */
222#else
223 #if defined(TARGET_CPU_PPC) && TARGET_CPU_PPC
224 #define TARGET_CPU_PPC64 0
225 #define TARGET_CPU_68K 0
226 #define TARGET_CPU_X86 0
227 #define TARGET_CPU_X86_64 0
228 #define TARGET_CPU_ARM 0
229 #define TARGET_CPU_MIPS 0
230 #define TARGET_CPU_SPARC 0
231 #define TARGET_CPU_ALPHA 0
232 #elif defined(TARGET_CPU_PPC64) && TARGET_CPU_PPC64
233 #define TARGET_CPU_PPC 0
234 #define TARGET_CPU_68K 0
235 #define TARGET_CPU_X86 0
236 #define TARGET_CPU_X86_64 0
237 #define TARGET_CPU_ARM 0
238 #define TARGET_CPU_MIPS 0
239 #define TARGET_CPU_SPARC 0
240 #define TARGET_CPU_ALPHA 0
241 #elif defined(TARGET_CPU_X86) && TARGET_CPU_X86
242 #define TARGET_CPU_PPC 0
243 #define TARGET_CPU_PPC64 0
244 #define TARGET_CPU_X86_64 0
245 #define TARGET_CPU_68K 0
246 #define TARGET_CPU_ARM 0
247 #define TARGET_CPU_MIPS 0
248 #define TARGET_CPU_SPARC 0
249 #define TARGET_CPU_ALPHA 0
250 #elif defined(TARGET_CPU_X86_64) && TARGET_CPU_X86_64
251 #define TARGET_CPU_PPC 0
252 #define TARGET_CPU_PPC64 0
253 #define TARGET_CPU_X86 0
254 #define TARGET_CPU_68K 0
255 #define TARGET_CPU_ARM 0
256 #define TARGET_CPU_MIPS 0
257 #define TARGET_CPU_SPARC 0
258 #define TARGET_CPU_ALPHA 0
259 #elif defined(TARGET_CPU_ARM) && TARGET_CPU_ARM
260 #define TARGET_CPU_PPC 0
261 #define TARGET_CPU_PPC64 0
262 #define TARGET_CPU_X86 0
263 #define TARGET_CPU_X86_64 0
264 #define TARGET_CPU_68K 0
265 #define TARGET_CPU_MIPS 0
266 #define TARGET_CPU_SPARC 0
267 #define TARGET_CPU_ALPHA 0
268 #else
269 /*
270 NOTE: If your compiler errors out here then support for your compiler
271 has not yet been added to TargetConditionals.h.
272
273 TargetConditionals.h is designed to be plug-and-play. It auto detects
274 which compiler is being run and configures the TARGET_ conditionals
275 appropriately.
276
277 The short term work around is to set the TARGET_CPU_ and TARGET_OS_
278 on the command line to the compiler (e.g. -DTARGET_CPU_MIPS=1 -DTARGET_OS_UNIX=1)
279
280 The long term solution is to add a new case to this file which
281 auto detects your compiler and sets up the TARGET_ conditionals.
282 Then submit the changes to Apple Computer.
283 */
284 #error TargetConditionals.h: unknown compiler (see comment above)
285 #define TARGET_CPU_PPC 0
286 #define TARGET_CPU_68K 0
287 #define TARGET_CPU_X86 0
288 #define TARGET_CPU_ARM 0
289 #define TARGET_CPU_MIPS 0
290 #define TARGET_CPU_SPARC 0
291 #define TARGET_CPU_ALPHA 0
292 #endif
293 #define TARGET_OS_MAC 1
294 #define TARGET_OS_WIN32 0
295 #define TARGET_OS_UNIX 0
296 #define TARGET_OS_EMBEDDED 0
297 #if TARGET_CPU_PPC || TARGET_CPU_PPC64
298 #define TARGET_RT_BIG_ENDIAN 1
299 #define TARGET_RT_LITTLE_ENDIAN 0
300 #else
301 #define TARGET_RT_BIG_ENDIAN 0
302 #define TARGET_RT_LITTLE_ENDIAN 1
303 #endif
304 #if TARGET_CPU_PPC64 || TARGET_CPU_X86_64
305 #define TARGET_RT_64_BIT 1
306 #else
307 #define TARGET_RT_64_BIT 0
308 #endif
309 #ifdef __MACH__
310 #define TARGET_RT_MAC_MACHO 1
311 #define TARGET_RT_MAC_CFM 0
312 #else
313 #define TARGET_RT_MAC_MACHO 0
314 #define TARGET_RT_MAC_CFM 1
315 #endif
316
317#endif
318
319#endif /* __TARGETCONDITIONALS__ */
320

Archive Download this file

Revision: 2182