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