libfuse
CMakeCCompilerId.c
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
188
189#elif defined(__ibmxl__) && defined(__clang__)
190# define COMPILER_ID "XLClang"
191# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
192# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
193# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
194# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
195
196
197#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
198# define COMPILER_ID "XL"
199 /* __IBMC__ = VRP */
200# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
201# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
202# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
203
204#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
205# define COMPILER_ID "VisualAge"
206 /* __IBMC__ = VRP */
207# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
208# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
209# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
210
211#elif defined(__NVCOMPILER)
212# define COMPILER_ID "NVHPC"
213# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
214# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
215# if defined(__NVCOMPILER_PATCHLEVEL__)
216# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
217# endif
218
219#elif defined(__PGI)
220# define COMPILER_ID "PGI"
221# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
222# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
223# if defined(__PGIC_PATCHLEVEL__)
224# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
225# endif
226
227#elif defined(__clang__) && defined(__cray__)
228# define COMPILER_ID "CrayClang"
229# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
230# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
231# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
232# define COMPILER_VERSION_INTERNAL_STR __clang_version__
233
234
235#elif defined(_CRAYC)
236# define COMPILER_ID "Cray"
237# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
238# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
239
240#elif defined(__TI_COMPILER_VERSION__)
241# define COMPILER_ID "TI"
242 /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
243# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
244# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
245# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
246
247#elif defined(__CLANG_FUJITSU)
248# define COMPILER_ID "FujitsuClang"
249# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
250# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
251# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
252# define COMPILER_VERSION_INTERNAL_STR __clang_version__
253
254
255#elif defined(__FUJITSU)
256# define COMPILER_ID "Fujitsu"
257# if defined(__FCC_version__)
258# define COMPILER_VERSION __FCC_version__
259# elif defined(__FCC_major__)
260# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
261# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
262# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
263# endif
264# if defined(__fcc_version)
265# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
266# elif defined(__FCC_VERSION)
267# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
268# endif
269
270
271#elif defined(__ghs__)
272# define COMPILER_ID "GHS"
273/* __GHS_VERSION_NUMBER = VVVVRP */
274# ifdef __GHS_VERSION_NUMBER
275# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
276# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
277# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
278# endif
279
280#elif defined(__TASKING__)
281# define COMPILER_ID "Tasking"
282 # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
283 # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
284# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
285
286#elif defined(__ORANGEC__)
287# define COMPILER_ID "OrangeC"
288# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
289# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
290# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
291
292#elif defined(__TINYC__)
293# define COMPILER_ID "TinyCC"
294
295#elif defined(__BCC__)
296# define COMPILER_ID "Bruce"
297
298#elif defined(__SCO_VERSION__)
299# define COMPILER_ID "SCO"
300
301#elif defined(__ARMCC_VERSION) && !defined(__clang__)
302# define COMPILER_ID "ARMCC"
303#if __ARMCC_VERSION >= 1000000
304 /* __ARMCC_VERSION = VRRPPPP */
305 # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
306 # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
307 # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
308#else
309 /* __ARMCC_VERSION = VRPPPP */
310 # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
311 # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
312 # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
313#endif
314
315
316#elif defined(__clang__) && defined(__apple_build_version__)
317# define COMPILER_ID "AppleClang"
318# if defined(_MSC_VER)
319# define SIMULATE_ID "MSVC"
320# endif
321# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
322# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
323# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
324# if defined(_MSC_VER)
325 /* _MSC_VER = VVRR */
326# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
327# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
328# endif
329# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
330
331#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
332# define COMPILER_ID "ARMClang"
333 # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
334 # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
335 # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
336# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
337
338#elif defined(__clang__)
339# define COMPILER_ID "Clang"
340# if defined(_MSC_VER)
341# define SIMULATE_ID "MSVC"
342# endif
343# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
344# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
345# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
346# if defined(_MSC_VER)
347 /* _MSC_VER = VVRR */
348# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
349# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
350# endif
351
352#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
353# define COMPILER_ID "LCC"
354# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
355# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
356# if defined(__LCC_MINOR__)
357# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
358# endif
359# if defined(__GNUC__) && defined(__GNUC_MINOR__)
360# define SIMULATE_ID "GNU"
361# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
362# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
363# if defined(__GNUC_PATCHLEVEL__)
364# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
365# endif
366# endif
367
368#elif defined(__GNUC__)
369# define COMPILER_ID "GNU"
370# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
371# if defined(__GNUC_MINOR__)
372# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
373# endif
374# if defined(__GNUC_PATCHLEVEL__)
375# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
376# endif
377
378#elif defined(_MSC_VER)
379# define COMPILER_ID "MSVC"
380 /* _MSC_VER = VVRR */
381# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
382# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
383# if defined(_MSC_FULL_VER)
384# if _MSC_VER >= 1400
385 /* _MSC_FULL_VER = VVRRPPPPP */
386# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
387# else
388 /* _MSC_FULL_VER = VVRRPPPP */
389# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
390# endif
391# endif
392# if defined(_MSC_BUILD)
393# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
394# endif
395
396#elif defined(_ADI_COMPILER)
397# define COMPILER_ID "ADSP"
398#if defined(__VERSIONNUM__)
399 /* __VERSIONNUM__ = 0xVVRRPPTT */
400# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
401# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
402# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
403# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
404#endif
405
406#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
407# define COMPILER_ID "IAR"
408# if defined(__VER__) && defined(__ICCARM__)
409# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
410# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
411# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
412# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
413# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
414# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
415# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
416# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
417# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
418# endif
419
420#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
421# define COMPILER_ID "SDCC"
422# if defined(__SDCC_VERSION_MAJOR)
423# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
424# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
425# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
426# else
427 /* SDCC = VRP */
428# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
429# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
430# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
431# endif
432
433
434/* These compilers are either not known or too old to define an
435 identification macro. Try to identify the platform and guess that
436 it is the native compiler. */
437#elif defined(__hpux) || defined(__hpua)
438# define COMPILER_ID "HP"
439
440#else /* unknown compiler */
441# define COMPILER_ID ""
442#endif
443
444/* Construct the string literal in pieces to prevent the source from
445 getting matched. Store it in a pointer rather than an array
446 because some compilers will just produce instructions to fill the
447 array rather than assigning a pointer to a static array. */
448char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
449#ifdef SIMULATE_ID
450char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
451#endif
452
453#ifdef __QNXNTO__
454char const* qnxnto = "INFO" ":" "qnxnto[]";
455#endif
456
457#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
458char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
459#endif
460
461#define STRINGIFY_HELPER(X) #X
462#define STRINGIFY(X) STRINGIFY_HELPER(X)
463
464/* Identify known platforms by name. */
465#if defined(__linux) || defined(__linux__) || defined(linux)
466# define PLATFORM_ID "Linux"
467
468#elif defined(__MSYS__)
469# define PLATFORM_ID "MSYS"
470
471#elif defined(__CYGWIN__)
472# define PLATFORM_ID "Cygwin"
473
474#elif defined(__MINGW32__)
475# define PLATFORM_ID "MinGW"
476
477#elif defined(__APPLE__)
478# define PLATFORM_ID "Darwin"
479
480#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
481# define PLATFORM_ID "Windows"
482
483#elif defined(__FreeBSD__) || defined(__FreeBSD)
484# define PLATFORM_ID "FreeBSD"
485
486#elif defined(__NetBSD__) || defined(__NetBSD)
487# define PLATFORM_ID "NetBSD"
488
489#elif defined(__OpenBSD__) || defined(__OPENBSD)
490# define PLATFORM_ID "OpenBSD"
491
492#elif defined(__sun) || defined(sun)
493# define PLATFORM_ID "SunOS"
494
495#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
496# define PLATFORM_ID "AIX"
497
498#elif defined(__hpux) || defined(__hpux__)
499# define PLATFORM_ID "HP-UX"
500
501#elif defined(__HAIKU__)
502# define PLATFORM_ID "Haiku"
503
504#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
505# define PLATFORM_ID "BeOS"
506
507#elif defined(__QNX__) || defined(__QNXNTO__)
508# define PLATFORM_ID "QNX"
509
510#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
511# define PLATFORM_ID "Tru64"
512
513#elif defined(__riscos) || defined(__riscos__)
514# define PLATFORM_ID "RISCos"
515
516#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
517# define PLATFORM_ID "SINIX"
518
519#elif defined(__UNIX_SV__)
520# define PLATFORM_ID "UNIX_SV"
521
522#elif defined(__bsdos__)
523# define PLATFORM_ID "BSDOS"
524
525#elif defined(_MPRAS) || defined(MPRAS)
526# define PLATFORM_ID "MP-RAS"
527
528#elif defined(__osf) || defined(__osf__)
529# define PLATFORM_ID "OSF1"
530
531#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
532# define PLATFORM_ID "SCO_SV"
533
534#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
535# define PLATFORM_ID "ULTRIX"
536
537#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
538# define PLATFORM_ID "Xenix"
539
540#elif defined(__WATCOMC__)
541# if defined(__LINUX__)
542# define PLATFORM_ID "Linux"
543
544# elif defined(__DOS__)
545# define PLATFORM_ID "DOS"
546
547# elif defined(__OS2__)
548# define PLATFORM_ID "OS2"
549
550# elif defined(__WINDOWS__)
551# define PLATFORM_ID "Windows3x"
552
553# elif defined(__VXWORKS__)
554# define PLATFORM_ID "VxWorks"
555
556# else /* unknown platform */
557# define PLATFORM_ID
558# endif
559
560#elif defined(__INTEGRITY)
561# if defined(INT_178B)
562# define PLATFORM_ID "Integrity178"
563
564# else /* regular Integrity */
565# define PLATFORM_ID "Integrity"
566# endif
567
568# elif defined(_ADI_COMPILER)
569# define PLATFORM_ID "ADSP"
570
571#else /* unknown platform */
572# define PLATFORM_ID
573
574#endif
575
576/* For windows compilers MSVC and Intel we can determine
577 the architecture of the compiler being used. This is because
578 the compilers do not have flags that can change the architecture,
579 but rather depend on which compiler is being used
580*/
581#if defined(_WIN32) && defined(_MSC_VER)
582# if defined(_M_IA64)
583# define ARCHITECTURE_ID "IA64"
584
585# elif defined(_M_ARM64EC)
586# define ARCHITECTURE_ID "ARM64EC"
587
588# elif defined(_M_X64) || defined(_M_AMD64)
589# define ARCHITECTURE_ID "x64"
590
591# elif defined(_M_IX86)
592# define ARCHITECTURE_ID "X86"
593
594# elif defined(_M_ARM64)
595# define ARCHITECTURE_ID "ARM64"
596
597# elif defined(_M_ARM)
598# if _M_ARM == 4
599# define ARCHITECTURE_ID "ARMV4I"
600# elif _M_ARM == 5
601# define ARCHITECTURE_ID "ARMV5I"
602# else
603# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
604# endif
605
606# elif defined(_M_MIPS)
607# define ARCHITECTURE_ID "MIPS"
608
609# elif defined(_M_SH)
610# define ARCHITECTURE_ID "SHx"
611
612# else /* unknown architecture */
613# define ARCHITECTURE_ID ""
614# endif
615
616#elif defined(__WATCOMC__)
617# if defined(_M_I86)
618# define ARCHITECTURE_ID "I86"
619
620# elif defined(_M_IX86)
621# define ARCHITECTURE_ID "X86"
622
623# else /* unknown architecture */
624# define ARCHITECTURE_ID ""
625# endif
626
627#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
628# if defined(__ICCARM__)
629# define ARCHITECTURE_ID "ARM"
630
631# elif defined(__ICCRX__)
632# define ARCHITECTURE_ID "RX"
633
634# elif defined(__ICCRH850__)
635# define ARCHITECTURE_ID "RH850"
636
637# elif defined(__ICCRL78__)
638# define ARCHITECTURE_ID "RL78"
639
640# elif defined(__ICCRISCV__)
641# define ARCHITECTURE_ID "RISCV"
642
643# elif defined(__ICCAVR__)
644# define ARCHITECTURE_ID "AVR"
645
646# elif defined(__ICC430__)
647# define ARCHITECTURE_ID "MSP430"
648
649# elif defined(__ICCV850__)
650# define ARCHITECTURE_ID "V850"
651
652# elif defined(__ICC8051__)
653# define ARCHITECTURE_ID "8051"
654
655# elif defined(__ICCSTM8__)
656# define ARCHITECTURE_ID "STM8"
657
658# else /* unknown architecture */
659# define ARCHITECTURE_ID ""
660# endif
661
662#elif defined(__ghs__)
663# if defined(__PPC64__)
664# define ARCHITECTURE_ID "PPC64"
665
666# elif defined(__ppc__)
667# define ARCHITECTURE_ID "PPC"
668
669# elif defined(__ARM__)
670# define ARCHITECTURE_ID "ARM"
671
672# elif defined(__x86_64__)
673# define ARCHITECTURE_ID "x64"
674
675# elif defined(__i386__)
676# define ARCHITECTURE_ID "X86"
677
678# else /* unknown architecture */
679# define ARCHITECTURE_ID ""
680# endif
681
682#elif defined(__TI_COMPILER_VERSION__)
683# if defined(__TI_ARM__)
684# define ARCHITECTURE_ID "ARM"
685
686# elif defined(__MSP430__)
687# define ARCHITECTURE_ID "MSP430"
688
689# elif defined(__TMS320C28XX__)
690# define ARCHITECTURE_ID "TMS320C28x"
691
692# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
693# define ARCHITECTURE_ID "TMS320C6x"
694
695# else /* unknown architecture */
696# define ARCHITECTURE_ID ""
697# endif
698
699# elif defined(__ADSPSHARC__)
700# define ARCHITECTURE_ID "SHARC"
701
702# elif defined(__ADSPBLACKFIN__)
703# define ARCHITECTURE_ID "Blackfin"
704
705#elif defined(__TASKING__)
706
707# if defined(__CTC__) || defined(__CPTC__)
708# define ARCHITECTURE_ID "TriCore"
709
710# elif defined(__CMCS__)
711# define ARCHITECTURE_ID "MCS"
712
713# elif defined(__CARM__)
714# define ARCHITECTURE_ID "ARM"
715
716# elif defined(__CARC__)
717# define ARCHITECTURE_ID "ARC"
718
719# elif defined(__C51__)
720# define ARCHITECTURE_ID "8051"
721
722# elif defined(__CPCP__)
723# define ARCHITECTURE_ID "PCP"
724
725# else
726# define ARCHITECTURE_ID ""
727# endif
728
729#else
730# define ARCHITECTURE_ID
731#endif
732
733/* Convert integer to decimal digit literals. */
734#define DEC(n) \
735 ('0' + (((n) / 10000000)%10)), \
736 ('0' + (((n) / 1000000)%10)), \
737 ('0' + (((n) / 100000)%10)), \
738 ('0' + (((n) / 10000)%10)), \
739 ('0' + (((n) / 1000)%10)), \
740 ('0' + (((n) / 100)%10)), \
741 ('0' + (((n) / 10)%10)), \
742 ('0' + ((n) % 10))
743
744/* Convert integer to hex digit literals. */
745#define HEX(n) \
746 ('0' + ((n)>>28 & 0xF)), \
747 ('0' + ((n)>>24 & 0xF)), \
748 ('0' + ((n)>>20 & 0xF)), \
749 ('0' + ((n)>>16 & 0xF)), \
750 ('0' + ((n)>>12 & 0xF)), \
751 ('0' + ((n)>>8 & 0xF)), \
752 ('0' + ((n)>>4 & 0xF)), \
753 ('0' + ((n) & 0xF))
754
755/* Construct a string literal encoding the version number. */
756#ifdef COMPILER_VERSION
757char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
758
759/* Construct a string literal encoding the version number components. */
760#elif defined(COMPILER_VERSION_MAJOR)
761char const info_version[] = {
762 'I', 'N', 'F', 'O', ':',
763 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
764 COMPILER_VERSION_MAJOR,
765# ifdef COMPILER_VERSION_MINOR
766 '.', COMPILER_VERSION_MINOR,
767# ifdef COMPILER_VERSION_PATCH
768 '.', COMPILER_VERSION_PATCH,
769# ifdef COMPILER_VERSION_TWEAK
770 '.', COMPILER_VERSION_TWEAK,
771# endif
772# endif
773# endif
774 ']','\0'};
775#endif
776
777/* Construct a string literal encoding the internal version number. */
778#ifdef COMPILER_VERSION_INTERNAL
779char const info_version_internal[] = {
780 'I', 'N', 'F', 'O', ':',
781 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
782 'i','n','t','e','r','n','a','l','[',
783 COMPILER_VERSION_INTERNAL,']','\0'};
784#elif defined(COMPILER_VERSION_INTERNAL_STR)
785char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
786#endif
787
788/* Construct a string literal encoding the version number components. */
789#ifdef SIMULATE_VERSION_MAJOR
790char const info_simulate_version[] = {
791 'I', 'N', 'F', 'O', ':',
792 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
793 SIMULATE_VERSION_MAJOR,
794# ifdef SIMULATE_VERSION_MINOR
795 '.', SIMULATE_VERSION_MINOR,
796# ifdef SIMULATE_VERSION_PATCH
797 '.', SIMULATE_VERSION_PATCH,
798# ifdef SIMULATE_VERSION_TWEAK
799 '.', SIMULATE_VERSION_TWEAK,
800# endif
801# endif
802# endif
803 ']','\0'};
804#endif
805
806/* Construct the string literal in pieces to prevent the source from
807 getting matched. Store it in a pointer rather than an array
808 because some compilers will just produce instructions to fill the
809 array rather than assigning a pointer to a static array. */
810char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
811char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
812
813
814
815#if !defined(__STDC__) && !defined(__clang__)
816# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
817# define C_VERSION "90"
818# else
819# define C_VERSION
820# endif
821#elif __STDC_VERSION__ > 201710L
822# define C_VERSION "23"
823#elif __STDC_VERSION__ >= 201710L
824# define C_VERSION "17"
825#elif __STDC_VERSION__ >= 201000L
826# define C_VERSION "11"
827#elif __STDC_VERSION__ >= 199901L
828# define C_VERSION "99"
829#else
830# define C_VERSION "90"
831#endif
832const char* info_language_standard_default =
833 "INFO" ":" "standard_default[" C_VERSION "]";
834
835const char* info_language_extensions_default = "INFO" ":" "extensions_default["
836#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
837 defined(__TI_COMPILER_VERSION__)) && \
838 !defined(__STRICT_ANSI__)
839 "ON"
840#else
841 "OFF"
842#endif
843"]";
844
845/*--------------------------------------------------------------------------*/
846
847#ifdef ID_VOID_MAIN
848void main() {}
849#else
850# if defined(__CLASSIC_C__)
851int main(argc, argv) int argc; char *argv[];
852# else
853int main(int argc, char* argv[])
854# endif
855{
856 int require = 0;
857 require += info_compiler[argc];
858 require += info_platform[argc];
859 require += info_arch[argc];
860#ifdef COMPILER_VERSION_MAJOR
861 require += info_version[argc];
862#endif
863#ifdef COMPILER_VERSION_INTERNAL
864 require += info_version_internal[argc];
865#endif
866#ifdef SIMULATE_ID
867 require += info_simulate[argc];
868#endif
869#ifdef SIMULATE_VERSION_MAJOR
870 require += info_simulate_version[argc];
871#endif
872#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
873 require += info_cray[argc];
874#endif
875 require += info_language_standard_default[argc];
876 require += info_language_extensions_default[argc];
877 (void)argv;
878 return require;
879}
880#endif