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