Ticket #69526: TargetConditionals-macos14.4.h

File TargetConditionals-macos14.4.h, 17.6 KB (added by ryandesign (Ryan Carsten Schmidt), 2 months ago)
Line 
1/*
2 * Copyright (c) 2000-2014 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 *
40 *  TARGET_CPU_*
41 *  These conditionals specify which microprocessor instruction set is being
42 *  generated.  At most one of these is true, the rest are false.
43 *
44 *      TARGET_CPU_PPC          - Compiler is generating PowerPC instructions for 32-bit mode
45 *      TARGET_CPU_PPC64        - Compiler is generating PowerPC instructions for 64-bit mode
46 *      TARGET_CPU_68K          - Compiler is generating 680x0 instructions
47 *      TARGET_CPU_X86          - Compiler is generating x86 instructions for 32-bit mode
48 *      TARGET_CPU_X86_64       - Compiler is generating x86 instructions for 64-bit mode
49 *      TARGET_CPU_ARM          - Compiler is generating ARM instructions for 32-bit mode
50 *      TARGET_CPU_ARM64        - Compiler is generating ARM instructions for 64-bit mode
51 *      TARGET_CPU_MIPS         - Compiler is generating MIPS instructions
52 *      TARGET_CPU_SPARC        - Compiler is generating Sparc instructions
53 *      TARGET_CPU_ALPHA        - Compiler is generating Dec Alpha instructions
54 */
55
56
57
58/*
59 *  TARGET_OS_*
60 *
61 *  These conditionals specify in which Operating System the generated code will
62 *  run.  Indention is used to show which conditionals are evolutionary subclasses.
63 *
64 *  The MAC/WIN32/UNIX conditionals are mutually exclusive.
65 *  The IOS/TV/WATCH/VISION conditionals are mutually exclusive.
66 *
67 *    TARGET_OS_WIN32              - Generated code will run on WIN32 API
68 *    TARGET_OS_WINDOWS            - Generated code will run on Windows
69 *    TARGET_OS_UNIX               - Generated code will run on some Unix (not macOS)
70 *    TARGET_OS_LINUX              - Generated code will run on Linux
71 *    TARGET_OS_MAC                - Generated code will run on a variant of macOS
72 *      TARGET_OS_OSX                - Generated code will run on macOS
73 *      TARGET_OS_IPHONE             - Generated code will run on a variant of iOS (firmware, devices, simulator)
74 *        TARGET_OS_IOS                - Generated code will run on iOS
75 *          TARGET_OS_MACCATALYST        - Generated code will run on macOS
76 *        TARGET_OS_TV                 - Generated code will run on tvOS
77 *        TARGET_OS_WATCH              - Generated code will run on watchOS
78 *        TARGET_OS_VISION             - Generated code will run on visionOS
79 *        TARGET_OS_BRIDGE             - Generated code will run on bridge devices
80 *      TARGET_OS_SIMULATOR          - Generated code will run on an iOS, tvOS, watchOS, or visionOS simulator
81 *      TARGET_OS_DRIVERKIT          - Generated code will run on macOS, iOS, tvOS, watchOS, or visionOS
82 *
83 *    TARGET_OS_EMBEDDED           - DEPRECATED: Use TARGET_OS_IPHONE and/or TARGET_OS_SIMULATOR instead
84 *    TARGET_IPHONE_SIMULATOR      - DEPRECATED: Same as TARGET_OS_SIMULATOR
85 *    TARGET_OS_NANO               - DEPRECATED: Same as TARGET_OS_WATCH
86 *
87 *    +--------------------------------------------------------------------------------------+
88 *    |                                    TARGET_OS_MAC                                     |
89 *    | +-----+ +------------------------------------------------------------+ +-----------+ |
90 *    | |     | |                  TARGET_OS_IPHONE                          | |           | |
91 *    | |     | | +-----------------+ +----+ +-------+ +--------+ +--------+ | |           | |
92 *    | |     | | |       IOS       | |    | |       | |        | |        | | |           | |
93 *    | | OSX | | | +-------------+ | | TV | | WATCH | | BRIDGE | | VISION | | | DRIVERKIT | |
94 *    | |     | | | | MACCATALYST | | |    | |       | |        | |        | | |           | |
95 *    | |     | | | +-------------+ | |    | |       | |        | |        | | |           | |
96 *    | |     | | +-----------------+ +----+ +-------+ +--------+ +--------+ | |           | |
97 *    | +-----+ +------------------------------------------------------------+ +-----------+ |
98 *    +--------------------------------------------------------------------------------------+
99 */
100
101/*
102 *  TARGET_RT_*
103 *
104 *  These conditionals specify in which runtime the generated code will
105 *  run. This is needed when the OS and CPU support more than one runtime
106 *  (e.g. Mac OS X supports CFM and mach-o).
107 *
108 *      TARGET_RT_LITTLE_ENDIAN - Generated code uses little endian format for integers
109 *      TARGET_RT_BIG_ENDIAN    - Generated code uses big endian format for integers
110 *      TARGET_RT_64_BIT        - Generated code uses 64-bit pointers
111 *      TARGET_RT_MAC_CFM       - TARGET_OS_MAC is true and CFM68K or PowerPC CFM (TVectors) are used
112 *      TARGET_RT_MAC_MACHO     - TARGET_OS_MAC is true and Mach-O/dlyd runtime is used
113 */
114 
115/*
116 * TARGET_OS conditionals can be enabled via clang preprocessor extensions:
117 *
118 *      __is_target_arch
119 *      __is_target_vendor
120 *      __is_target_os
121 *      __is_target_environment
122 *
123 *  "-target=x86_64-apple-ios12-macabi"
124 *      TARGET_OS_MAC=1
125 *      TARGET_OS_IPHONE=1
126 *      TARGET_OS_IOS=1
127 *      TARGET_OS_MACCATALYST=1
128 *
129 *  "-target=x86_64-apple-ios12-simulator"
130 *      TARGET_OS_MAC=1
131 *      TARGET_OS_IPHONE=1
132 *      TARGET_OS_IOS=1
133 *      TARGET_OS_SIMULATOR=1
134 *
135 * DYNAMIC_TARGETS_ENABLED indicates that the core TARGET_OS macros were enabled via clang preprocessor extensions.
136 * If this value is not set, the macro enablements will fall back to the static behavior.
137 * It is disabled by default.
138 */
139
140#if !defined(__has_extension) || !__has_extension(define_target_os_macros)
141#if defined(__has_builtin)
142 #if __has_builtin(__is_target_arch)
143  #if __has_builtin(__is_target_vendor)
144   #if __has_builtin(__is_target_os)
145    #if __has_builtin(__is_target_environment)
146
147    /* "-target=x86_64-apple-ios12-macabi" */
148    /* "-target=arm64-apple-ios12-macabi" */
149    /* "-target=arm64e-apple-ios12-macabi" */
150    #if (__is_target_arch(x86_64) || __is_target_arch(arm64) || __is_target_arch(arm64e)) && __is_target_vendor(apple) && __is_target_os(ios) && __is_target_environment(macabi)
151        #define TARGET_OS_MAC               1
152        #define TARGET_OS_IPHONE            1
153        #define TARGET_OS_IOS               1
154        #define TARGET_OS_MACCATALYST       1
155        #define TARGET_OS_MACCATALYST            1
156        #ifndef TARGET_OS_UIKITFORMAC
157         #define TARGET_OS_UIKITFORMAC      1
158        #endif
159    #define TARGET_OS_UNIX                  0
160    #define DYNAMIC_TARGETS_ENABLED         1
161    #endif
162
163    /* "-target=x86_64-apple-ios12-simulator" */
164    /* "-target=arm64-apple-ios12-simulator" */
165    /* "-target=arm64e-apple-ios12-simulator" */
166    #if (__is_target_arch(x86_64) || __is_target_arch(arm64) || __is_target_arch(arm64e)) && __is_target_vendor(apple) && __is_target_os(ios) && __is_target_environment(simulator)
167        #define TARGET_OS_MAC               1
168        #define TARGET_OS_IPHONE            1
169        #define TARGET_OS_IOS               1
170        #define TARGET_OS_SIMULATOR         1
171        #define TARGET_OS_UNIX              0
172        #define DYNAMIC_TARGETS_ENABLED     1
173    #endif
174
175
176
177    /* "-target=arm64e-apple-xros1.0[-simulator]" */
178    #if __is_target_vendor(apple) && __is_target_os(xros)
179        #define TARGET_OS_MAC               1
180        #define TARGET_OS_IPHONE            1
181
182        #if __is_target_environment(simulator)
183          #define TARGET_OS_SIMULATOR        1
184        #else
185          #define TARGET_OS_EMBEDDED        1
186        #endif
187        #define TARGET_OS_VISION            1
188        #define TARGET_OS_UNIX              0
189        #define DYNAMIC_TARGETS_ENABLED     1
190    #endif
191
192   
193    #if (__is_target_vendor(apple) && __is_target_environment(exclavecore))
194       
195        #define TARGET_OS_UNIX              0
196        #define DYNAMIC_TARGETS_ENABLED     1
197    #endif
198
199   
200    #if (__is_target_vendor(apple) && __is_target_environment(exclavekit))
201        #define TARGET_OS_MAC               1
202       
203        #define TARGET_OS_UNIX              0
204        #define DYNAMIC_TARGETS_ENABLED     1
205    #endif
206
207    /* "-target=x86_64-apple-driverkit19.0" */
208    /* "-target=arm64-apple-driverkit19.0" */
209    /* "-target=arm64e-apple-driverkit19.0" */
210    #if __is_target_vendor(apple) && __is_target_os(driverkit)
211        #define TARGET_OS_MAC               1
212        #define TARGET_OS_DRIVERKIT         1
213        #define TARGET_OS_UNIX              0
214        #define DYNAMIC_TARGETS_ENABLED     1
215    #endif
216
217    #endif /* #if __has_builtin(__is_target_environment) */
218   #endif /* #if __has_builtin(__is_target_os) */
219  #endif /* #if __has_builtin(__is_target_vendor) */
220 #endif /* #if __has_builtin(__is_target_arch) */
221#endif /* #if defined(__has_builtin) */
222
223#ifndef DYNAMIC_TARGETS_ENABLED
224     #define DYNAMIC_TARGETS_ENABLED   0
225#endif /* DYNAMIC_TARGETS_ENABLED */
226
227/*
228 *    gcc based compiler used on Mac OS X
229 */
230#if defined(__GNUC__) && ( defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__MACOS_CLASSIC__) )
231    #if !DYNAMIC_TARGETS_ENABLED
232        #define TARGET_OS_MAC               1
233        #define TARGET_OS_OSX               1
234        #define TARGET_OS_IPHONE            0
235
236        #define TARGET_OS_IOS               0
237
238        #define TARGET_OS_WATCH             0
239       
240        #define TARGET_OS_TV                0
241        #define TARGET_OS_MACCATALYST       0
242        #define TARGET_OS_MACCATALYST            0
243        #ifndef TARGET_OS_UIKITFORMAC
244         #define TARGET_OS_UIKITFORMAC      0
245        #endif
246        #define TARGET_OS_SIMULATOR         0
247        #define TARGET_OS_EMBEDDED          0
248        #define TARGET_OS_UNIX              0
249    #endif
250
251/*
252 *   CodeWarrior compiler from Metrowerks/Motorola
253 */
254#elif defined(__MWERKS__)
255    #define TARGET_OS_MAC               1
256
257/*
258 *   unknown compiler
259 */
260#else
261    #define TARGET_OS_MAC                1
262#endif
263#endif /* !defined(__has_extension) || !__has_extension(define_target_os_macros) */
264
265// This has to always be defined in the header due to limitations in define_target_os_macros
266#define TARGET_OS_RTKIT             0
267
268/*
269 *    gcc based compiler used on Mac OS X
270 */
271#if defined(__GNUC__) && ( defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__MACOS_CLASSIC__) )
272    #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
273        #define TARGET_RT_LITTLE_ENDIAN 1
274        #define TARGET_RT_BIG_ENDIAN    0
275    #else
276        #define TARGET_RT_LITTLE_ENDIAN 0
277        #define TARGET_RT_BIG_ENDIAN    1
278    #endif
279    #if __LP64__
280        #define TARGET_RT_64_BIT        1
281    #else
282        #define TARGET_RT_64_BIT        0
283    #endif
284    #if defined(__ppc__) && __MACOS_CLASSIC__
285        #define TARGET_RT_MAC_CFM       1
286        #define TARGET_RT_MAC_MACHO     0
287    #else
288        #define TARGET_RT_MAC_CFM       0
289        #define TARGET_RT_MAC_MACHO     1
290    #endif
291
292/*
293 *   CodeWarrior compiler from Metrowerks/Motorola
294 */
295#elif defined(__MWERKS__)
296    #if defined(__POWERPC__)
297        #define TARGET_RT_LITTLE_ENDIAN 0
298        #define TARGET_RT_BIG_ENDIAN    1
299    #elif defined(__INTEL__)
300        #define TARGET_RT_LITTLE_ENDIAN 1
301        #define TARGET_RT_BIG_ENDIAN    0
302    #else
303        #error unknown Metrowerks CPU type
304    #endif
305    #define TARGET_RT_64_BIT            0
306    #ifdef __MACH__
307        #define TARGET_RT_MAC_CFM       0
308        #define TARGET_RT_MAC_MACHO     1
309    #else
310        #define TARGET_RT_MAC_CFM       1
311        #define TARGET_RT_MAC_MACHO     0
312    #endif
313
314/*
315 *   unknown compiler
316 */
317#else
318    #if TARGET_CPU_PPC || TARGET_CPU_PPC64
319        #define TARGET_RT_BIG_ENDIAN     1
320        #define TARGET_RT_LITTLE_ENDIAN  0
321    #else
322        #define TARGET_RT_BIG_ENDIAN     0
323        #define TARGET_RT_LITTLE_ENDIAN  1
324    #endif
325    #if TARGET_CPU_PPC64 || TARGET_CPU_X86_64
326        #define TARGET_RT_64_BIT         1
327    #else
328        #define TARGET_RT_64_BIT         0
329    #endif
330    #ifdef __MACH__
331        #define TARGET_RT_MAC_MACHO      1
332        #define TARGET_RT_MAC_CFM        0
333    #else
334        #define TARGET_RT_MAC_MACHO      0
335        #define TARGET_RT_MAC_CFM        1
336    #endif
337#endif
338
339/*
340 *   __is_target_arch based defines
341 */
342#if defined(__has_builtin) && __has_builtin(__is_target_arch)
343    #if __is_target_arch(arm64)  || __is_target_arch(arm64e) || __is_target_arch(arm64_32)
344        #define TARGET_CPU_ARM64        1
345    #elif __is_target_arch(arm)
346        #define TARGET_CPU_ARM          1
347    #elif __is_target_arch(x86_64)
348        #define TARGET_CPU_X86_64       1
349    #elif __is_target_arch(i386)
350        #define TARGET_CPU_X86          1
351    #else
352
353            #error unrecognized arch using compiler with __is_target_arch support
354
355    #endif
356
357/*
358 *   GCC and older clang fallback
359 */
360#elif defined(__GNUC__) && ( defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__MACOS_CLASSIC__) )
361    #if defined(__ppc__)
362        #define TARGET_CPU_PPC          1
363    #elif defined(__ppc64__)
364        #define TARGET_CPU_PPC64        1
365    #elif defined(__i386__)
366        #define TARGET_CPU_X86          1
367    #elif defined(__x86_64__)
368        #define TARGET_CPU_X86_64       1
369    #elif defined(__arm__)
370        #define TARGET_CPU_ARM          1
371    #elif defined(__arm64__)
372        #define TARGET_CPU_ARM64        1
373    #else
374        #error unrecognized GNU C compiler
375    #endif
376
377/*
378 *   CodeWarrior compiler from Metrowerks/Motorola
379 */
380#elif defined(__MWERKS__)
381    #if defined(__POWERPC__)
382        #define TARGET_CPU_PPC          1
383    #elif defined(__INTEL__)
384        #define TARGET_CPU_X86          1
385    #else
386        #error unknown Metrowerks CPU type
387    #endif
388
389/*
390 *   unknown compiler
391 */
392#else
393    #if !defined(TARGET_CPU_PPC) && !defined(TARGET_CPU_PPC64)      \
394        && !defined(TARGET_CPU_X86) && !defined(TARGET_CPU_X86_64)  \
395        && !defined(TARGET_CPU_ARM) && !defined(TARGET_CPU_ARM64)
396        /*
397            TargetConditionals.h is designed to be plug-and-play.  It auto detects
398            which compiler is being run and configures the TARGET_ conditionals
399            appropriately.
400
401            The short term work around is to set the TARGET_CPU_ and TARGET_OS_
402            on the command line to the compiler (e.g. -DTARGET_CPU_MIPS=1 -DTARGET_OS_UNIX=1)
403
404            The long term solution is to add suppport for __is_target_arch and __is_target_os
405            to your compiler.
406        */
407        #error TargetConditionals.h: unknown compiler (see comment above)
408    #endif
409#endif
410
411
412
413// Make sure all TARGET_OS_* and TARGET_CPU_* values are defined
414#ifndef TARGET_OS_MAC
415    #define TARGET_OS_MAC        0
416#endif
417
418#ifndef TARGET_OS_OSX
419    #define TARGET_OS_OSX        0
420#endif
421
422#ifndef TARGET_OS_IPHONE
423    #define TARGET_OS_IPHONE     0
424#endif
425
426#ifndef TARGET_OS_IOS
427    #define TARGET_OS_IOS        0
428#endif
429
430#ifndef TARGET_OS_WATCH
431    #define TARGET_OS_WATCH      0
432#endif
433
434#ifndef TARGET_OS_TV
435    #define TARGET_OS_TV         0
436#endif
437
438#ifndef TARGET_OS_SIMULATOR
439    #define TARGET_OS_SIMULATOR  0
440#endif
441
442#ifndef TARGET_OS_EMBEDDED
443    #define TARGET_OS_EMBEDDED   0
444#endif
445
446#ifndef TARGET_OS_RTKIT
447    #define TARGET_OS_RTKIT      0
448#endif
449
450#ifndef TARGET_OS_MACCATALYST
451    #define TARGET_OS_MACCATALYST 0
452#endif
453
454#ifndef TARGET_OS_VISION
455    #define TARGET_OS_VISION     0
456#endif
457
458#ifndef TARGET_OS_UIKITFORMAC
459    #define TARGET_OS_UIKITFORMAC 0
460#endif
461
462#ifndef TARGET_OS_DRIVERKIT
463    #define TARGET_OS_DRIVERKIT 0
464#endif
465
466#ifndef TARGET_OS_WIN32
467    #define TARGET_OS_WIN32     0
468#endif
469
470#ifndef TARGET_OS_WINDOWS
471    #define TARGET_OS_WINDOWS   0
472#endif
473
474
475
476#ifndef TARGET_OS_LINUX
477    #define TARGET_OS_LINUX     0
478#endif
479
480#ifndef TARGET_CPU_PPC
481    #define TARGET_CPU_PPC      0
482#endif
483
484#ifndef TARGET_CPU_PPC64
485    #define TARGET_CPU_PPC64    0
486#endif
487
488#ifndef TARGET_CPU_68K
489    #define TARGET_CPU_68K      0
490#endif
491
492#ifndef TARGET_CPU_X86
493    #define TARGET_CPU_X86      0
494#endif
495
496#ifndef TARGET_CPU_X86_64
497    #define TARGET_CPU_X86_64   0
498#endif
499
500#ifndef TARGET_CPU_ARM
501    #define TARGET_CPU_ARM      0
502#endif
503
504#ifndef TARGET_CPU_ARM64
505    #define TARGET_CPU_ARM64    0
506#endif
507
508#ifndef TARGET_CPU_MIPS
509    #define TARGET_CPU_MIPS     0
510#endif
511
512#ifndef TARGET_CPU_SPARC
513    #define TARGET_CPU_SPARC    0
514#endif
515
516#ifndef TARGET_CPU_ALPHA
517    #define TARGET_CPU_ALPHA    0
518#endif
519
520#ifndef TARGET_ABI_USES_IOS_VALUES
521    #define TARGET_ABI_USES_IOS_VALUES  (!TARGET_CPU_X86_64 || (TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST))
522#endif
523
524#ifndef TARGET_IPHONE_SIMULATOR
525    #define TARGET_IPHONE_SIMULATOR     TARGET_OS_SIMULATOR /* deprecated */
526#endif
527
528#ifndef TARGET_OS_NANO
529    #define TARGET_OS_NANO              TARGET_OS_WATCH /* deprecated */
530#endif
531
532
533
534#endif  /* __TARGETCONDITIONALS__ */