Sapper
866 строк · 25.9 Кб
1#ifdef __cplusplus2# error "A C++ compiler has been selected for C."3#endif4
5#if defined(__18CXX)6# define ID_VOID_MAIN7#endif8#if defined(__CLASSIC_C__)9/* cv-qualifiers did not exist in K&R C */
10# define const11# define volatile12#endif13
14#if !defined(__has_include)15/* If the compiler does not have __has_include, pretend the answer is
16always no. */
17# define __has_include(x) 018#endif19
20
21/* Version number components: V=Version, R=Revision, P=Patch
22Version 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# endif29# if defined(__GNUC__)30# define SIMULATE_ID "GNU"31# endif32/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,33except that a few beta releases use the old format with V=2021. */
34# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 20211135# 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# else40# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)41# endif42# else43# 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,46but no macro is provided for it. */
47# define COMPILER_VERSION_PATCH DEC(0)48# endif49# if defined(__INTEL_COMPILER_BUILD_DATE)50/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */51# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)52# endif53# 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# endif58# if defined(__GNUC__)59# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)60# elif defined(__GNUG__)61# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)62# endif63# if defined(__GNUC_MINOR__)64# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)65# endif66# if defined(__GNUC_PATCHLEVEL__)67# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)68# endif69
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#endif75#if defined(__GNUC__)76# define SIMULATE_ID "GNU"77#endif78/* __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 < 1000000L83# 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#else87# 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#endif91#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#endif96#if defined(__GNUC__)97# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)98#elif defined(__GNUG__)99# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)100#endif101#if defined(__GNUC_MINOR__)102# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)103#endif104#if defined(__GNUC_PATCHLEVEL__)105# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)106#endif107
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# endif115
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__ < 1200129# 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) > 0134# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)135# endif136
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) > 0143# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)144# endif145
146#elif defined(__SUNPRO_C)147# define COMPILER_ID "SunPro"148# if __SUNPRO_C >= 0x5100149/* __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# else154/* __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# endif159
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__ >= 800198# 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__ < 800205# 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# endif218
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# endif226
227#elif defined(_CRAYC)228# define COMPILER_ID "Cray"229# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)230# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)231
232#elif defined(__TI_COMPILER_VERSION__)233# define COMPILER_ID "TI"234/* __TI_COMPILER_VERSION__ = VVVRRRPPP */235# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)236# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)237# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)238
239#elif defined(__CLANG_FUJITSU)240# define COMPILER_ID "FujitsuClang"241# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)242# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)243# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)244# define COMPILER_VERSION_INTERNAL_STR __clang_version__245
246
247#elif defined(__FUJITSU)248# define COMPILER_ID "Fujitsu"249# if defined(__FCC_version__)250# define COMPILER_VERSION __FCC_version__251# elif defined(__FCC_major__)252# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)253# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)254# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)255# endif256# if defined(__fcc_version)257# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)258# elif defined(__FCC_VERSION)259# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)260# endif261
262
263#elif defined(__ghs__)264# define COMPILER_ID "GHS"265/* __GHS_VERSION_NUMBER = VVVVRP */
266# ifdef __GHS_VERSION_NUMBER267# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)268# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)269# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)270# endif271
272#elif defined(__TASKING__)273# define COMPILER_ID "Tasking"274# define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)275# define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)276# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)277
278#elif defined(__TINYC__)279# define COMPILER_ID "TinyCC"280
281#elif defined(__BCC__)282# define COMPILER_ID "Bruce"283
284#elif defined(__SCO_VERSION__)285# define COMPILER_ID "SCO"286
287#elif defined(__ARMCC_VERSION) && !defined(__clang__)288# define COMPILER_ID "ARMCC"289#if __ARMCC_VERSION >= 1000000290/* __ARMCC_VERSION = VRRPPPP */291# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)292# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)293# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)294#else295/* __ARMCC_VERSION = VRPPPP */296# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)297# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)298# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)299#endif300
301
302#elif defined(__clang__) && defined(__apple_build_version__)303# define COMPILER_ID "AppleClang"304# if defined(_MSC_VER)305# define SIMULATE_ID "MSVC"306# endif307# define COMPILER_VERSION_MAJOR DEC(__clang_major__)308# define COMPILER_VERSION_MINOR DEC(__clang_minor__)309# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)310# if defined(_MSC_VER)311/* _MSC_VER = VVRR */312# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)313# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)314# endif315# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)316
317#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)318# define COMPILER_ID "ARMClang"319# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)320# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)321# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)322# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)323
324#elif defined(__clang__)325# define COMPILER_ID "Clang"326# if defined(_MSC_VER)327# define SIMULATE_ID "MSVC"328# endif329# define COMPILER_VERSION_MAJOR DEC(__clang_major__)330# define COMPILER_VERSION_MINOR DEC(__clang_minor__)331# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)332# if defined(_MSC_VER)333/* _MSC_VER = VVRR */334# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)335# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)336# endif337
338#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))339# define COMPILER_ID "LCC"340# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)341# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)342# if defined(__LCC_MINOR__)343# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)344# endif345# if defined(__GNUC__) && defined(__GNUC_MINOR__)346# define SIMULATE_ID "GNU"347# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)348# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)349# if defined(__GNUC_PATCHLEVEL__)350# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)351# endif352# endif353
354#elif defined(__GNUC__)355# define COMPILER_ID "GNU"356# define COMPILER_VERSION_MAJOR DEC(__GNUC__)357# if defined(__GNUC_MINOR__)358# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)359# endif360# if defined(__GNUC_PATCHLEVEL__)361# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)362# endif363
364#elif defined(_MSC_VER)365# define COMPILER_ID "MSVC"366/* _MSC_VER = VVRR */367# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)368# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)369# if defined(_MSC_FULL_VER)370# if _MSC_VER >= 1400371/* _MSC_FULL_VER = VVRRPPPPP */372# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)373# else374/* _MSC_FULL_VER = VVRRPPPP */375# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)376# endif377# endif378# if defined(_MSC_BUILD)379# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)380# endif381
382#elif defined(_ADI_COMPILER)383# define COMPILER_ID "ADSP"384#if defined(__VERSIONNUM__)385/* __VERSIONNUM__ = 0xVVRRPPTT */386# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)387# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)388# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)389# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)390#endif391
392#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)393# define COMPILER_ID "IAR"394# if defined(__VER__) && defined(__ICCARM__)395# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)396# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)397# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)398# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)399# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))400# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)401# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))402# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)403# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)404# endif405
406#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)407# define COMPILER_ID "SDCC"408# if defined(__SDCC_VERSION_MAJOR)409# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)410# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)411# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)412# else413/* SDCC = VRP */414# define COMPILER_VERSION_MAJOR DEC(SDCC/100)415# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)416# define COMPILER_VERSION_PATCH DEC(SDCC % 10)417# endif418
419
420/* These compilers are either not known or too old to define an
421identification macro. Try to identify the platform and guess that
422it is the native compiler. */
423#elif defined(__hpux) || defined(__hpua)424# define COMPILER_ID "HP"425
426#else /* unknown compiler */427# define COMPILER_ID ""428#endif429
430/* Construct the string literal in pieces to prevent the source from
431getting matched. Store it in a pointer rather than an array
432because some compilers will just produce instructions to fill the
433array rather than assigning a pointer to a static array. */
434char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";435#ifdef SIMULATE_ID436char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";437#endif438
439#ifdef __QNXNTO__440char const* qnxnto = "INFO" ":" "qnxnto[]";441#endif442
443#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)444char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";445#endif446
447#define STRINGIFY_HELPER(X) #X448#define STRINGIFY(X) STRINGIFY_HELPER(X)449
450/* Identify known platforms by name. */
451#if defined(__linux) || defined(__linux__) || defined(linux)452# define PLATFORM_ID "Linux"453
454#elif defined(__MSYS__)455# define PLATFORM_ID "MSYS"456
457#elif defined(__CYGWIN__)458# define PLATFORM_ID "Cygwin"459
460#elif defined(__MINGW32__)461# define PLATFORM_ID "MinGW"462
463#elif defined(__APPLE__)464# define PLATFORM_ID "Darwin"465
466#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)467# define PLATFORM_ID "Windows"468
469#elif defined(__FreeBSD__) || defined(__FreeBSD)470# define PLATFORM_ID "FreeBSD"471
472#elif defined(__NetBSD__) || defined(__NetBSD)473# define PLATFORM_ID "NetBSD"474
475#elif defined(__OpenBSD__) || defined(__OPENBSD)476# define PLATFORM_ID "OpenBSD"477
478#elif defined(__sun) || defined(sun)479# define PLATFORM_ID "SunOS"480
481#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)482# define PLATFORM_ID "AIX"483
484#elif defined(__hpux) || defined(__hpux__)485# define PLATFORM_ID "HP-UX"486
487#elif defined(__HAIKU__)488# define PLATFORM_ID "Haiku"489
490#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)491# define PLATFORM_ID "BeOS"492
493#elif defined(__QNX__) || defined(__QNXNTO__)494# define PLATFORM_ID "QNX"495
496#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)497# define PLATFORM_ID "Tru64"498
499#elif defined(__riscos) || defined(__riscos__)500# define PLATFORM_ID "RISCos"501
502#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)503# define PLATFORM_ID "SINIX"504
505#elif defined(__UNIX_SV__)506# define PLATFORM_ID "UNIX_SV"507
508#elif defined(__bsdos__)509# define PLATFORM_ID "BSDOS"510
511#elif defined(_MPRAS) || defined(MPRAS)512# define PLATFORM_ID "MP-RAS"513
514#elif defined(__osf) || defined(__osf__)515# define PLATFORM_ID "OSF1"516
517#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)518# define PLATFORM_ID "SCO_SV"519
520#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)521# define PLATFORM_ID "ULTRIX"522
523#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)524# define PLATFORM_ID "Xenix"525
526#elif defined(__WATCOMC__)527# if defined(__LINUX__)528# define PLATFORM_ID "Linux"529
530# elif defined(__DOS__)531# define PLATFORM_ID "DOS"532
533# elif defined(__OS2__)534# define PLATFORM_ID "OS2"535
536# elif defined(__WINDOWS__)537# define PLATFORM_ID "Windows3x"538
539# elif defined(__VXWORKS__)540# define PLATFORM_ID "VxWorks"541
542# else /* unknown platform */543# define PLATFORM_ID544# endif545
546#elif defined(__INTEGRITY)547# if defined(INT_178B)548# define PLATFORM_ID "Integrity178"549
550# else /* regular Integrity */551# define PLATFORM_ID "Integrity"552# endif553
554# elif defined(_ADI_COMPILER)555# define PLATFORM_ID "ADSP"556
557#else /* unknown platform */558# define PLATFORM_ID559
560#endif561
562/* For windows compilers MSVC and Intel we can determine
563the architecture of the compiler being used. This is because
564the compilers do not have flags that can change the architecture,
565but rather depend on which compiler is being used
566*/
567#if defined(_WIN32) && defined(_MSC_VER)568# if defined(_M_IA64)569# define ARCHITECTURE_ID "IA64"570
571# elif defined(_M_ARM64EC)572# define ARCHITECTURE_ID "ARM64EC"573
574# elif defined(_M_X64) || defined(_M_AMD64)575# define ARCHITECTURE_ID "x64"576
577# elif defined(_M_IX86)578# define ARCHITECTURE_ID "X86"579
580# elif defined(_M_ARM64)581# define ARCHITECTURE_ID "ARM64"582
583# elif defined(_M_ARM)584# if _M_ARM == 4585# define ARCHITECTURE_ID "ARMV4I"586# elif _M_ARM == 5587# define ARCHITECTURE_ID "ARMV5I"588# else589# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)590# endif591
592# elif defined(_M_MIPS)593# define ARCHITECTURE_ID "MIPS"594
595# elif defined(_M_SH)596# define ARCHITECTURE_ID "SHx"597
598# else /* unknown architecture */599# define ARCHITECTURE_ID ""600# endif601
602#elif defined(__WATCOMC__)603# if defined(_M_I86)604# define ARCHITECTURE_ID "I86"605
606# elif defined(_M_IX86)607# define ARCHITECTURE_ID "X86"608
609# else /* unknown architecture */610# define ARCHITECTURE_ID ""611# endif612
613#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)614# if defined(__ICCARM__)615# define ARCHITECTURE_ID "ARM"616
617# elif defined(__ICCRX__)618# define ARCHITECTURE_ID "RX"619
620# elif defined(__ICCRH850__)621# define ARCHITECTURE_ID "RH850"622
623# elif defined(__ICCRL78__)624# define ARCHITECTURE_ID "RL78"625
626# elif defined(__ICCRISCV__)627# define ARCHITECTURE_ID "RISCV"628
629# elif defined(__ICCAVR__)630# define ARCHITECTURE_ID "AVR"631
632# elif defined(__ICC430__)633# define ARCHITECTURE_ID "MSP430"634
635# elif defined(__ICCV850__)636# define ARCHITECTURE_ID "V850"637
638# elif defined(__ICC8051__)639# define ARCHITECTURE_ID "8051"640
641# elif defined(__ICCSTM8__)642# define ARCHITECTURE_ID "STM8"643
644# else /* unknown architecture */645# define ARCHITECTURE_ID ""646# endif647
648#elif defined(__ghs__)649# if defined(__PPC64__)650# define ARCHITECTURE_ID "PPC64"651
652# elif defined(__ppc__)653# define ARCHITECTURE_ID "PPC"654
655# elif defined(__ARM__)656# define ARCHITECTURE_ID "ARM"657
658# elif defined(__x86_64__)659# define ARCHITECTURE_ID "x64"660
661# elif defined(__i386__)662# define ARCHITECTURE_ID "X86"663
664# else /* unknown architecture */665# define ARCHITECTURE_ID ""666# endif667
668#elif defined(__TI_COMPILER_VERSION__)669# if defined(__TI_ARM__)670# define ARCHITECTURE_ID "ARM"671
672# elif defined(__MSP430__)673# define ARCHITECTURE_ID "MSP430"674
675# elif defined(__TMS320C28XX__)676# define ARCHITECTURE_ID "TMS320C28x"677
678# elif defined(__TMS320C6X__) || defined(_TMS320C6X)679# define ARCHITECTURE_ID "TMS320C6x"680
681# else /* unknown architecture */682# define ARCHITECTURE_ID ""683# endif684
685# elif defined(__ADSPSHARC__)686# define ARCHITECTURE_ID "SHARC"687
688# elif defined(__ADSPBLACKFIN__)689# define ARCHITECTURE_ID "Blackfin"690
691#elif defined(__TASKING__)692
693# if defined(__CTC__) || defined(__CPTC__)694# define ARCHITECTURE_ID "TriCore"695
696# elif defined(__CMCS__)697# define ARCHITECTURE_ID "MCS"698
699# elif defined(__CARM__)700# define ARCHITECTURE_ID "ARM"701
702# elif defined(__CARC__)703# define ARCHITECTURE_ID "ARC"704
705# elif defined(__C51__)706# define ARCHITECTURE_ID "8051"707
708# elif defined(__CPCP__)709# define ARCHITECTURE_ID "PCP"710
711# else712# define ARCHITECTURE_ID ""713# endif714
715#else716# define ARCHITECTURE_ID717#endif718
719/* Convert integer to decimal digit literals. */
720#define DEC(n) \721('0' + (((n) / 10000000)%10)), \722('0' + (((n) / 1000000)%10)), \723('0' + (((n) / 100000)%10)), \724('0' + (((n) / 10000)%10)), \725('0' + (((n) / 1000)%10)), \726('0' + (((n) / 100)%10)), \727('0' + (((n) / 10)%10)), \728('0' + ((n) % 10))729
730/* Convert integer to hex digit literals. */
731#define HEX(n) \732('0' + ((n)>>28 & 0xF)), \733('0' + ((n)>>24 & 0xF)), \734('0' + ((n)>>20 & 0xF)), \735('0' + ((n)>>16 & 0xF)), \736('0' + ((n)>>12 & 0xF)), \737('0' + ((n)>>8 & 0xF)), \738('0' + ((n)>>4 & 0xF)), \739('0' + ((n) & 0xF))740
741/* Construct a string literal encoding the version number. */
742#ifdef COMPILER_VERSION743char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";744
745/* Construct a string literal encoding the version number components. */
746#elif defined(COMPILER_VERSION_MAJOR)747char const info_version[] = {748'I', 'N', 'F', 'O', ':',749'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',750COMPILER_VERSION_MAJOR,751# ifdef COMPILER_VERSION_MINOR752'.', COMPILER_VERSION_MINOR,753# ifdef COMPILER_VERSION_PATCH754'.', COMPILER_VERSION_PATCH,755# ifdef COMPILER_VERSION_TWEAK756'.', COMPILER_VERSION_TWEAK,757# endif758# endif759# endif760']','\0'};761#endif762
763/* Construct a string literal encoding the internal version number. */
764#ifdef COMPILER_VERSION_INTERNAL765char const info_version_internal[] = {766'I', 'N', 'F', 'O', ':',767'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',768'i','n','t','e','r','n','a','l','[',769COMPILER_VERSION_INTERNAL,']','\0'};770#elif defined(COMPILER_VERSION_INTERNAL_STR)771char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";772#endif773
774/* Construct a string literal encoding the version number components. */
775#ifdef SIMULATE_VERSION_MAJOR776char const info_simulate_version[] = {777'I', 'N', 'F', 'O', ':',778's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',779SIMULATE_VERSION_MAJOR,780# ifdef SIMULATE_VERSION_MINOR781'.', SIMULATE_VERSION_MINOR,782# ifdef SIMULATE_VERSION_PATCH783'.', SIMULATE_VERSION_PATCH,784# ifdef SIMULATE_VERSION_TWEAK785'.', SIMULATE_VERSION_TWEAK,786# endif787# endif788# endif789']','\0'};790#endif791
792/* Construct the string literal in pieces to prevent the source from
793getting matched. Store it in a pointer rather than an array
794because some compilers will just produce instructions to fill the
795array rather than assigning a pointer to a static array. */
796char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";797char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";798
799
800
801#if !defined(__STDC__) && !defined(__clang__)802# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)803# define C_VERSION "90"804# else805# define C_VERSION806# endif807#elif __STDC_VERSION__ > 201710L808# define C_VERSION "23"809#elif __STDC_VERSION__ >= 201710L810# define C_VERSION "17"811#elif __STDC_VERSION__ >= 201000L812# define C_VERSION "11"813#elif __STDC_VERSION__ >= 199901L814# define C_VERSION "99"815#else816# define C_VERSION "90"817#endif818const char* info_language_standard_default =819"INFO" ":" "standard_default[" C_VERSION "]";820
821const char* info_language_extensions_default = "INFO" ":" "extensions_default["822#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \823defined(__TI_COMPILER_VERSION__)) && \824!defined(__STRICT_ANSI__)825"ON"826#else827"OFF"828#endif829"]";830
831/*--------------------------------------------------------------------------*/
832
833#ifdef ID_VOID_MAIN834void main() {}835#else836# if defined(__CLASSIC_C__)837int main(argc, argv) int argc; char *argv[];838# else839int main(int argc, char* argv[])840# endif841{
842int require = 0;843require += info_compiler[argc];844require += info_platform[argc];845require += info_arch[argc];846#ifdef COMPILER_VERSION_MAJOR847require += info_version[argc];848#endif849#ifdef COMPILER_VERSION_INTERNAL850require += info_version_internal[argc];851#endif852#ifdef SIMULATE_ID853require += info_simulate[argc];854#endif855#ifdef SIMULATE_VERSION_MAJOR856require += info_simulate_version[argc];857#endif858#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)859require += info_cray[argc];860#endif861require += info_language_standard_default[argc];862require += info_language_extensions_default[argc];863(void)argv;864return require;865}
866#endif867