clang 20.0.0git
OSTargets.h
Go to the documentation of this file.
1//===--- OSTargets.h - Declare OS target feature support --------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares OS specific TargetInfo types.
10//===----------------------------------------------------------------------===//
11
12#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
13#define LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
14
15#include "Targets.h"
16
17namespace clang {
18namespace targets {
19
20template <typename TgtInfo>
21class LLVM_LIBRARY_VISIBILITY OSTargetInfo : public TgtInfo {
22protected:
23 virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
24 MacroBuilder &Builder) const = 0;
25
26public:
27 OSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
28 : TgtInfo(Triple, Opts) {}
29
30 void getTargetDefines(const LangOptions &Opts,
31 MacroBuilder &Builder) const override {
32 TgtInfo::getTargetDefines(Opts, Builder);
33 getOSDefines(Opts, TgtInfo::getTriple(), Builder);
34 }
35};
36
37void getAppleMachODefines(MacroBuilder &Builder, const LangOptions &Opts,
38 const llvm::Triple &Triple);
39
40void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
41 const llvm::Triple &Triple, StringRef &PlatformName,
42 VersionTuple &PlatformMinVersion);
43
44template <typename Target>
45class LLVM_LIBRARY_VISIBILITY AppleMachOTargetInfo
46 : public OSTargetInfo<Target> {
47protected:
48 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
49 MacroBuilder &Builder) const override {
50 getAppleMachODefines(Builder, Opts, Triple);
51 }
52
53public:
54 AppleMachOTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
55 : OSTargetInfo<Target>(Triple, Opts) {}
56
57 const char *getStaticInitSectionSpecifier() const override {
58 return "__TEXT,__StaticInit,regular,pure_instructions";
59 }
60
61 /// Apple Mach-O does not support protected visibility. Its "default" is very
62 /// similar to ELF's "protected"; Apple Mach-O requires a "weak" attribute on
63 /// declarations that can be dynamically replaced.
64 bool hasProtectedVisibility() const override { return false; }
65};
66
67template <typename Target>
68class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo
69 : public AppleMachOTargetInfo<Target> {
70protected:
71 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
72 MacroBuilder &Builder) const override {
73 getDarwinDefines(Builder, Opts, Triple, this->PlatformName,
74 this->PlatformMinVersion);
75 }
76
77public:
78 DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
79 : AppleMachOTargetInfo<Target>(Triple, Opts) {
80 // By default, no TLS, and we list permitted architecture/OS
81 // combinations.
82 this->TLSSupported = false;
83
84 if (Triple.isMacOSX())
85 this->TLSSupported = !Triple.isMacOSXVersionLT(10, 7);
86 else if (Triple.isiOS()) {
87 // 64-bit iOS supported it from 8 onwards, 32-bit device from 9 onwards,
88 // 32-bit simulator from 10 onwards.
89 if (Triple.isArch64Bit())
90 this->TLSSupported = !Triple.isOSVersionLT(8);
91 else if (Triple.isArch32Bit()) {
92 if (!Triple.isSimulatorEnvironment())
93 this->TLSSupported = !Triple.isOSVersionLT(9);
94 else
95 this->TLSSupported = !Triple.isOSVersionLT(10);
96 }
97 } else if (Triple.isWatchOS()) {
98 if (!Triple.isSimulatorEnvironment())
99 this->TLSSupported = !Triple.isOSVersionLT(2);
100 else
101 this->TLSSupported = !Triple.isOSVersionLT(3);
102 } else if (Triple.isDriverKit()) {
103 // No TLS on DriverKit.
104 } else if (Triple.isXROS())
105 this->TLSSupported = true;
106
107 this->MCountName = "\01mcount";
108 }
109
110 const char *getStaticInitSectionSpecifier() const override {
111 // FIXME: We should return 0 when building kexts.
113 }
114
115 unsigned getExnObjectAlignment() const override {
116 // Older versions of libc++abi guarantee an alignment of only 8-bytes for
117 // exception objects because of a bug in __cxa_exception that was
118 // eventually fixed in r319123.
119 llvm::VersionTuple MinVersion;
120 const llvm::Triple &T = this->getTriple();
121
122 // Compute the earliest OS versions that have the fix to libc++abi.
123 switch (T.getOS()) {
124 case llvm::Triple::Darwin:
125 case llvm::Triple::MacOSX: // Earliest supporting version is 10.14.
126 MinVersion = llvm::VersionTuple(10U, 14U);
127 break;
128 case llvm::Triple::IOS:
129 case llvm::Triple::TvOS: // Earliest supporting version is 12.0.0.
130 MinVersion = llvm::VersionTuple(12U);
131 break;
132 case llvm::Triple::WatchOS: // Earliest supporting version is 5.0.0.
133 MinVersion = llvm::VersionTuple(5U);
134 break;
135 case llvm::Triple::XROS:
136 MinVersion = llvm::VersionTuple(0);
137 break;
138 default:
139 // Conservatively return 8 bytes if OS is unknown.
140 return 64;
141 }
142
143 if (T.getOSVersion() < MinVersion)
144 return 64;
146 }
147
149 bool IsSigned) const final {
150 // Darwin uses `long long` for `int_least64_t` and `int_fast64_t`.
151 return BitWidth == 64
152 ? (IsSigned ? TargetInfo::SignedLongLong
153 : TargetInfo::UnsignedLongLong)
154 : TargetInfo::getLeastIntTypeByWidth(BitWidth, IsSigned);
155 }
156
157 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
158 return false;
159 }
160};
161
162// DragonFlyBSD Target
163template <typename Target>
164class LLVM_LIBRARY_VISIBILITY DragonFlyBSDTargetInfo
165 : public OSTargetInfo<Target> {
166protected:
167 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
168 MacroBuilder &Builder) const override {
169 // DragonFly defines; list based off of gcc output
170 Builder.defineMacro("__DragonFly__");
171 Builder.defineMacro("__DragonFly_cc_version", "100001");
172 Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
173 Builder.defineMacro("__tune_i386__");
174 DefineStd(Builder, "unix", Opts);
175 if (this->HasFloat128)
176 Builder.defineMacro("__FLOAT128__");
177 }
178
179public:
180 DragonFlyBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
181 : OSTargetInfo<Target>(Triple, Opts) {
182 switch (Triple.getArch()) {
183 default:
184 case llvm::Triple::x86:
185 case llvm::Triple::x86_64:
186 this->HasFloat128 = true;
187 this->MCountName = ".mcount";
188 break;
189 }
190 }
191};
192
193#ifndef FREEBSD_CC_VERSION
194#define FREEBSD_CC_VERSION 0U
195#endif
196
197// FreeBSD Target
198template <typename Target>
199class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public OSTargetInfo<Target> {
200protected:
201 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
202 MacroBuilder &Builder) const override {
203 // FreeBSD defines; list based off of gcc output
204
205 unsigned Release = Triple.getOSMajorVersion();
206 if (Release == 0U)
207 Release = 8U;
208 unsigned CCVersion = FREEBSD_CC_VERSION;
209 if (CCVersion == 0U)
210 CCVersion = Release * 100000U + 1U;
211
212 Builder.defineMacro("__FreeBSD__", Twine(Release));
213 Builder.defineMacro("__FreeBSD_cc_version", Twine(CCVersion));
214 Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
215 DefineStd(Builder, "unix", Opts);
216 if (this->HasFloat128)
217 Builder.defineMacro("__FLOAT128__");
218
219 // On FreeBSD, wchar_t contains the number of the code point as
220 // used by the character set of the locale. These character sets are
221 // not necessarily a superset of ASCII.
222 //
223 // FIXME: This is wrong; the macro refers to the numerical values
224 // of wchar_t *literals*, which are not locale-dependent. However,
225 // FreeBSD systems apparently depend on us getting this wrong, and
226 // setting this to 1 is conforming even if all the basic source
227 // character literals have the same encoding as char and wchar_t.
228 Builder.defineMacro("__STDC_MB_MIGHT_NEQ_WC__", "1");
229 }
230
231public:
232 FreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
233 : OSTargetInfo<Target>(Triple, Opts) {
234 switch (Triple.getArch()) {
235 case llvm::Triple::x86:
236 case llvm::Triple::x86_64:
237 this->HasFloat128 = true;
238 [[fallthrough]];
239 default:
240 this->MCountName = ".mcount";
241 break;
242 case llvm::Triple::mips:
243 case llvm::Triple::mipsel:
244 case llvm::Triple::ppc:
245 case llvm::Triple::ppcle:
246 case llvm::Triple::ppc64:
247 case llvm::Triple::ppc64le:
248 this->MCountName = "_mcount";
249 break;
250 case llvm::Triple::arm:
251 this->MCountName = "__mcount";
252 break;
253 case llvm::Triple::riscv32:
254 case llvm::Triple::riscv64:
255 break;
256 case llvm::Triple::loongarch32:
257 case llvm::Triple::loongarch64:
258 break;
259 }
260 }
261};
262
263// GNU/kFreeBSD Target
264template <typename Target>
265class LLVM_LIBRARY_VISIBILITY KFreeBSDTargetInfo : public OSTargetInfo<Target> {
266protected:
267 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
268 MacroBuilder &Builder) const override {
269 // GNU/kFreeBSD defines; list based off of gcc output
270
271 DefineStd(Builder, "unix", Opts);
272 Builder.defineMacro("__FreeBSD_kernel__");
273 Builder.defineMacro("__GLIBC__");
274 if (Opts.POSIXThreads)
275 Builder.defineMacro("_REENTRANT");
276 if (Opts.CPlusPlus)
277 Builder.defineMacro("_GNU_SOURCE");
278 }
279
280public:
281 using OSTargetInfo<Target>::OSTargetInfo;
282};
283
284// Haiku Target
285template <typename Target>
286class LLVM_LIBRARY_VISIBILITY HaikuTargetInfo : public OSTargetInfo<Target> {
287protected:
288 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
289 MacroBuilder &Builder) const override {
290 // Haiku defines; list based off of gcc output
291 Builder.defineMacro("__HAIKU__");
292 DefineStd(Builder, "unix", Opts);
293 if (this->HasFloat128)
294 Builder.defineMacro("__FLOAT128__");
295 }
296
297public:
298 HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
299 : OSTargetInfo<Target>(Triple, Opts) {
300 this->SizeType = TargetInfo::UnsignedLong;
301 this->IntPtrType = TargetInfo::SignedLong;
302 this->PtrDiffType = TargetInfo::SignedLong;
303 this->ProcessIDType = TargetInfo::SignedLong;
304 switch (Triple.getArch()) {
305 default:
306 break;
307 case llvm::Triple::x86:
308 case llvm::Triple::x86_64:
309 this->HasFloat128 = true;
310 break;
311 }
312 }
313};
314
315// Hurd target
316template <typename Target>
317class LLVM_LIBRARY_VISIBILITY HurdTargetInfo : public OSTargetInfo<Target> {
318protected:
319 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
320 MacroBuilder &Builder) const override {
321 // Hurd defines; list based off of gcc output.
322 DefineStd(Builder, "unix", Opts);
323 Builder.defineMacro("__GNU__");
324 Builder.defineMacro("__gnu_hurd__");
325 Builder.defineMacro("__MACH__");
326 Builder.defineMacro("__GLIBC__");
327 if (Opts.POSIXThreads)
328 Builder.defineMacro("_REENTRANT");
329 if (Opts.CPlusPlus)
330 Builder.defineMacro("_GNU_SOURCE");
331 }
332public:
333 using OSTargetInfo<Target>::OSTargetInfo;
334};
335
336// Linux target
337template <typename Target>
338class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public OSTargetInfo<Target> {
339protected:
340 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
341 MacroBuilder &Builder) const override {
342 // Linux defines; list based off of gcc output
343 DefineStd(Builder, "unix", Opts);
344 DefineStd(Builder, "linux", Opts);
345 if (Triple.isAndroid()) {
346 Builder.defineMacro("__ANDROID__", "1");
347 this->PlatformName = "android";
348 this->PlatformMinVersion = Triple.getEnvironmentVersion();
349 const unsigned Maj = this->PlatformMinVersion.getMajor();
350 if (Maj) {
351 Builder.defineMacro("__ANDROID_MIN_SDK_VERSION__", Twine(Maj));
352 // This historical but ambiguous name for the minSdkVersion macro. Keep
353 // defined for compatibility.
354 Builder.defineMacro("__ANDROID_API__", "__ANDROID_MIN_SDK_VERSION__");
355 }
356 } else {
357 Builder.defineMacro("__gnu_linux__");
358 }
359 if (Opts.POSIXThreads)
360 Builder.defineMacro("_REENTRANT");
361 if (Opts.CPlusPlus)
362 Builder.defineMacro("_GNU_SOURCE");
363 if (this->HasFloat128)
364 Builder.defineMacro("__FLOAT128__");
365 if (Triple.isTime64ABI()) {
366 Builder.defineMacro("_FILE_OFFSET_BITS", "64");
367 Builder.defineMacro("_TIME_BITS", "64");
368 }
369 }
370
371public:
372 LinuxTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
373 : OSTargetInfo<Target>(Triple, Opts) {
374 this->WIntType = TargetInfo::UnsignedInt;
375
376 switch (Triple.getArch()) {
377 default:
378 break;
379 case llvm::Triple::mips:
380 case llvm::Triple::mipsel:
381 case llvm::Triple::mips64:
382 case llvm::Triple::mips64el:
383 case llvm::Triple::ppc:
384 case llvm::Triple::ppcle:
385 case llvm::Triple::ppc64:
386 case llvm::Triple::ppc64le:
387 this->MCountName = "_mcount";
388 break;
389 case llvm::Triple::x86:
390 case llvm::Triple::x86_64:
391 this->HasFloat128 = true;
392 break;
393 }
394 }
395
396 const char *getStaticInitSectionSpecifier() const override {
397 return ".text.startup";
398 }
399};
400
401// NetBSD Target
402template <typename Target>
403class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo<Target> {
404protected:
405 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
406 MacroBuilder &Builder) const override {
407 // NetBSD defines; list based off of gcc output
408 Builder.defineMacro("__NetBSD__");
409 Builder.defineMacro("__unix__");
410 if (Opts.POSIXThreads)
411 Builder.defineMacro("_REENTRANT");
412 if (this->HasFloat128)
413 Builder.defineMacro("__FLOAT128__");
414 }
415
416public:
417 NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
418 : OSTargetInfo<Target>(Triple, Opts) {
419 this->MCountName = "__mcount";
420 switch (Triple.getArch()) {
421 default:
422 break;
423 case llvm::Triple::x86:
424 case llvm::Triple::x86_64:
425 this->HasFloat128 = true;
426 break;
427 }
428 }
429};
430
431// OpenBSD Target
432template <typename Target>
433class LLVM_LIBRARY_VISIBILITY OpenBSDTargetInfo : public OSTargetInfo<Target> {
434protected:
435 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
436 MacroBuilder &Builder) const override {
437 // OpenBSD defines; list based off of gcc output
438
439 Builder.defineMacro("__OpenBSD__");
440 DefineStd(Builder, "unix", Opts);
441 if (Opts.POSIXThreads)
442 Builder.defineMacro("_REENTRANT");
443 if (this->HasFloat128)
444 Builder.defineMacro("__FLOAT128__");
445
446 if (Opts.C11)
447 Builder.defineMacro("__STDC_NO_THREADS__");
448 }
449
450public:
451 OpenBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
452 : OSTargetInfo<Target>(Triple, Opts) {
453 this->WCharType = this->WIntType = this->SignedInt;
454 this->IntMaxType = TargetInfo::SignedLongLong;
455 this->Int64Type = TargetInfo::SignedLongLong;
456 switch (Triple.getArch()) {
457 case llvm::Triple::x86:
458 case llvm::Triple::x86_64:
459 this->HasFloat128 = true;
460 [[fallthrough]];
461 default:
462 this->MCountName = "__mcount";
463 break;
464 case llvm::Triple::mips64:
465 case llvm::Triple::mips64el:
466 case llvm::Triple::ppc:
467 case llvm::Triple::ppc64:
468 case llvm::Triple::ppc64le:
469 case llvm::Triple::sparcv9:
470 this->MCountName = "_mcount";
471 break;
472 case llvm::Triple::riscv64:
473 break;
474 }
475 }
476};
477
478// PS3 PPU Target
479template <typename Target>
480class LLVM_LIBRARY_VISIBILITY PS3PPUTargetInfo : public OSTargetInfo<Target> {
481protected:
482 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
483 MacroBuilder &Builder) const override {
484 // PS3 PPU defines.
485 Builder.defineMacro("__PPU__");
486 Builder.defineMacro("__CELLOS_LV2__");
487 Builder.defineMacro("__LP32__");
488 Builder.defineMacro("_ARCH_PPC64");
489 Builder.defineMacro("__powerpc64__");
490 }
491
492public:
493 PS3PPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
494 : OSTargetInfo<Target>(Triple, Opts) {
495 this->LongWidth = this->LongAlign = 32;
496 this->PointerWidth = this->PointerAlign = 32;
497 this->IntMaxType = TargetInfo::SignedLongLong;
498 this->Int64Type = TargetInfo::SignedLongLong;
499 this->SizeType = TargetInfo::UnsignedInt;
500 this->resetDataLayout("E-m:e-p:32:32-Fi64-i64:64-i128:128-n32:64");
501 }
502};
503
504// Common base class for PS4/PS5 targets.
505template <typename Target>
506class LLVM_LIBRARY_VISIBILITY PSOSTargetInfo : public OSTargetInfo<Target> {
507protected:
508 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
509 MacroBuilder &Builder) const override {
510 Builder.defineMacro("__FreeBSD__", "9");
511 Builder.defineMacro("__FreeBSD_cc_version", "900001");
512 Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
513 DefineStd(Builder, "unix", Opts);
514 Builder.defineMacro("__SCE__");
515 Builder.defineMacro("__STDC_NO_COMPLEX__");
516 Builder.defineMacro("__STDC_NO_THREADS__");
517 }
518
519public:
520 PSOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
521 : OSTargetInfo<Target>(Triple, Opts) {
522 this->WCharType = TargetInfo::UnsignedShort;
523
524 // On PS4/PS5, TLS variable cannot be aligned to more than 32 bytes (256
525 // bits).
526 this->MaxTLSAlign = 256;
527
528 // On PS4/PS5, do not honor explicit bit field alignment,
529 // as in "__attribute__((aligned(2))) int b : 1;".
530 this->UseExplicitBitFieldAlignment = false;
531
532 this->MCountName = ".mcount";
533 this->NewAlign = 256;
534 this->SuitableAlign = 256;
535 }
536
539 return (CC == CC_C) ? TargetInfo::CCCR_OK : TargetInfo::CCCR_Error;
540 }
541
542 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
543 return false;
544 }
545};
546
547// PS4 Target
548template <typename Target>
549class LLVM_LIBRARY_VISIBILITY PS4OSTargetInfo : public PSOSTargetInfo<Target> {
550protected:
551 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
552 MacroBuilder &Builder) const override {
553 // Start with base class defines.
554 PSOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
555
556 Builder.defineMacro("__ORBIS__");
557 }
558
559public:
560 using PSOSTargetInfo<Target>::PSOSTargetInfo;
561};
562
563// PS5 Target
564template <typename Target>
565class LLVM_LIBRARY_VISIBILITY PS5OSTargetInfo : public PSOSTargetInfo<Target> {
566protected:
567 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
568 MacroBuilder &Builder) const override {
569 // Start with base class defines.
570 PSOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
571
572 Builder.defineMacro("__PROSPERO__");
573 }
574
575public:
576 using PSOSTargetInfo<Target>::PSOSTargetInfo;
577};
578
579// RTEMS Target
580template <typename Target>
581class LLVM_LIBRARY_VISIBILITY RTEMSTargetInfo : public OSTargetInfo<Target> {
582protected:
583 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
584 MacroBuilder &Builder) const override {
585 // RTEMS defines; list based off of gcc output
586
587 Builder.defineMacro("__rtems__");
588 if (Opts.CPlusPlus)
589 Builder.defineMacro("_GNU_SOURCE");
590 }
591
592public:
593 RTEMSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
594 : OSTargetInfo<Target>(Triple, Opts) {
595 switch (Triple.getArch()) {
596 default:
597 case llvm::Triple::x86:
598 // this->MCountName = ".mcount";
599 break;
600 case llvm::Triple::mips:
601 case llvm::Triple::mipsel:
602 case llvm::Triple::ppc:
603 case llvm::Triple::ppc64:
604 case llvm::Triple::ppc64le:
605 // this->MCountName = "_mcount";
606 break;
607 case llvm::Triple::arm:
608 // this->MCountName = "__mcount";
609 break;
610 }
611 }
612};
613
614// Solaris target
615template <typename Target>
616class LLVM_LIBRARY_VISIBILITY SolarisTargetInfo : public OSTargetInfo<Target> {
617protected:
618 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
619 MacroBuilder &Builder) const override {
620 DefineStd(Builder, "sun", Opts);
621 DefineStd(Builder, "unix", Opts);
622 Builder.defineMacro("__svr4__");
623 Builder.defineMacro("__SVR4");
624 // Solaris headers require _XOPEN_SOURCE to be set to 600 for C99 and
625 // newer, but to 500 for everything else. feature_test.h has a check to
626 // ensure that you are not using C99 with an old version of X/Open or C89
627 // with a new version.
628 if (Opts.C99)
629 Builder.defineMacro("_XOPEN_SOURCE", "600");
630 else
631 Builder.defineMacro("_XOPEN_SOURCE", "500");
632 if (Opts.CPlusPlus) {
633 Builder.defineMacro("__C99FEATURES__");
634 Builder.defineMacro("_FILE_OFFSET_BITS", "64");
635 }
636 // GCC restricts the next two to C++.
637 Builder.defineMacro("_LARGEFILE_SOURCE");
638 Builder.defineMacro("_LARGEFILE64_SOURCE");
639 Builder.defineMacro("__EXTENSIONS__");
640 if (Opts.POSIXThreads)
641 Builder.defineMacro("_REENTRANT");
642 if (this->HasFloat128)
643 Builder.defineMacro("__FLOAT128__");
644 }
645
646public:
647 SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
648 : OSTargetInfo<Target>(Triple, Opts) {
649 if (this->PointerWidth == 64) {
650 this->WCharType = this->WIntType = this->SignedInt;
651 } else {
652 this->WCharType = this->WIntType = this->SignedLong;
653 }
654 switch (Triple.getArch()) {
655 default:
656 break;
657 case llvm::Triple::x86:
658 case llvm::Triple::x86_64:
659 this->HasFloat128 = true;
660 break;
661 }
662 }
663};
664
665// AIX Target
666template <typename Target>
667class AIXTargetInfo : public OSTargetInfo<Target> {
668protected:
669 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
670 MacroBuilder &Builder) const override {
671 DefineStd(Builder, "unix", Opts);
672 Builder.defineMacro("_IBMR2");
673 Builder.defineMacro("_POWER");
674 Builder.defineMacro("__THW_BIG_ENDIAN__");
675
676 Builder.defineMacro("_AIX");
677 Builder.defineMacro("__TOS_AIX__");
678 Builder.defineMacro("__HOS_AIX__");
679
680 if (Opts.C11) {
681 Builder.defineMacro("__STDC_NO_ATOMICS__");
682 Builder.defineMacro("__STDC_NO_THREADS__");
683 }
684
685 if (Opts.EnableAIXExtendedAltivecABI)
686 Builder.defineMacro("__EXTABI__");
687
688 VersionTuple OsVersion = Triple.getOSVersion();
689
690 // Define AIX OS-Version Macros.
691 // Includes logic for legacy versions of AIX; no specific intent to support.
692 if (OsVersion >= VersionTuple(3, 2))
693 Builder.defineMacro("_AIX32");
694 if (OsVersion >= VersionTuple(4, 1))
695 Builder.defineMacro("_AIX41");
696 if (OsVersion >= VersionTuple(4, 3))
697 Builder.defineMacro("_AIX43");
698 if (OsVersion >= VersionTuple(5, 0))
699 Builder.defineMacro("_AIX50");
700 if (OsVersion >= VersionTuple(5, 1))
701 Builder.defineMacro("_AIX51");
702 if (OsVersion >= VersionTuple(5, 2))
703 Builder.defineMacro("_AIX52");
704 if (OsVersion >= VersionTuple(5, 3))
705 Builder.defineMacro("_AIX53");
706 if (OsVersion >= VersionTuple(6, 1))
707 Builder.defineMacro("_AIX61");
708 if (OsVersion >= VersionTuple(7, 1))
709 Builder.defineMacro("_AIX71");
710 if (OsVersion >= VersionTuple(7, 2))
711 Builder.defineMacro("_AIX72");
712 if (OsVersion >= VersionTuple(7, 3))
713 Builder.defineMacro("_AIX73");
714
715 // FIXME: Do not define _LONG_LONG when -fno-long-long is specified.
716 Builder.defineMacro("_LONG_LONG");
717
718 if (Opts.POSIXThreads) {
719 Builder.defineMacro("_THREAD_SAFE");
720 }
721
722 if (this->PointerWidth == 64) {
723 Builder.defineMacro("__64BIT__");
724 }
725
726 // Define _WCHAR_T when it is a fundamental type
727 // (i.e., for C++ without -fno-wchar).
728 if (Opts.CPlusPlus && Opts.WChar) {
729 Builder.defineMacro("_WCHAR_T");
730 }
731 }
732
733public:
734 AIXTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
735 : OSTargetInfo<Target>(Triple, Opts) {
736 this->MCountName = "__mcount";
737 this->TheCXXABI.set(TargetCXXABI::XL);
738
739 if (this->PointerWidth == 64) {
740 this->WCharType = this->UnsignedInt;
741 } else {
742 this->WCharType = this->UnsignedShort;
743 }
744 this->UseZeroLengthBitfieldAlignment = true;
745 }
746
747 // AIX sets FLT_EVAL_METHOD to be 1.
750 }
751
752 bool defaultsToAIXPowerAlignment() const override { return true; }
753
754 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
755 return false;
756 }
757};
758
759// z/OS target
760template <typename Target>
761class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
762protected:
763 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
764 MacroBuilder &Builder) const override {
765 // FIXME: _LONG_LONG should not be defined under -std=c89.
766 Builder.defineMacro("_LONG_LONG");
767 Builder.defineMacro("__370__");
768 Builder.defineMacro("__BFP__");
769 // FIXME: __BOOL__ should not be defined under -std=c89.
770 Builder.defineMacro("__BOOL__");
771 Builder.defineMacro("__COMPILER_VER__", "0x50000000");
772 Builder.defineMacro("__LONGNAME__");
773 Builder.defineMacro("__MVS__");
774 Builder.defineMacro("__THW_370__");
775 Builder.defineMacro("__THW_BIG_ENDIAN__");
776 Builder.defineMacro("__TOS_390__");
777 Builder.defineMacro("__TOS_MVS__");
778 Builder.defineMacro("__XPLINK__");
779
780 if (this->PointerWidth == 64)
781 Builder.defineMacro("__64BIT__");
782
783 if (Opts.CPlusPlus && Opts.WChar) {
784 // Macro __wchar_t is defined so that the wchar_t data
785 // type is not declared as a typedef in system headers.
786 Builder.defineMacro("__wchar_t");
787 }
788
789 this->PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
790 }
791
792public:
793 ZOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
794 : OSTargetInfo<Target>(Triple, Opts) {
795 this->WCharType = TargetInfo::UnsignedInt;
796 this->MaxAlignedAttribute = 128;
797 this->UseBitFieldTypeAlignment = false;
798 this->UseZeroLengthBitfieldAlignment = true;
799 this->UseLeadingZeroLengthBitfield = false;
800 this->ZeroLengthBitfieldBoundary = 32;
801 this->TheCXXABI.set(TargetCXXABI::XL);
802 }
803
804 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
805 return false;
806 }
807};
808
809// UEFI target
810template <typename Target>
811class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
812protected:
813 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
814 MacroBuilder &Builder) const override {
815 Builder.defineMacro("__UEFI__");
816 }
817
818public:
819 UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
820 : OSTargetInfo<Target>(Triple, Opts) {
821 this->WCharType = TargetInfo::UnsignedShort;
822 this->WIntType = TargetInfo::UnsignedShort;
823 }
824};
825
826void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
827 MacroBuilder &Builder);
828
829// Windows target
830template <typename Target>
831class LLVM_LIBRARY_VISIBILITY WindowsTargetInfo : public OSTargetInfo<Target> {
832protected:
833 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
834 MacroBuilder &Builder) const override {
835 addWindowsDefines(Triple, Opts, Builder);
836 }
837
838public:
839 WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
840 : OSTargetInfo<Target>(Triple, Opts) {
841 this->WCharType = TargetInfo::UnsignedShort;
842 this->WIntType = TargetInfo::UnsignedShort;
843 }
844};
845
846template <typename Target>
847class LLVM_LIBRARY_VISIBILITY NaClTargetInfo : public OSTargetInfo<Target> {
848protected:
849 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
850 MacroBuilder &Builder) const override {
851 if (Opts.POSIXThreads)
852 Builder.defineMacro("_REENTRANT");
853 if (Opts.CPlusPlus)
854 Builder.defineMacro("_GNU_SOURCE");
855
856 DefineStd(Builder, "unix", Opts);
857 Builder.defineMacro("__native_client__");
858 }
859
860public:
861 NaClTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
862 : OSTargetInfo<Target>(Triple, Opts) {
863 this->LongAlign = 32;
864 this->LongWidth = 32;
865 this->PointerAlign = 32;
866 this->PointerWidth = 32;
867 this->IntMaxType = TargetInfo::SignedLongLong;
868 this->Int64Type = TargetInfo::SignedLongLong;
869 this->DoubleAlign = 64;
870 this->LongDoubleWidth = 64;
871 this->LongDoubleAlign = 64;
872 this->LongLongWidth = 64;
873 this->LongLongAlign = 64;
874 this->SizeType = TargetInfo::UnsignedInt;
875 this->PtrDiffType = TargetInfo::SignedInt;
876 this->IntPtrType = TargetInfo::SignedInt;
877 // RegParmMax is inherited from the underlying architecture.
878 this->LongDoubleFormat = &llvm::APFloat::IEEEdouble();
879 if (Triple.getArch() == llvm::Triple::arm) {
880 // Handled in ARM's setABI().
881 } else if (Triple.getArch() == llvm::Triple::x86) {
882 this->resetDataLayout("e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
883 "i64:64-i128:128-n8:16:32-S128");
884 } else if (Triple.getArch() == llvm::Triple::x86_64) {
885 this->resetDataLayout("e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
886 "i64:64-i128:128-n8:16:32:64-S128");
887 } else if (Triple.getArch() == llvm::Triple::mipsel) {
888 // Handled on mips' setDataLayout.
889 }
890 }
891};
892
893// Fuchsia Target
894template <typename Target>
895class LLVM_LIBRARY_VISIBILITY FuchsiaTargetInfo : public OSTargetInfo<Target> {
896protected:
897 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
898 MacroBuilder &Builder) const override {
899 Builder.defineMacro("__Fuchsia__");
900 if (Opts.POSIXThreads)
901 Builder.defineMacro("_REENTRANT");
902 // Required by the libc++ locale support.
903 if (Opts.CPlusPlus)
904 Builder.defineMacro("_GNU_SOURCE");
905 Builder.defineMacro("__Fuchsia_API_level__", Twine(Opts.FuchsiaAPILevel));
906 this->PlatformName = "fuchsia";
907 this->PlatformMinVersion = VersionTuple(Opts.FuchsiaAPILevel);
908 }
909
910public:
911 FuchsiaTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
912 : OSTargetInfo<Target>(Triple, Opts) {
913 this->WIntType = TargetInfo::UnsignedInt;
914 this->MCountName = "__mcount";
915 this->TheCXXABI.set(TargetCXXABI::Fuchsia);
916 }
917};
918
919// WebAssembly target
920template <typename Target>
921class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
922 : public OSTargetInfo<Target> {
923protected:
924 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
925 MacroBuilder &Builder) const override {
926 // A common platform macro.
927 if (Opts.POSIXThreads)
928 Builder.defineMacro("_REENTRANT");
929 // Follow g++ convention and predefine _GNU_SOURCE for C++.
930 if (Opts.CPlusPlus)
931 Builder.defineMacro("_GNU_SOURCE");
932 // Indicate that we have __float128.
933 Builder.defineMacro("__FLOAT128__");
934 }
935
936public:
937 explicit WebAssemblyOSTargetInfo(const llvm::Triple &Triple,
938 const TargetOptions &Opts)
939 : OSTargetInfo<Target>(Triple, Opts) {
940 this->MCountName = "__mcount";
941 this->TheCXXABI.set(TargetCXXABI::WebAssembly);
942 this->HasFloat128 = true;
943 }
944};
945
946// WASI target
947template <typename Target>
948class LLVM_LIBRARY_VISIBILITY WASITargetInfo
949 : public WebAssemblyOSTargetInfo<Target> {
950 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
951 MacroBuilder &Builder) const final {
953 Builder.defineMacro("__wasi__");
954 }
955
956public:
957 using WebAssemblyOSTargetInfo<Target>::WebAssemblyOSTargetInfo;
958};
959
960// Emscripten target
961template <typename Target>
962class LLVM_LIBRARY_VISIBILITY EmscriptenTargetInfo
963 : public WebAssemblyOSTargetInfo<Target> {
964 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
965 MacroBuilder &Builder) const final {
967 DefineStd(Builder, "unix", Opts);
968 Builder.defineMacro("__EMSCRIPTEN__");
969 if (Opts.POSIXThreads)
970 Builder.defineMacro("__EMSCRIPTEN_PTHREADS__");
971 }
972
973public:
974 explicit EmscriptenTargetInfo(const llvm::Triple &Triple,
975 const TargetOptions &Opts)
976 : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {
977 // Keeping the alignment of long double to 8 bytes even though its size is
978 // 16 bytes allows emscripten to have an 8-byte-aligned max_align_t which
979 // in turn gives is a 8-byte aligned malloc.
980 // Emscripten's ABI is unstable and we may change this back to 128 to match
981 // the WebAssembly default in the future.
982 this->LongDoubleAlign = 64;
983 }
984};
985
986// OHOS target
987template <typename Target>
988class LLVM_LIBRARY_VISIBILITY OHOSTargetInfo : public OSTargetInfo<Target> {
989protected:
990 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
991 MacroBuilder &Builder) const override {
992 // Linux defines; list based off of gcc output
993 DefineStd(Builder, "unix", Opts);
994
995 // Generic OHOS target defines
996 if (Triple.isOHOSFamily()) {
997 Builder.defineMacro("__OHOS_FAMILY__", "1");
998
999 auto Version = Triple.getEnvironmentVersion();
1000 this->PlatformName = "ohos";
1001 this->PlatformMinVersion = Version;
1002 Builder.defineMacro("__OHOS_Major__", Twine(Version.getMajor()));
1003 if (auto Minor = Version.getMinor())
1004 Builder.defineMacro("__OHOS_Minor__", Twine(*Minor));
1005 if (auto Subminor = Version.getSubminor())
1006 Builder.defineMacro("__OHOS_Micro__", Twine(*Subminor));
1007 }
1008
1009 if (Triple.isOpenHOS())
1010 Builder.defineMacro("__OHOS__");
1011
1012 if (Triple.isOSLinux()) {
1013 DefineStd(Builder, "linux", Opts);
1014 } else if (Triple.isOSLiteOS()) {
1015 Builder.defineMacro("__LITEOS__");
1016 }
1017
1018 if (Opts.POSIXThreads)
1019 Builder.defineMacro("_REENTRANT");
1020 if (Opts.CPlusPlus)
1021 Builder.defineMacro("_GNU_SOURCE");
1022 if (this->HasFloat128)
1023 Builder.defineMacro("__FLOAT128__");
1024 }
1025
1026public:
1027 OHOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
1028 : OSTargetInfo<Target>(Triple, Opts) {
1029 this->WIntType = TargetInfo::UnsignedInt;
1030
1031 switch (Triple.getArch()) {
1032 default:
1033 break;
1034 case llvm::Triple::x86:
1035 case llvm::Triple::x86_64:
1036 this->HasFloat128 = true;
1037 break;
1038 }
1039 }
1040
1041 const char *getStaticInitSectionSpecifier() const override {
1042 return ".text.startup";
1043 }
1044};
1045
1046} // namespace targets
1047} // namespace clang
1048#endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
llvm::MachO::Target Target
Definition: MachO.h:51
#define FREEBSD_CC_VERSION
Definition: OSTargets.h:194
FPEvalMethodKind
Possible float expression evaluation method choices.
Definition: LangOptions.h:299
@ FEM_Double
Use the type double for fp arithmetic.
Definition: LangOptions.h:306
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:499
Options for controlling the target.
Definition: TargetOptions.h:26
AIXTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:734
bool defaultsToAIXPowerAlignment() const override
Definition: OSTargets.h:752
LangOptions::FPEvalMethodKind getFPEvalMethod() const override
Definition: OSTargets.h:748
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition: OSTargets.h:754
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:669
const char * getStaticInitSectionSpecifier() const override
Definition: OSTargets.h:57
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:48
AppleMachOTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:54
bool hasProtectedVisibility() const override
Apple Mach-O does not support protected visibility.
Definition: OSTargets.h:64
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition: OSTargets.h:157
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:71
unsigned getExnObjectAlignment() const override
Definition: OSTargets.h:115
TargetInfo::IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const final
Definition: OSTargets.h:148
DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:78
const char * getStaticInitSectionSpecifier() const override
Definition: OSTargets.h:110
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:167
DragonFlyBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:180
EmscriptenTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:974
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:201
FreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:232
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:897
FuchsiaTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:911
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:288
HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:298
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:319
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:267
LinuxTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:372
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:340
const char * getStaticInitSectionSpecifier() const override
Definition: OSTargets.h:396
NaClTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:861
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:849
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:405
NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:417
const char * getStaticInitSectionSpecifier() const override
Definition: OSTargets.h:1041
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:990
OHOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:1027
virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const =0
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
Definition: OSTargets.h:30
OSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:27
OpenBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:451
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:435
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:482
PS3PPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:493
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:551
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:567
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition: OSTargets.h:542
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:508
TargetInfo::CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Definition: OSTargets.h:538
PSOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:520
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:583
RTEMSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:593
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:618
SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:647
UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:819
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:813
WebAssemblyOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:937
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:924
WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:839
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:833
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition: OSTargets.h:804
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition: OSTargets.h:763
ZOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition: OSTargets.h:793
void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts, MacroBuilder &Builder)
Definition: OSTargets.cpp:273
void getAppleMachODefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple)
Definition: OSTargets.cpp:22
LLVM_LIBRARY_VISIBILITY void DefineStd(clang::MacroBuilder &Builder, llvm::StringRef MacroName, const clang::LangOptions &Opts)
Define a macro name and standard variants.
void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple, StringRef &PlatformName, VersionTuple &PlatformMinVersion)
Definition: OSTargets.cpp:56
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
CallingConv
CallingConv - Specifies the calling convention that a function uses.
Definition: Specifiers.h:278
@ CC_C
Definition: Specifiers.h:279
IntType
===-— Target Data Type Query Methods ----------------------------—===//
Definition: TargetInfo.h:144