clang 23.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 /// Apple Mach-O can autohide a vague-linkage vtable so that each image gets
67 /// its own copy, so such a vtable may have more than one address in a
68 /// program. A strong (key-function) vtable still has a unique address.
72};
73
74template <typename Target>
75class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo
76 : public AppleMachOTargetInfo<Target> {
77protected:
78 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
79 MacroBuilder &Builder) const override {
80 getDarwinDefines(Builder, Opts, Triple, this->PlatformName,
81 this->PlatformMinVersion);
82 }
83
84public:
85 DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
86 : AppleMachOTargetInfo<Target>(Triple, Opts) {
87 // By default, no TLS, and we list permitted architecture/OS
88 // combinations.
89 this->TLSSupported = false;
90
91 if (Triple.isMacOSX())
92 this->TLSSupported = !Triple.isMacOSXVersionLT(10, 7);
93 else if (Triple.isiOS()) {
94 // 64-bit iOS supported it from 8 onwards, 32-bit device from 9 onwards,
95 // 32-bit simulator from 10 onwards.
96 if (Triple.isArch64Bit())
97 this->TLSSupported = !Triple.isOSVersionLT(8);
98 else if (Triple.isArch32Bit()) {
99 if (!Triple.isSimulatorEnvironment())
100 this->TLSSupported = !Triple.isOSVersionLT(9);
101 else
102 this->TLSSupported = !Triple.isOSVersionLT(10);
103 }
104 } else if (Triple.isWatchOS()) {
105 if (!Triple.isSimulatorEnvironment())
106 this->TLSSupported = !Triple.isOSVersionLT(2);
107 else
108 this->TLSSupported = !Triple.isOSVersionLT(3);
109 } else if (Triple.isDriverKit()) {
110 // No TLS on DriverKit.
111 } else if (Triple.isXROS())
112 this->TLSSupported = true;
113
114 this->MCountName = "\01mcount";
115 }
116
117 const char *getStaticInitSectionSpecifier() const override {
118 // FIXME: We should return 0 when building kexts.
120 }
121
122 unsigned getExnObjectAlignment() const override {
123 // Older versions of libc++abi guarantee an alignment of only 8-bytes for
124 // exception objects because of a bug in __cxa_exception that was
125 // eventually fixed in r319123.
126 llvm::VersionTuple MinVersion;
127 const llvm::Triple &T = this->getTriple();
128
129 // Compute the earliest OS versions that have the fix to libc++abi.
130 switch (T.getOS()) {
131 case llvm::Triple::Darwin:
132 case llvm::Triple::MacOSX: // Earliest supporting version is 10.14.
133 MinVersion = llvm::VersionTuple(10U, 14U);
134 break;
135 case llvm::Triple::IOS:
136 case llvm::Triple::TvOS: // Earliest supporting version is 12.0.0.
137 MinVersion = llvm::VersionTuple(12U);
138 break;
139 case llvm::Triple::WatchOS: // Earliest supporting version is 5.0.0.
140 MinVersion = llvm::VersionTuple(5U);
141 break;
142 case llvm::Triple::XROS:
143 MinVersion = llvm::VersionTuple(0);
144 break;
145 default:
146 // Conservatively return 8 bytes if OS is unknown.
147 return 64;
148 }
149
150 if (T.getOSVersion() < MinVersion)
151 return 64;
153 }
154
156 bool IsSigned) const final {
157 // Darwin uses `long long` for `int_least64_t` and `int_fast64_t`.
158 return BitWidth == 64
159 ? (IsSigned ? TargetInfo::SignedLongLong
161 : TargetInfo::getLeastIntTypeByWidth(BitWidth, IsSigned);
162 }
163
164 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
165 return false;
166 }
167};
168
169// DragonFlyBSD Target
170template <typename Target>
171class LLVM_LIBRARY_VISIBILITY DragonFlyBSDTargetInfo
172 : public OSTargetInfo<Target> {
173protected:
174 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
175 MacroBuilder &Builder) const override {
176 // DragonFly defines; list based off of gcc output
177 Builder.defineMacro("__DragonFly__");
178 Builder.defineMacro("__DragonFly_cc_version", "100001");
179 Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
180 Builder.defineMacro("__tune_i386__");
181 DefineStd(Builder, "unix", Opts);
182 if (this->HasFloat128)
183 Builder.defineMacro("__FLOAT128__");
184
185 if (Opts.C11)
186 Builder.defineMacro("__STDC_NO_THREADS__");
187 }
188
189public:
190 DragonFlyBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
191 : OSTargetInfo<Target>(Triple, Opts) {
192 switch (Triple.getArch()) {
193 default:
194 case llvm::Triple::x86:
195 case llvm::Triple::x86_64:
196 this->HasFloat128 = true;
197 this->MCountName = ".mcount";
198 break;
199 }
200 }
201};
202
203#ifndef FREEBSD_CC_VERSION
204#define FREEBSD_CC_VERSION 0U
205#endif
206
207// FreeBSD Target
208template <typename Target>
209class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public OSTargetInfo<Target> {
210protected:
211 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
212 MacroBuilder &Builder) const override {
213 // FreeBSD defines; list based off of gcc output
214
215 unsigned Release = Triple.getOSMajorVersion();
216 if (Release == 0U)
217 Release = 8U;
218 unsigned CCVersion = FREEBSD_CC_VERSION;
219 if (CCVersion == 0U)
220 CCVersion = Release * 100000U + 1U;
221
222 Builder.defineMacro("__FreeBSD__", Twine(Release));
223 Builder.defineMacro("__FreeBSD_cc_version", Twine(CCVersion));
224 Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
225 DefineStd(Builder, "unix", Opts);
226 if (this->HasFloat128)
227 Builder.defineMacro("__FLOAT128__");
228
229 // On FreeBSD, wchar_t contains the number of the code point as
230 // used by the character set of the locale. These character sets are
231 // not necessarily a superset of ASCII.
232 //
233 // FIXME: This is wrong; the macro refers to the numerical values
234 // of wchar_t *literals*, which are not locale-dependent. However,
235 // FreeBSD systems apparently depend on us getting this wrong, and
236 // setting this to 1 is conforming even if all the basic source
237 // character literals have the same encoding as char and wchar_t.
238 Builder.defineMacro("__STDC_MB_MIGHT_NEQ_WC__", "1");
239 }
240
241public:
242 FreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
243 : OSTargetInfo<Target>(Triple, Opts) {
244 switch (Triple.getArch()) {
245 case llvm::Triple::x86:
246 case llvm::Triple::x86_64:
247 this->HasFloat128 = true;
248 [[fallthrough]];
249 default:
250 this->MCountName = ".mcount";
251 break;
252 case llvm::Triple::mips:
253 case llvm::Triple::mipsel:
254 case llvm::Triple::ppc:
255 case llvm::Triple::ppcle:
256 case llvm::Triple::ppc64:
257 case llvm::Triple::ppc64le:
258 this->MCountName = "_mcount";
259 break;
260 case llvm::Triple::arm:
261 this->MCountName = "__mcount";
262 break;
263 case llvm::Triple::loongarch64:
264 case llvm::Triple::riscv64:
265 break;
266 }
267 }
268};
269
270// GNU/kFreeBSD Target
271template <typename Target>
272class LLVM_LIBRARY_VISIBILITY KFreeBSDTargetInfo : public OSTargetInfo<Target> {
273protected:
274 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
275 MacroBuilder &Builder) const override {
276 // GNU/kFreeBSD defines; list based off of gcc output
277
278 DefineStd(Builder, "unix", Opts);
279 Builder.defineMacro("__FreeBSD_kernel__");
280 Builder.defineMacro("__GLIBC__");
281 if (Opts.POSIXThreads)
282 Builder.defineMacro("_REENTRANT");
283 if (Opts.CPlusPlus)
284 Builder.defineMacro("_GNU_SOURCE");
285 }
286
287public:
289};
290
291// Haiku Target
292template <typename Target>
293class LLVM_LIBRARY_VISIBILITY HaikuTargetInfo : public OSTargetInfo<Target> {
294protected:
295 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
296 MacroBuilder &Builder) const override {
297 // Haiku defines; list based off of gcc output
298 Builder.defineMacro("__HAIKU__");
299 DefineStd(Builder, "unix", Opts);
300 if (this->HasFloat128)
301 Builder.defineMacro("__FLOAT128__");
302 }
303
304public:
305 HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
306 : OSTargetInfo<Target>(Triple, Opts) {
307 this->SizeType = TargetInfo::UnsignedLong;
308 this->IntPtrType = TargetInfo::SignedLong;
309 this->PtrDiffType = TargetInfo::SignedLong;
310 this->ProcessIDType = TargetInfo::SignedLong;
311 switch (Triple.getArch()) {
312 default:
313 break;
314 case llvm::Triple::x86:
315 case llvm::Triple::x86_64:
316 this->HasFloat128 = true;
317 break;
318 }
319 }
320};
321
322// Hurd target
323template <typename Target>
324class LLVM_LIBRARY_VISIBILITY HurdTargetInfo : public OSTargetInfo<Target> {
325protected:
326 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
327 MacroBuilder &Builder) const override {
328 // Hurd defines; list based off of gcc output.
329 DefineStd(Builder, "unix", Opts);
330 Builder.defineMacro("__GNU__");
331 Builder.defineMacro("__gnu_hurd__");
332 Builder.defineMacro("__MACH__");
333 Builder.defineMacro("__GLIBC__");
334 if (Opts.POSIXThreads)
335 Builder.defineMacro("_REENTRANT");
336 if (Opts.CPlusPlus)
337 Builder.defineMacro("_GNU_SOURCE");
338 if (this->HasFloat128)
339 Builder.defineMacro("__FLOAT128__");
340 }
341public:
342 HurdTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
343 : OSTargetInfo<Target>(Triple, Opts) {
344 switch (Triple.getArch()) {
345 default:
346 break;
347 case llvm::Triple::x86:
348 case llvm::Triple::x86_64:
349 this->HasFloat128 = true;
350 break;
351 }
352 }
353};
354
355// Linux target
356template <typename Target>
357class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public OSTargetInfo<Target> {
358protected:
359 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
360 MacroBuilder &Builder) const override {
361 // Linux defines; list based off of gcc output
362 DefineStd(Builder, "unix", Opts);
363 DefineStd(Builder, "linux", Opts);
364 if (Triple.isAndroid()) {
365 Builder.defineMacro("__ANDROID__", "1");
366 this->PlatformName = "android";
367 this->PlatformMinVersion = Triple.getEnvironmentVersion();
368 const unsigned Maj = this->PlatformMinVersion.getMajor();
369 if (Maj) {
370 Builder.defineMacro("__ANDROID_MIN_SDK_VERSION__", Twine(Maj));
371 // This historical but ambiguous name for the minSdkVersion macro. Keep
372 // defined for compatibility.
373 Builder.defineMacro("__ANDROID_API__", "__ANDROID_MIN_SDK_VERSION__");
374 }
375 } else {
376 Builder.defineMacro("__gnu_linux__");
377 }
378 if (Opts.POSIXThreads)
379 Builder.defineMacro("_REENTRANT");
380 if (Opts.CPlusPlus)
381 Builder.defineMacro("_GNU_SOURCE");
382 if (this->HasFloat128)
383 Builder.defineMacro("__FLOAT128__");
384 if (Triple.isTime64ABI()) {
385 Builder.defineMacro("_FILE_OFFSET_BITS", "64");
386 Builder.defineMacro("_TIME_BITS", "64");
387 }
388 }
389
390public:
391 LinuxTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
392 : OSTargetInfo<Target>(Triple, Opts) {
393 this->WIntType = TargetInfo::UnsignedInt;
394
395 switch (Triple.getArch()) {
396 default:
397 break;
398 case llvm::Triple::mips:
399 case llvm::Triple::mipsel:
400 case llvm::Triple::mips64:
401 case llvm::Triple::mips64el:
402 case llvm::Triple::ppc:
403 case llvm::Triple::ppcle:
404 case llvm::Triple::ppc64:
405 case llvm::Triple::ppc64le:
406 this->MCountName = "_mcount";
407 break;
408 case llvm::Triple::x86:
409 case llvm::Triple::x86_64:
410 this->HasFloat128 = true;
411 break;
412 }
413 }
414
415 const char *getStaticInitSectionSpecifier() const override {
416 return ".text.startup";
417 }
418
419 // This allows template specializations, see
420 // LinuxTargetInfo<AArch64leTargetInfo>::setABI
421 bool setABI(const std::string &Name) override {
422 return OSTargetInfo<Target>::setABI(Name);
423 }
424};
425
426// Managarm Target
427template <typename Target>
428class LLVM_LIBRARY_VISIBILITY ManagarmTargetInfo : public OSTargetInfo<Target> {
429protected:
430 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
431 MacroBuilder &Builder) const override {
432 DefineStd(Builder, "unix", Opts);
433 Builder.defineMacro("__managarm__");
434 if (Opts.POSIXThreads)
435 Builder.defineMacro("_REENTRANT");
436 if (Opts.CPlusPlus)
437 Builder.defineMacro("_GNU_SOURCE");
438 if (this->HasFloat128)
439 Builder.defineMacro("__FLOAT128__");
440 }
441
442public:
443 ManagarmTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
444 : OSTargetInfo<Target>(Triple, Opts) {
445 switch (Triple.getArch()) {
446 default:
447 break;
448 case llvm::Triple::x86:
449 case llvm::Triple::x86_64:
450 this->HasFloat128 = true;
451 break;
452 }
453 }
454};
455
456// NetBSD Target
457template <typename Target>
458class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo<Target> {
459protected:
460 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
461 MacroBuilder &Builder) const override {
462 // NetBSD defines; list based off of gcc output
463 Builder.defineMacro("__NetBSD__");
464 Builder.defineMacro("__unix__");
465 if (Opts.POSIXThreads)
466 Builder.defineMacro("_REENTRANT");
467 if (this->HasFloat128)
468 Builder.defineMacro("__FLOAT128__");
469 }
470
471public:
472 NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
473 : OSTargetInfo<Target>(Triple, Opts) {
474 this->MCountName = "__mcount";
475 switch (Triple.getArch()) {
476 default:
477 break;
478 case llvm::Triple::x86:
479 case llvm::Triple::x86_64:
480 this->HasFloat128 = true;
481 break;
482 }
483 }
484};
485
486// OpenBSD Target
487template <typename Target>
488class LLVM_LIBRARY_VISIBILITY OpenBSDTargetInfo : public OSTargetInfo<Target> {
489protected:
490 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
491 MacroBuilder &Builder) const override {
492 // OpenBSD defines; list based off of gcc output
493
494 Builder.defineMacro("__OpenBSD__");
495 DefineStd(Builder, "unix", Opts);
496 if (Opts.POSIXThreads)
497 Builder.defineMacro("_REENTRANT");
498 if (this->HasFloat128)
499 Builder.defineMacro("__FLOAT128__");
500
501 if (Opts.C11)
502 Builder.defineMacro("__STDC_NO_THREADS__");
503 }
504
505public:
506 OpenBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
507 : OSTargetInfo<Target>(Triple, Opts) {
508 this->WCharType = this->WIntType = this->SignedInt;
509 this->IntMaxType = TargetInfo::SignedLongLong;
510 this->Int64Type = TargetInfo::SignedLongLong;
511 switch (Triple.getArch()) {
512 case llvm::Triple::x86:
513 case llvm::Triple::x86_64:
514 this->HasFloat128 = true;
515 [[fallthrough]];
516 default:
517 this->MCountName = "__mcount";
518 break;
519 case llvm::Triple::mips64:
520 case llvm::Triple::mips64el:
521 case llvm::Triple::ppc:
522 case llvm::Triple::ppc64:
523 case llvm::Triple::ppc64le:
524 case llvm::Triple::sparcv9:
525 this->MCountName = "_mcount";
526 break;
527 case llvm::Triple::loongarch64:
528 case llvm::Triple::riscv64:
529 break;
530 }
531 }
532};
533
534// PS3 PPU Target
535template <typename Target>
536class LLVM_LIBRARY_VISIBILITY PS3PPUTargetInfo : public OSTargetInfo<Target> {
537protected:
538 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
539 MacroBuilder &Builder) const override {
540 // PS3 PPU defines.
541 Builder.defineMacro("__PPU__");
542 Builder.defineMacro("__CELLOS_LV2__");
543 Builder.defineMacro("__LP32__");
544 Builder.defineMacro("_ARCH_PPC64");
545 Builder.defineMacro("__powerpc64__");
546 }
547
548public:
549 PS3PPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
550 : OSTargetInfo<Target>(Triple, Opts) {
551 this->LongWidth = this->LongAlign = 32;
552 this->PointerWidth = this->PointerAlign = 32;
553 this->IntMaxType = TargetInfo::SignedLongLong;
554 this->Int64Type = TargetInfo::SignedLongLong;
555 this->SizeType = TargetInfo::UnsignedInt;
556 this->resetDataLayout();
557 }
558};
559
560// Common base class for PS4/PS5 targets.
561template <typename Target>
562class LLVM_LIBRARY_VISIBILITY PSOSTargetInfo : public OSTargetInfo<Target> {
563protected:
564 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
565 MacroBuilder &Builder) const override {
566 Builder.defineMacro("__FreeBSD__", "9");
567 Builder.defineMacro("__FreeBSD_cc_version", "900001");
568 Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
569 DefineStd(Builder, "unix", Opts);
570 Builder.defineMacro("__SCE__");
571 Builder.defineMacro("__STDC_NO_COMPLEX__");
572 Builder.defineMacro("__STDC_NO_THREADS__");
573 }
574
575public:
576 PSOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
577 : OSTargetInfo<Target>(Triple, Opts) {
578 this->WCharType = TargetInfo::UnsignedShort;
579
580 // On PS4/PS5, TLS variable cannot be aligned to more than 32 bytes (256
581 // bits).
582 this->MaxTLSAlign = 256;
583
584 // On PS4/PS5, do not honor explicit bit field alignment,
585 // as in "__attribute__((aligned(2))) int b : 1;".
586 this->UseExplicitBitFieldAlignment = false;
587
588 this->MCountName = ".mcount";
589 this->NewAlign = 256;
590 this->SuitableAlign = 256;
591 }
592
596 }
597
598 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
599 return false;
600 }
601};
602
603// PS4 Target
604template <typename Target>
605class LLVM_LIBRARY_VISIBILITY PS4OSTargetInfo : public PSOSTargetInfo<Target> {
606protected:
607 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
608 MacroBuilder &Builder) const override {
609 // Start with base class defines.
610 PSOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
611
612 Builder.defineMacro("__ORBIS__");
613 }
614
615public:
617};
618
619// PS5 Target
620template <typename Target>
621class LLVM_LIBRARY_VISIBILITY PS5OSTargetInfo : public PSOSTargetInfo<Target> {
622protected:
623 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
624 MacroBuilder &Builder) const override {
625 // Start with base class defines.
626 PSOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
627
628 Builder.defineMacro("__PROSPERO__");
629 }
630
631public:
633};
634
635// RTEMS Target
636template <typename Target>
637class LLVM_LIBRARY_VISIBILITY RTEMSTargetInfo : public OSTargetInfo<Target> {
638protected:
639 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
640 MacroBuilder &Builder) const override {
641 // RTEMS defines; list based off of gcc output
642
643 Builder.defineMacro("__rtems__");
644 if (Opts.CPlusPlus)
645 Builder.defineMacro("_GNU_SOURCE");
646 }
647
648public:
649 RTEMSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
650 : OSTargetInfo<Target>(Triple, Opts) {
651 switch (Triple.getArch()) {
652 default:
653 case llvm::Triple::x86:
654 // this->MCountName = ".mcount";
655 break;
656 case llvm::Triple::mips:
657 case llvm::Triple::mipsel:
658 case llvm::Triple::ppc:
659 case llvm::Triple::ppc64:
660 case llvm::Triple::ppc64le:
661 // this->MCountName = "_mcount";
662 break;
663 case llvm::Triple::arm:
664 // this->MCountName = "__mcount";
665 break;
666 }
667 }
668};
669
670// Solaris target
671template <typename Target>
672class LLVM_LIBRARY_VISIBILITY SolarisTargetInfo : public OSTargetInfo<Target> {
673protected:
674 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
675 MacroBuilder &Builder) const override {
676 DefineStd(Builder, "sun", Opts);
677 DefineStd(Builder, "unix", Opts);
678 Builder.defineMacro("__svr4__");
679 Builder.defineMacro("__SVR4");
680 if (Opts.CPlusPlus) {
681 Builder.defineMacro("__C99FEATURES__");
682 Builder.defineMacro("_FILE_OFFSET_BITS", "64");
683 }
684 // GCC restricts the next two to C++.
685 Builder.defineMacro("_LARGEFILE_SOURCE");
686 Builder.defineMacro("_LARGEFILE64_SOURCE");
687 Builder.defineMacro("__EXTENSIONS__");
688 if (Opts.POSIXThreads)
689 Builder.defineMacro("_REENTRANT");
690 if (this->HasFloat128)
691 Builder.defineMacro("__FLOAT128__");
692 }
693
694public:
695 SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
696 : OSTargetInfo<Target>(Triple, Opts) {
697 if (this->PointerWidth == 64) {
698 this->WCharType = this->WIntType = this->SignedInt;
699 } else {
700 this->WCharType = this->WIntType = this->SignedLong;
701 }
702 switch (Triple.getArch()) {
703 default:
704 break;
705 case llvm::Triple::x86:
706 case llvm::Triple::x86_64:
707 this->HasFloat128 = true;
708 break;
709 }
710 }
711};
712
713// AIX Target
714template <typename Target>
715class AIXTargetInfo : public OSTargetInfo<Target> {
716protected:
717 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
718 MacroBuilder &Builder) const override {
719 DefineStd(Builder, "unix", Opts);
720 Builder.defineMacro("_IBMR2");
721 Builder.defineMacro("_POWER");
722 Builder.defineMacro("__THW_BIG_ENDIAN__");
723
724 Builder.defineMacro("_AIX");
725 Builder.defineMacro("__TOS_AIX__");
726 Builder.defineMacro("__HOS_AIX__");
727
728 if (Opts.C11) {
729 Builder.defineMacro("__STDC_NO_ATOMICS__");
730 Builder.defineMacro("__STDC_NO_THREADS__");
731 }
732
733 if (Opts.EnableAIXExtendedAltivecABI)
734 Builder.defineMacro("__EXTABI__");
735
736 VersionTuple OsVersion = Triple.getOSVersion();
737
738 // Define AIX OS-Version Macros.
739 // Includes logic for legacy versions of AIX; no specific intent to support.
740 if (OsVersion >= VersionTuple(3, 2))
741 Builder.defineMacro("_AIX32");
742 if (OsVersion >= VersionTuple(4, 1))
743 Builder.defineMacro("_AIX41");
744 if (OsVersion >= VersionTuple(4, 3))
745 Builder.defineMacro("_AIX43");
746 if (OsVersion >= VersionTuple(5, 0))
747 Builder.defineMacro("_AIX50");
748 if (OsVersion >= VersionTuple(5, 1))
749 Builder.defineMacro("_AIX51");
750 if (OsVersion >= VersionTuple(5, 2))
751 Builder.defineMacro("_AIX52");
752 if (OsVersion >= VersionTuple(5, 3))
753 Builder.defineMacro("_AIX53");
754 if (OsVersion >= VersionTuple(6, 1))
755 Builder.defineMacro("_AIX61");
756 if (OsVersion >= VersionTuple(7, 1))
757 Builder.defineMacro("_AIX71");
758 if (OsVersion >= VersionTuple(7, 2))
759 Builder.defineMacro("_AIX72");
760 if (OsVersion >= VersionTuple(7, 3))
761 Builder.defineMacro("_AIX73");
762
763 // FIXME: Do not define _LONG_LONG when -fno-long-long is specified.
764 Builder.defineMacro("_LONG_LONG");
765
766 if (Opts.POSIXThreads) {
767 Builder.defineMacro("_THREAD_SAFE");
768 }
769
770 if (this->PointerWidth == 64) {
771 Builder.defineMacro("__64BIT__");
772 }
773
774 // Define _WCHAR_T when it is a fundamental type
775 // (i.e., for C++ without -fno-wchar).
776 if (Opts.CPlusPlus && Opts.WChar) {
777 Builder.defineMacro("_WCHAR_T");
778 }
779 }
780
781public:
782 AIXTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
783 : OSTargetInfo<Target>(Triple, Opts) {
784 this->MCountName = "__mcount";
785 this->TheCXXABI.set(TargetCXXABI::XL);
786
787 if (this->PointerWidth == 64) {
788 this->WCharType = this->UnsignedInt;
789 } else {
790 this->WCharType = this->UnsignedShort;
791 }
792 this->UseZeroLengthBitfieldAlignment = true;
793 }
794
795 // AIX sets FLT_EVAL_METHOD to be 1.
799
800 bool defaultsToAIXPowerAlignment() const override { return true; }
801
802 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
803 return false;
804 }
805};
806
807// z/OS target
808template <typename Target>
809class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
810protected:
811 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
812 MacroBuilder &Builder) const override {
813 // FIXME: _LONG_LONG should not be defined under -std=c89.
814 Builder.defineMacro("_LONG_LONG");
815 Builder.defineMacro("__370__");
816 Builder.defineMacro("__BFP__");
817 // FIXME: __BOOL__ should not be defined under -std=c89.
818 Builder.defineMacro("__BOOL__");
819 Builder.defineMacro("__COMPILER_VER__", "0x50000000");
820 Builder.defineMacro("__LONGNAME__");
821 Builder.defineMacro("__MVS__");
822 Builder.defineMacro("__THW_370__");
823 Builder.defineMacro("__THW_BIG_ENDIAN__");
824 Builder.defineMacro("__TOS_390__");
825 Builder.defineMacro("__TOS_MVS__");
826 Builder.defineMacro("__XPLINK__");
827
828 if (this->PointerWidth == 64)
829 Builder.defineMacro("__64BIT__");
830
831 if (Opts.CPlusPlus && Opts.WChar) {
832 // Macro __wchar_t is defined so that the wchar_t data
833 // type is not declared as a typedef in system headers.
834 Builder.defineMacro("__wchar_t");
835 }
836
837 this->PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
838 }
839
840public:
841 ZOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
842 : OSTargetInfo<Target>(Triple, Opts) {
843 this->WCharType = TargetInfo::UnsignedInt;
844 this->MaxAlignedAttribute = 128;
845 this->UseBitFieldTypeAlignment = false;
846 this->UseZeroLengthBitfieldAlignment = true;
847 this->UseLeadingZeroLengthBitfield = false;
848 this->ZeroLengthBitfieldBoundary = 32;
849 this->TheCXXABI.set(TargetCXXABI::XL);
850 }
851
852 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
853 return false;
854 }
855};
856
857// UEFI target
858template <typename Target>
859class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
860protected:
861 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
862 MacroBuilder &Builder) const override {
863 Builder.defineMacro("__UEFI__");
864 }
865
866public:
867 UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
868 : OSTargetInfo<Target>(Triple, Opts) {
869 this->WCharType = TargetInfo::UnsignedShort;
870 this->WIntType = TargetInfo::UnsignedShort;
871 this->UseMicrosoftManglingForC = true;
872 }
873};
874
875void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
876 MacroBuilder &Builder);
877
878// Windows target
879template <typename Target>
880class LLVM_LIBRARY_VISIBILITY WindowsTargetInfo : public OSTargetInfo<Target> {
881protected:
882 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
883 MacroBuilder &Builder) const override {
884 addWindowsDefines(Triple, Opts, Builder);
885 }
886
887public:
888 WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
889 : OSTargetInfo<Target>(Triple, Opts) {
890 this->WCharType = TargetInfo::UnsignedShort;
891 this->WIntType = TargetInfo::UnsignedShort;
892 this->UseMicrosoftManglingForC = true;
893 }
894};
895
896void getFuchsiaDefines(MacroBuilder &Builder, const LangOptions &Opts,
897 const llvm::Triple &Triple);
898
899// Fuchsia Target
900template <typename Target>
901class LLVM_LIBRARY_VISIBILITY FuchsiaTargetInfo : public OSTargetInfo<Target> {
902protected:
903 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
904 MacroBuilder &Builder) const override {
905 getFuchsiaDefines(Builder, Opts, Triple);
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// WASIp1 target
947template <typename Target>
948class LLVM_LIBRARY_VISIBILITY WASIP1TargetInfo
949 : public WebAssemblyOSTargetInfo<Target> {
950 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
951 MacroBuilder &Builder) const final {
953 Builder.defineMacro("__wasi__");
954 Builder.defineMacro("__wasip1__");
955 }
956
957public:
959};
960
961// WASIp2 target
962template <typename Target>
963class LLVM_LIBRARY_VISIBILITY WASIP2TargetInfo
964 : public WebAssemblyOSTargetInfo<Target> {
965 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
966 MacroBuilder &Builder) const final {
968 Builder.defineMacro("__wasi__");
969 Builder.defineMacro("__wasip2__");
970 }
971
972public:
974};
975
976// WASIp3 target
977template <typename Target>
978class LLVM_LIBRARY_VISIBILITY WASIP3TargetInfo
979 : public WebAssemblyOSTargetInfo<Target> {
980 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
981 MacroBuilder &Builder) const final {
983 Builder.defineMacro("__wasi__");
984 Builder.defineMacro("__wasip3__");
985 }
986
987public:
989};
990
991// WALI target
992template <typename Target>
993class LLVM_LIBRARY_VISIBILITY WALITargetInfo
994 : public WebAssemblyOSTargetInfo<Target> {
995 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
996 MacroBuilder &Builder) const final {
998 // Linux defines; list based off of gcc output
999 DefineStd(Builder, "unix", Opts);
1000 DefineStd(Builder, "linux", Opts);
1001 Builder.defineMacro("__wali__");
1002 }
1003
1004public:
1006};
1007
1008// Emscripten target
1009template <typename Target>
1010class LLVM_LIBRARY_VISIBILITY EmscriptenTargetInfo
1011 : public WebAssemblyOSTargetInfo<Target> {
1012 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
1013 MacroBuilder &Builder) const final {
1014 WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
1015 DefineStd(Builder, "unix", Opts);
1016 Builder.defineMacro("__EMSCRIPTEN__");
1017 if (Opts.POSIXThreads)
1018 Builder.defineMacro("__EMSCRIPTEN_PTHREADS__");
1019 }
1020
1021public:
1022 explicit EmscriptenTargetInfo(const llvm::Triple &Triple,
1023 const TargetOptions &Opts)
1024 : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {
1025 // Keeping the alignment of long double to 8 bytes even though its size is
1026 // 16 bytes allows emscripten to have an 8-byte-aligned max_align_t which
1027 // in turn gives is a 8-byte aligned malloc.
1028 // Emscripten's ABI is unstable and we may change this back to 128 to match
1029 // the WebAssembly default in the future.
1030 this->LongDoubleAlign = 64;
1031 this->Float128Align = 64;
1032 }
1033};
1034
1035// OHOS target
1036template <typename Target>
1037class LLVM_LIBRARY_VISIBILITY OHOSTargetInfo : public OSTargetInfo<Target> {
1038protected:
1039 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
1040 MacroBuilder &Builder) const override {
1041 // Linux defines; list based off of gcc output
1042 DefineStd(Builder, "unix", Opts);
1043
1044 // Generic OHOS target defines
1045 if (Triple.isOHOSFamily()) {
1046 Builder.defineMacro("__OHOS_FAMILY__", "1");
1047
1048 auto Version = Triple.getEnvironmentVersion();
1049 this->PlatformName = "ohos";
1050 this->PlatformMinVersion = Version;
1051 Builder.defineMacro("__OHOS_Major__", Twine(Version.getMajor()));
1052 if (auto Minor = Version.getMinor())
1053 Builder.defineMacro("__OHOS_Minor__", Twine(*Minor));
1054 if (auto Subminor = Version.getSubminor())
1055 Builder.defineMacro("__OHOS_Micro__", Twine(*Subminor));
1056 }
1057
1058 if (Triple.isOpenHOS())
1059 Builder.defineMacro("__OHOS__");
1060
1061 if (Triple.isOSLinux()) {
1062 DefineStd(Builder, "linux", Opts);
1063 } else if (Triple.isOSLiteOS()) {
1064 Builder.defineMacro("__LITEOS__");
1065 }
1066
1067 if (Opts.POSIXThreads)
1068 Builder.defineMacro("_REENTRANT");
1069 if (Opts.CPlusPlus)
1070 Builder.defineMacro("_GNU_SOURCE");
1071 if (this->HasFloat128)
1072 Builder.defineMacro("__FLOAT128__");
1073 }
1074
1075public:
1076 OHOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
1077 : OSTargetInfo<Target>(Triple, Opts) {
1078 this->WIntType = TargetInfo::UnsignedInt;
1079
1080 switch (Triple.getArch()) {
1081 default:
1082 break;
1083 case llvm::Triple::x86:
1084 case llvm::Triple::x86_64:
1085 this->HasFloat128 = true;
1086 break;
1087 }
1088 }
1089
1090 const char *getStaticInitSectionSpecifier() const override {
1091 return ".text.startup";
1092 }
1093};
1094
1095// QURT Target
1096template <typename Target>
1097class LLVM_LIBRARY_VISIBILITY QURTTargetInfo : public OSTargetInfo<Target> {
1098protected:
1099 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
1100 MacroBuilder &Builder) const override {
1101 Builder.defineMacro("__qurt__");
1102 if (Opts.CPlusPlus)
1103 Builder.defineMacro("_GNU_SOURCE");
1104 }
1105
1106public:
1108};
1109
1110// H2 Target
1111template <typename Target>
1112class LLVM_LIBRARY_VISIBILITY H2TargetInfo : public OSTargetInfo<Target> {
1113protected:
1114 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
1115 MacroBuilder &Builder) const override {
1116 Builder.defineMacro("__h2__");
1117 if (Opts.CPlusPlus)
1118 Builder.defineMacro("_GNU_SOURCE");
1119 }
1120
1121public:
1123};
1124
1125// SerenityOS target
1126template <typename Target>
1127class LLVM_LIBRARY_VISIBILITY SerenityTargetInfo : public OSTargetInfo<Target> {
1128protected:
1129 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
1130 MacroBuilder &Builder) const override {
1131 Builder.defineMacro("__serenity__");
1132 DefineStd(Builder, "unix", Opts);
1133 }
1134
1135public:
1136 SerenityTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
1137 : OSTargetInfo<Target>(Triple, Opts) {
1138 this->WIntType = TargetInfo::UnsignedInt;
1139 }
1140};
1141
1142} // namespace targets
1143} // namespace clang
1144#endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
static StringRef getTriple(const Command &Job)
#define FREEBSD_CC_VERSION
Definition OSTargets.h:204
FPEvalMethodKind
Possible float expression evaluation method choices.
@ FEM_Double
Use the type double for fp arithmetic.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
virtual IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const
Return the smallest integer type with at least the specified width.
Options for controlling the target.
AIXTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:782
bool defaultsToAIXPowerAlignment() const override
Definition OSTargets.h:800
LangOptions::FPEvalMethodKind getFPEvalMethod() const override
Definition OSTargets.h:796
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition OSTargets.h:802
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:717
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
VTableUniquenessKind getVTableUniqueness() const override
Apple Mach-O can autohide a vague-linkage vtable so that each image gets its own copy,...
Definition OSTargets.h:69
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition OSTargets.h:164
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:78
unsigned getExnObjectAlignment() const override
Definition OSTargets.h:122
TargetInfo::IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const final
Definition OSTargets.h:155
DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:85
const char * getStaticInitSectionSpecifier() const override
Definition OSTargets.h:117
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:174
DragonFlyBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:190
EmscriptenTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:1022
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:211
FreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:242
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:903
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:1114
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:295
HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:305
HurdTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:342
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:326
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:274
LinuxTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:391
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:359
bool setABI(const std::string &Name) override
Definition OSTargets.h:421
const char * getStaticInitSectionSpecifier() const override
Definition OSTargets.h:415
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:430
ManagarmTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:443
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:460
NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:472
const char * getStaticInitSectionSpecifier() const override
Definition OSTargets.h:1090
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:1039
OHOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:1076
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:506
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:490
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:538
PS3PPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:549
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:607
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:623
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition OSTargets.h:598
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:564
TargetInfo::CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Definition OSTargets.h:594
PSOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:576
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:1099
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:639
RTEMSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:649
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:1129
SerenityTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:1136
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:674
SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:695
UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:867
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:861
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:888
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:882
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition OSTargets.h:852
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:811
ZOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:841
void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts, MacroBuilder &Builder)
void getFuchsiaDefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple)
void getAppleMachODefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple)
Definition OSTargets.cpp:23
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:57
The JSON file list parser is used to communicate input to InstallAPI.
VTableUniquenessKind
A target's ABI policy for whether a class's vtable can be assumed to have a unique address program-wi...
@ UniqueIfStrongLinkage
A vtable with strong linkage (e.g., a class with a key function) is unique, but a vague-linkage (weak...
if(T->getSizeExpr()) TRY_TO(TraverseStmt(const_cast< Expr * >(T -> getSizeExpr())))
CallingConv
CallingConv - Specifies the calling convention that a function uses.
Definition Specifiers.h:279
IntType
===-— Target Data Type Query Methods ----------------------------—===//
Definition TargetInfo.h:147