CYCAMORE
Loading...
Searching...
No Matches
CMakeCCompilerId.c
Go to the documentation of this file.
1#ifdef __cplusplus
2# error "A C++ compiler has been selected for C."
3#endif
4
5#if defined(__18CXX)
6# define ID_VOID_MAIN
7#endif
8#if defined(__CLASSIC_C__)
9/* cv-qualifiers did not exist in K&R C */
10# define const
11# define volatile
12#endif
13
14#if !defined(__has_include)
15/* If the compiler does not have __has_include, pretend the answer is
16 always no. */
17# define __has_include(x) 0
18#endif
19
20
21/* Version number components: V=Version, R=Revision, P=Patch
22 Version date components: YYYY=Year, MM=Month, DD=Day */
23
24#if defined(__INTEL_COMPILER) || defined(__ICC)
25# define COMPILER_ID "Intel"
26# if defined(_MSC_VER)
27# define SIMULATE_ID "MSVC"
28# endif
29# if defined(__GNUC__)
30# define SIMULATE_ID "GNU"
31# endif
32 /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
33 except that a few beta releases use the old format with V=2021. */
34# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
35# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
36# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
37# if defined(__INTEL_COMPILER_UPDATE)
38# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
39# else
40# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
41# endif
42# else
43# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
44# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
45 /* The third version component from --version is an update index,
46 but no macro is provided for it. */
47# define COMPILER_VERSION_PATCH DEC(0)
48# endif
49# if defined(__INTEL_COMPILER_BUILD_DATE)
50 /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
51# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
52# endif
53# if defined(_MSC_VER)
54 /* _MSC_VER = VVRR */
55# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
56# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
57# endif
58# if defined(__GNUC__)
59# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
60# elif defined(__GNUG__)
61# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
62# endif
63# if defined(__GNUC_MINOR__)
64# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
65# endif
66# if defined(__GNUC_PATCHLEVEL__)
67# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
68# endif
69
70#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
71# define COMPILER_ID "IntelLLVM"
72#if defined(_MSC_VER)
73# define SIMULATE_ID "MSVC"
74#endif
75#if defined(__GNUC__)
76# define SIMULATE_ID "GNU"
77#endif
78/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
79 * later. Look for 6 digit vs. 8 digit version number to decide encoding.
80 * VVVV is no smaller than the current year when a version is released.
81 */
82#if __INTEL_LLVM_COMPILER < 1000000L
83# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
84# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
85# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
86#else
87# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
88# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
89# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
90#endif
91#if defined(_MSC_VER)
92 /* _MSC_VER = VVRR */
93# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
94# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
95#endif
96#if defined(__GNUC__)
97# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
98#elif defined(__GNUG__)
99# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
100#endif
101#if defined(__GNUC_MINOR__)
102# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
103#endif
104#if defined(__GNUC_PATCHLEVEL__)
105# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
106#endif
107
108#elif defined(__PATHCC__)
109# define COMPILER_ID "PathScale"
110# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
111# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
112# if defined(__PATHCC_PATCHLEVEL__)
113# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
114# endif
115
116#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
117# define COMPILER_ID "Embarcadero"
118# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
119# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
120# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
121
122#elif defined(__BORLANDC__)
123# define COMPILER_ID "Borland"
124 /* __BORLANDC__ = 0xVRR */
125# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
126# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
127
128#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
129# define COMPILER_ID "Watcom"
130 /* __WATCOMC__ = VVRR */
131# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
132# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
133# if (__WATCOMC__ % 10) > 0
134# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
135# endif
136
137#elif defined(__WATCOMC__)
138# define COMPILER_ID "OpenWatcom"
139 /* __WATCOMC__ = VVRP + 1100 */
140# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
141# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
142# if (__WATCOMC__ % 10) > 0
143# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
144# endif
145
146#elif defined(__SUNPRO_C)
147# define COMPILER_ID "SunPro"
148# if __SUNPRO_C >= 0x5100
149 /* __SUNPRO_C = 0xVRRP */
150# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
151# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
152# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
153# else
154 /* __SUNPRO_CC = 0xVRP */
155# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
156# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
157# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
158# endif
159
160#elif defined(__HP_cc)
161# define COMPILER_ID "HP"
162 /* __HP_cc = VVRRPP */
163# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
164# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
165# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
166
167#elif defined(__DECC)
168# define COMPILER_ID "Compaq"
169 /* __DECC_VER = VVRRTPPPP */
170# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
171# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
172# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
173
174#elif defined(__IBMC__) && defined(__COMPILER_VER__)
175# define COMPILER_ID "zOS"
176 /* __IBMC__ = VRP */
177# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
178# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
179# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
180
181#elif defined(__open_xl__) && defined(__clang__)
182# define COMPILER_ID "IBMClang"
183# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
184# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
185# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
186# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
187# define COMPILER_VERSION_INTERNAL_STR __clang_version__
188
189
190#elif defined(__ibmxl__) && defined(__clang__)
191# define COMPILER_ID "XLClang"
192# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
193# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
194# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
195# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
196
197
198#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
199# define COMPILER_ID "XL"
200 /* __IBMC__ = VRP */
201# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
202# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
203# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
204
205#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
206# define COMPILER_ID "VisualAge"
207 /* __IBMC__ = VRP */
208# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
209# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
210# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
211
212#elif defined(__NVCOMPILER)
213# define COMPILER_ID "NVHPC"
214# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
215# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
216# if defined(__NVCOMPILER_PATCHLEVEL__)
217# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
218# endif
219
220#elif defined(__PGI)
221# define COMPILER_ID "PGI"
222# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
223# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
224# if defined(__PGIC_PATCHLEVEL__)
225# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
226# endif
227
228#elif defined(__clang__) && defined(__cray__)
229# define COMPILER_ID "CrayClang"
230# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
231# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
232# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
233# define COMPILER_VERSION_INTERNAL_STR __clang_version__
234
235
236#elif defined(_CRAYC)
237# define COMPILER_ID "Cray"
238# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
239# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
240
241#elif defined(__TI_COMPILER_VERSION__)
242# define COMPILER_ID "TI"
243 /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
244# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
245# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
246# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
247
248#elif defined(__CLANG_FUJITSU)
249# define COMPILER_ID "FujitsuClang"
250# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
251# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
252# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
253# define COMPILER_VERSION_INTERNAL_STR __clang_version__
254
255
256#elif defined(__FUJITSU)
257# define COMPILER_ID "Fujitsu"
258# if defined(__FCC_version__)
259# define COMPILER_VERSION __FCC_version__
260# elif defined(__FCC_major__)
261# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
262# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
263# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
264# endif
265# if defined(__fcc_version)
266# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
267# elif defined(__FCC_VERSION)
268# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
269# endif
270
271
272#elif defined(__ghs__)
273# define COMPILER_ID "GHS"
274/* __GHS_VERSION_NUMBER = VVVVRP */
275# ifdef __GHS_VERSION_NUMBER
276# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
277# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
278# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
279# endif
280
281#elif defined(__TASKING__)
282# define COMPILER_ID "Tasking"
283 # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
284 # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
285# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
286
287#elif defined(__ORANGEC__)
288# define COMPILER_ID "OrangeC"
289# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
290# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
291# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
292
293#elif defined(__TINYC__)
294# define COMPILER_ID "TinyCC"
295
296#elif defined(__BCC__)
297# define COMPILER_ID "Bruce"
298
299#elif defined(__SCO_VERSION__)
300# define COMPILER_ID "SCO"
301
302#elif defined(__ARMCC_VERSION) && !defined(__clang__)
303# define COMPILER_ID "ARMCC"
304#if __ARMCC_VERSION >= 1000000
305 /* __ARMCC_VERSION = VRRPPPP */
306 # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
307 # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
308 # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
309#else
310 /* __ARMCC_VERSION = VRPPPP */
311 # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
312 # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
313 # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
314#endif
315
316
317#elif defined(__clang__) && defined(__apple_build_version__)
318# define COMPILER_ID "AppleClang"
319# if defined(_MSC_VER)
320# define SIMULATE_ID "MSVC"
321# endif
322# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
323# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
324# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
325# if defined(_MSC_VER)
326 /* _MSC_VER = VVRR */
327# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
328# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
329# endif
330# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
331
332#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
333# define COMPILER_ID "ARMClang"
334 # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
335 # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
336 # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
337# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
338
339#elif defined(__clang__) && defined(__ti__)
340# define COMPILER_ID "TIClang"
341 # define COMPILER_VERSION_MAJOR DEC(__ti_major__)
342 # define COMPILER_VERSION_MINOR DEC(__ti_minor__)
343 # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__)
344# define COMPILER_VERSION_INTERNAL DEC(__ti_version__)
345
346#elif defined(__clang__)
347# define COMPILER_ID "Clang"
348# if defined(_MSC_VER)
349# define SIMULATE_ID "MSVC"
350# endif
351# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
352# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
353# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
354# if defined(_MSC_VER)
355 /* _MSC_VER = VVRR */
356# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
357# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
358# endif
359
360#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
361# define COMPILER_ID "LCC"
362# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
363# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
364# if defined(__LCC_MINOR__)
365# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
366# endif
367# if defined(__GNUC__) && defined(__GNUC_MINOR__)
368# define SIMULATE_ID "GNU"
369# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
370# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
371# if defined(__GNUC_PATCHLEVEL__)
372# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
373# endif
374# endif
375
376#elif defined(__GNUC__)
377# define COMPILER_ID "GNU"
378# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
379# if defined(__GNUC_MINOR__)
380# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
381# endif
382# if defined(__GNUC_PATCHLEVEL__)
383# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
384# endif
385
386#elif defined(_MSC_VER)
387# define COMPILER_ID "MSVC"
388 /* _MSC_VER = VVRR */
389# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
390# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
391# if defined(_MSC_FULL_VER)
392# if _MSC_VER >= 1400
393 /* _MSC_FULL_VER = VVRRPPPPP */
394# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
395# else
396 /* _MSC_FULL_VER = VVRRPPPP */
397# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
398# endif
399# endif
400# if defined(_MSC_BUILD)
401# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
402# endif
403
404#elif defined(_ADI_COMPILER)
405# define COMPILER_ID "ADSP"
406#if defined(__VERSIONNUM__)
407 /* __VERSIONNUM__ = 0xVVRRPPTT */
408# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
409# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
410# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
411# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
412#endif
413
414#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
415# define COMPILER_ID "IAR"
416# if defined(__VER__) && defined(__ICCARM__)
417# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
418# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
419# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
420# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
421# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
422# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
423# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
424# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
425# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
426# endif
427
428#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
429# define COMPILER_ID "SDCC"
430# if defined(__SDCC_VERSION_MAJOR)
431# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
432# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
433# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
434# else
435 /* SDCC = VRP */
436# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
437# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
438# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
439# endif
440
441
442/* These compilers are either not known or too old to define an
443 identification macro. Try to identify the platform and guess that
444 it is the native compiler. */
445#elif defined(__hpux) || defined(__hpua)
446# define COMPILER_ID "HP"
447
448#else /* unknown compiler */
449# define COMPILER_ID ""
450#endif
451
452/* Construct the string literal in pieces to prevent the source from
453 getting matched. Store it in a pointer rather than an array
454 because some compilers will just produce instructions to fill the
455 array rather than assigning a pointer to a static array. */
456char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
457#ifdef SIMULATE_ID
458char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
459#endif
460
461#ifdef __QNXNTO__
462char const* qnxnto = "INFO" ":" "qnxnto[]";
463#endif
464
465#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
466char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
467#endif
468
469#define STRINGIFY_HELPER(X) #X
470#define STRINGIFY(X) STRINGIFY_HELPER(X)
471
472/* Identify known platforms by name. */
473#if defined(__linux) || defined(__linux__) || defined(linux)
474# define PLATFORM_ID "Linux"
475
476#elif defined(__MSYS__)
477# define PLATFORM_ID "MSYS"
478
479#elif defined(__CYGWIN__)
480# define PLATFORM_ID "Cygwin"
481
482#elif defined(__MINGW32__)
483# define PLATFORM_ID "MinGW"
484
485#elif defined(__APPLE__)
486# define PLATFORM_ID "Darwin"
487
488#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
489# define PLATFORM_ID "Windows"
490
491#elif defined(__FreeBSD__) || defined(__FreeBSD)
492# define PLATFORM_ID "FreeBSD"
493
494#elif defined(__NetBSD__) || defined(__NetBSD)
495# define PLATFORM_ID "NetBSD"
496
497#elif defined(__OpenBSD__) || defined(__OPENBSD)
498# define PLATFORM_ID "OpenBSD"
499
500#elif defined(__sun) || defined(sun)
501# define PLATFORM_ID "SunOS"
502
503#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
504# define PLATFORM_ID "AIX"
505
506#elif defined(__hpux) || defined(__hpux__)
507# define PLATFORM_ID "HP-UX"
508
509#elif defined(__HAIKU__)
510# define PLATFORM_ID "Haiku"
511
512#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
513# define PLATFORM_ID "BeOS"
514
515#elif defined(__QNX__) || defined(__QNXNTO__)
516# define PLATFORM_ID "QNX"
517
518#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
519# define PLATFORM_ID "Tru64"
520
521#elif defined(__riscos) || defined(__riscos__)
522# define PLATFORM_ID "RISCos"
523
524#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
525# define PLATFORM_ID "SINIX"
526
527#elif defined(__UNIX_SV__)
528# define PLATFORM_ID "UNIX_SV"
529
530#elif defined(__bsdos__)
531# define PLATFORM_ID "BSDOS"
532
533#elif defined(_MPRAS) || defined(MPRAS)
534# define PLATFORM_ID "MP-RAS"
535
536#elif defined(__osf) || defined(__osf__)
537# define PLATFORM_ID "OSF1"
538
539#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
540# define PLATFORM_ID "SCO_SV"
541
542#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
543# define PLATFORM_ID "ULTRIX"
544
545#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
546# define PLATFORM_ID "Xenix"
547
548#elif defined(__WATCOMC__)
549# if defined(__LINUX__)
550# define PLATFORM_ID "Linux"
551
552# elif defined(__DOS__)
553# define PLATFORM_ID "DOS"
554
555# elif defined(__OS2__)
556# define PLATFORM_ID "OS2"
557
558# elif defined(__WINDOWS__)
559# define PLATFORM_ID "Windows3x"
560
561# elif defined(__VXWORKS__)
562# define PLATFORM_ID "VxWorks"
563
564# else /* unknown platform */
565# define PLATFORM_ID
566# endif
567
568#elif defined(__INTEGRITY)
569# if defined(INT_178B)
570# define PLATFORM_ID "Integrity178"
571
572# else /* regular Integrity */
573# define PLATFORM_ID "Integrity"
574# endif
575
576# elif defined(_ADI_COMPILER)
577# define PLATFORM_ID "ADSP"
578
579#else /* unknown platform */
580# define PLATFORM_ID
581
582#endif
583
584/* For windows compilers MSVC and Intel we can determine
585 the architecture of the compiler being used. This is because
586 the compilers do not have flags that can change the architecture,
587 but rather depend on which compiler is being used
588*/
589#if defined(_WIN32) && defined(_MSC_VER)
590# if defined(_M_IA64)
591# define ARCHITECTURE_ID "IA64"
592
593# elif defined(_M_ARM64EC)
594# define ARCHITECTURE_ID "ARM64EC"
595
596# elif defined(_M_X64) || defined(_M_AMD64)
597# define ARCHITECTURE_ID "x64"
598
599# elif defined(_M_IX86)
600# define ARCHITECTURE_ID "X86"
601
602# elif defined(_M_ARM64)
603# define ARCHITECTURE_ID "ARM64"
604
605# elif defined(_M_ARM)
606# if _M_ARM == 4
607# define ARCHITECTURE_ID "ARMV4I"
608# elif _M_ARM == 5
609# define ARCHITECTURE_ID "ARMV5I"
610# else
611# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
612# endif
613
614# elif defined(_M_MIPS)
615# define ARCHITECTURE_ID "MIPS"
616
617# elif defined(_M_SH)
618# define ARCHITECTURE_ID "SHx"
619
620# else /* unknown architecture */
621# define ARCHITECTURE_ID ""
622# endif
623
624#elif defined(__WATCOMC__)
625# if defined(_M_I86)
626# define ARCHITECTURE_ID "I86"
627
628# elif defined(_M_IX86)
629# define ARCHITECTURE_ID "X86"
630
631# else /* unknown architecture */
632# define ARCHITECTURE_ID ""
633# endif
634
635#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
636# if defined(__ICCARM__)
637# define ARCHITECTURE_ID "ARM"
638
639# elif defined(__ICCRX__)
640# define ARCHITECTURE_ID "RX"
641
642# elif defined(__ICCRH850__)
643# define ARCHITECTURE_ID "RH850"
644
645# elif defined(__ICCRL78__)
646# define ARCHITECTURE_ID "RL78"
647
648# elif defined(__ICCRISCV__)
649# define ARCHITECTURE_ID "RISCV"
650
651# elif defined(__ICCAVR__)
652# define ARCHITECTURE_ID "AVR"
653
654# elif defined(__ICC430__)
655# define ARCHITECTURE_ID "MSP430"
656
657# elif defined(__ICCV850__)
658# define ARCHITECTURE_ID "V850"
659
660# elif defined(__ICC8051__)
661# define ARCHITECTURE_ID "8051"
662
663# elif defined(__ICCSTM8__)
664# define ARCHITECTURE_ID "STM8"
665
666# else /* unknown architecture */
667# define ARCHITECTURE_ID ""
668# endif
669
670#elif defined(__ghs__)
671# if defined(__PPC64__)
672# define ARCHITECTURE_ID "PPC64"
673
674# elif defined(__ppc__)
675# define ARCHITECTURE_ID "PPC"
676
677# elif defined(__ARM__)
678# define ARCHITECTURE_ID "ARM"
679
680# elif defined(__x86_64__)
681# define ARCHITECTURE_ID "x64"
682
683# elif defined(__i386__)
684# define ARCHITECTURE_ID "X86"
685
686# else /* unknown architecture */
687# define ARCHITECTURE_ID ""
688# endif
689
690#elif defined(__clang__) && defined(__ti__)
691# if defined(__ARM_ARCH)
692# define ARCHITECTURE_ID "ARM"
693
694# else /* unknown architecture */
695# define ARCHITECTURE_ID ""
696# endif
697
698#elif defined(__TI_COMPILER_VERSION__)
699# if defined(__TI_ARM__)
700# define ARCHITECTURE_ID "ARM"
701
702# elif defined(__MSP430__)
703# define ARCHITECTURE_ID "MSP430"
704
705# elif defined(__TMS320C28XX__)
706# define ARCHITECTURE_ID "TMS320C28x"
707
708# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
709# define ARCHITECTURE_ID "TMS320C6x"
710
711# else /* unknown architecture */
712# define ARCHITECTURE_ID ""
713# endif
714
715# elif defined(__ADSPSHARC__)
716# define ARCHITECTURE_ID "SHARC"
717
718# elif defined(__ADSPBLACKFIN__)
719# define ARCHITECTURE_ID "Blackfin"
720
721#elif defined(__TASKING__)
722
723# if defined(__CTC__) || defined(__CPTC__)
724# define ARCHITECTURE_ID "TriCore"
725
726# elif defined(__CMCS__)
727# define ARCHITECTURE_ID "MCS"
728
729# elif defined(__CARM__) || defined(__CPARM__)
730# define ARCHITECTURE_ID "ARM"
731
732# elif defined(__CARC__)
733# define ARCHITECTURE_ID "ARC"
734
735# elif defined(__C51__)
736# define ARCHITECTURE_ID "8051"
737
738# elif defined(__CPCP__)
739# define ARCHITECTURE_ID "PCP"
740
741# else
742# define ARCHITECTURE_ID ""
743# endif
744
745#else
746# define ARCHITECTURE_ID
747#endif
748
749/* Convert integer to decimal digit literals. */
750#define DEC(n) \
751 ('0' + (((n) / 10000000)%10)), \
752 ('0' + (((n) / 1000000)%10)), \
753 ('0' + (((n) / 100000)%10)), \
754 ('0' + (((n) / 10000)%10)), \
755 ('0' + (((n) / 1000)%10)), \
756 ('0' + (((n) / 100)%10)), \
757 ('0' + (((n) / 10)%10)), \
758 ('0' + ((n) % 10))
759
760/* Convert integer to hex digit literals. */
761#define HEX(n) \
762 ('0' + ((n)>>28 & 0xF)), \
763 ('0' + ((n)>>24 & 0xF)), \
764 ('0' + ((n)>>20 & 0xF)), \
765 ('0' + ((n)>>16 & 0xF)), \
766 ('0' + ((n)>>12 & 0xF)), \
767 ('0' + ((n)>>8 & 0xF)), \
768 ('0' + ((n)>>4 & 0xF)), \
769 ('0' + ((n) & 0xF))
770
771/* Construct a string literal encoding the version number. */
772#ifdef COMPILER_VERSION
773char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
774
775/* Construct a string literal encoding the version number components. */
776#elif defined(COMPILER_VERSION_MAJOR)
777char const info_version[] = {
778 'I', 'N', 'F', 'O', ':',
779 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
780 COMPILER_VERSION_MAJOR,
781# ifdef COMPILER_VERSION_MINOR
782 '.', COMPILER_VERSION_MINOR,
783# ifdef COMPILER_VERSION_PATCH
784 '.', COMPILER_VERSION_PATCH,
785# ifdef COMPILER_VERSION_TWEAK
786 '.', COMPILER_VERSION_TWEAK,
787# endif
788# endif
789# endif
790 ']','\0'};
791#endif
792
793/* Construct a string literal encoding the internal version number. */
794#ifdef COMPILER_VERSION_INTERNAL
795char const info_version_internal[] = {
796 'I', 'N', 'F', 'O', ':',
797 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
798 'i','n','t','e','r','n','a','l','[',
799 COMPILER_VERSION_INTERNAL,']','\0'};
800#elif defined(COMPILER_VERSION_INTERNAL_STR)
801char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
802#endif
803
804/* Construct a string literal encoding the version number components. */
805#ifdef SIMULATE_VERSION_MAJOR
806char const info_simulate_version[] = {
807 'I', 'N', 'F', 'O', ':',
808 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
809 SIMULATE_VERSION_MAJOR,
810# ifdef SIMULATE_VERSION_MINOR
811 '.', SIMULATE_VERSION_MINOR,
812# ifdef SIMULATE_VERSION_PATCH
813 '.', SIMULATE_VERSION_PATCH,
814# ifdef SIMULATE_VERSION_TWEAK
815 '.', SIMULATE_VERSION_TWEAK,
816# endif
817# endif
818# endif
819 ']','\0'};
820#endif
821
822/* Construct the string literal in pieces to prevent the source from
823 getting matched. Store it in a pointer rather than an array
824 because some compilers will just produce instructions to fill the
825 array rather than assigning a pointer to a static array. */
826char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
827char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
828
829
830
831#define C_STD_99 199901L
832#define C_STD_11 201112L
833#define C_STD_17 201710L
834#define C_STD_23 202311L
835
836#ifdef __STDC_VERSION__
837# define C_STD __STDC_VERSION__
838#endif
839
840#if !defined(__STDC__) && !defined(__clang__)
841# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
842# define C_VERSION "90"
843# else
844# define C_VERSION
845# endif
846#elif C_STD > C_STD_17
847# define C_VERSION "23"
848#elif C_STD > C_STD_11
849# define C_VERSION "17"
850#elif C_STD > C_STD_99
851# define C_VERSION "11"
852#elif C_STD >= C_STD_99
853# define C_VERSION "99"
854#else
855# define C_VERSION "90"
856#endif
858 "INFO" ":" "standard_default[" C_VERSION "]";
859
860const char* info_language_extensions_default = "INFO" ":" "extensions_default["
861#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
862 defined(__TI_COMPILER_VERSION__)) && \
863 !defined(__STRICT_ANSI__)
864 "ON"
865#else
866 "OFF"
867#endif
868"]";
869
870/*--------------------------------------------------------------------------*/
871
872#ifdef ID_VOID_MAIN
873void main() {}
874#else
875# if defined(__CLASSIC_C__)
876int main(argc, argv) int argc; char *argv[];
877# else
878int main(int argc, char* argv[])
879# endif
880{
881 int require = 0;
882 require += info_compiler[argc];
883 require += info_platform[argc];
884 require += info_arch[argc];
885#ifdef COMPILER_VERSION_MAJOR
886 require += info_version[argc];
887#endif
888#if defined(COMPILER_VERSION_INTERNAL) || defined(COMPILER_VERSION_INTERNAL_STR)
889 require += info_version_internal[argc];
890#endif
891#ifdef SIMULATE_ID
892 require += info_simulate[argc];
893#endif
894#ifdef SIMULATE_VERSION_MAJOR
895 require += info_simulate_version[argc];
896#endif
897#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
898 require += info_cray[argc];
899#endif
900 require += info_language_standard_default[argc];
901 require += info_language_extensions_default[argc];
902 (void)argv;
903 return require;
904}
905#endif
int main(int argc, char *argv[])
const char * info_language_extensions_default
char const * info_platform
const char * info_language_standard_default
char const * info_compiler
char const * info_arch
#define COMPILER_ID
#define ARCHITECTURE_ID
#define C_VERSION
#define PLATFORM_ID