Sapper

Форк
0
866 строк · 25.9 Кб
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(_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
# endif
256
# 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
# endif
261

262

263
#elif defined(__ghs__)
264
# define COMPILER_ID "GHS"
265
/* __GHS_VERSION_NUMBER = VVVVRP */
266
# ifdef __GHS_VERSION_NUMBER
267
# 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
# endif
271

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 >= 1000000
290
  /* __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
#else
295
  /* __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
#endif
300

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
# endif
307
# 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
# endif
315
# 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
# endif
329
# 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
# endif
337

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
# endif
345
# 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
#  endif
352
# endif
353

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
# endif
360
# if defined(__GNUC_PATCHLEVEL__)
361
#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
362
# endif
363

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 >= 1400
371
    /* _MSC_FULL_VER = VVRRPPPPP */
372
#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
373
#  else
374
    /* _MSC_FULL_VER = VVRRPPPP */
375
#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
376
#  endif
377
# endif
378
# if defined(_MSC_BUILD)
379
#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
380
# endif
381

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
#endif
391

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
# endif
405

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
# else
413
  /* 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
# endif
418

419

420
/* These compilers are either not known or too old to define an
421
  identification macro.  Try to identify the platform and guess that
422
  it 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
#endif
429

430
/* Construct the string literal in pieces to prevent the source from
431
   getting matched.  Store it in a pointer rather than an array
432
   because some compilers will just produce instructions to fill the
433
   array rather than assigning a pointer to a static array.  */
434
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
435
#ifdef SIMULATE_ID
436
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
437
#endif
438

439
#ifdef __QNXNTO__
440
char const* qnxnto = "INFO" ":" "qnxnto[]";
441
#endif
442

443
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
444
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
445
#endif
446

447
#define STRINGIFY_HELPER(X) #X
448
#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_ID
544
# endif
545

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
# endif
553

554
# elif defined(_ADI_COMPILER)
555
#  define PLATFORM_ID "ADSP"
556

557
#else /* unknown platform */
558
# define PLATFORM_ID
559

560
#endif
561

562
/* For windows compilers MSVC and Intel we can determine
563
   the architecture of the compiler being used.  This is because
564
   the compilers do not have flags that can change the architecture,
565
   but 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 == 4
585
#   define ARCHITECTURE_ID "ARMV4I"
586
#  elif _M_ARM == 5
587
#   define ARCHITECTURE_ID "ARMV5I"
588
#  else
589
#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
590
#  endif
591

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
# endif
601

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
# endif
612

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
# endif
647

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
# endif
667

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
# endif
684

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
# else
712
#  define ARCHITECTURE_ID ""
713
# endif
714

715
#else
716
#  define ARCHITECTURE_ID
717
#endif
718

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_VERSION
743
char 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)
747
char const info_version[] = {
748
  'I', 'N', 'F', 'O', ':',
749
  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
750
  COMPILER_VERSION_MAJOR,
751
# ifdef COMPILER_VERSION_MINOR
752
  '.', COMPILER_VERSION_MINOR,
753
#  ifdef COMPILER_VERSION_PATCH
754
   '.', COMPILER_VERSION_PATCH,
755
#   ifdef COMPILER_VERSION_TWEAK
756
    '.', COMPILER_VERSION_TWEAK,
757
#   endif
758
#  endif
759
# endif
760
  ']','\0'};
761
#endif
762

763
/* Construct a string literal encoding the internal version number. */
764
#ifdef COMPILER_VERSION_INTERNAL
765
char 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','[',
769
  COMPILER_VERSION_INTERNAL,']','\0'};
770
#elif defined(COMPILER_VERSION_INTERNAL_STR)
771
char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
772
#endif
773

774
/* Construct a string literal encoding the version number components. */
775
#ifdef SIMULATE_VERSION_MAJOR
776
char 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','[',
779
  SIMULATE_VERSION_MAJOR,
780
# ifdef SIMULATE_VERSION_MINOR
781
  '.', SIMULATE_VERSION_MINOR,
782
#  ifdef SIMULATE_VERSION_PATCH
783
   '.', SIMULATE_VERSION_PATCH,
784
#   ifdef SIMULATE_VERSION_TWEAK
785
    '.', SIMULATE_VERSION_TWEAK,
786
#   endif
787
#  endif
788
# endif
789
  ']','\0'};
790
#endif
791

792
/* Construct the string literal in pieces to prevent the source from
793
   getting matched.  Store it in a pointer rather than an array
794
   because some compilers will just produce instructions to fill the
795
   array rather than assigning a pointer to a static array.  */
796
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
797
char 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
# else
805
#  define C_VERSION
806
# endif
807
#elif __STDC_VERSION__ > 201710L
808
# define C_VERSION "23"
809
#elif __STDC_VERSION__ >= 201710L
810
# define C_VERSION "17"
811
#elif __STDC_VERSION__ >= 201000L
812
# define C_VERSION "11"
813
#elif __STDC_VERSION__ >= 199901L
814
# define C_VERSION "99"
815
#else
816
# define C_VERSION "90"
817
#endif
818
const char* info_language_standard_default =
819
  "INFO" ":" "standard_default[" C_VERSION "]";
820

821
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
822
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) ||           \
823
     defined(__TI_COMPILER_VERSION__)) &&                                     \
824
  !defined(__STRICT_ANSI__)
825
  "ON"
826
#else
827
  "OFF"
828
#endif
829
"]";
830

831
/*--------------------------------------------------------------------------*/
832

833
#ifdef ID_VOID_MAIN
834
void main() {}
835
#else
836
# if defined(__CLASSIC_C__)
837
int main(argc, argv) int argc; char *argv[];
838
# else
839
int main(int argc, char* argv[])
840
# endif
841
{
842
  int require = 0;
843
  require += info_compiler[argc];
844
  require += info_platform[argc];
845
  require += info_arch[argc];
846
#ifdef COMPILER_VERSION_MAJOR
847
  require += info_version[argc];
848
#endif
849
#ifdef COMPILER_VERSION_INTERNAL
850
  require += info_version_internal[argc];
851
#endif
852
#ifdef SIMULATE_ID
853
  require += info_simulate[argc];
854
#endif
855
#ifdef SIMULATE_VERSION_MAJOR
856
  require += info_simulate_version[argc];
857
#endif
858
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
859
  require += info_cray[argc];
860
#endif
861
  require += info_language_standard_default[argc];
862
  require += info_language_extensions_default[argc];
863
  (void)argv;
864
  return require;
865
}
866
#endif
867

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.