clang 22.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("E-m:e-p:32:32-Fi64-i64:64-i128:128-n32:64");
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 Builder.defineMacro("_XOPEN_SOURCE", "600");
674 if (Opts.CPlusPlus) {
675 Builder.defineMacro("__C99FEATURES__");
676 Builder.defineMacro("_FILE_OFFSET_BITS", "64");
677 }
678 // GCC restricts the next two to C++.
679 Builder.defineMacro("_LARGEFILE_SOURCE");
680 Builder.defineMacro("_LARGEFILE64_SOURCE");
681 Builder.defineMacro("__EXTENSIONS__");
682 if (Opts.POSIXThreads)
683 Builder.defineMacro("_REENTRANT");
684 if (this->HasFloat128)
685 Builder.defineMacro("__FLOAT128__");
686 }
687
688public:
689 SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
690 : OSTargetInfo<Target>(Triple, Opts) {
691 if (this->PointerWidth == 64) {
692 this->WCharType = this->WIntType = this->SignedInt;
693 } else {
694 this->WCharType = this->WIntType = this->SignedLong;
695 }
696 switch (Triple.getArch()) {
697 default:
698 break;
699 case llvm::Triple::x86:
700 case llvm::Triple::x86_64:
701 this->HasFloat128 = true;
702 break;
703 }
704 }
705};
706
707// AIX Target
708template <typename Target>
709class AIXTargetInfo : public OSTargetInfo<Target> {
710protected:
711 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
712 MacroBuilder &Builder) const override {
713 DefineStd(Builder, "unix", Opts);
714 Builder.defineMacro("_IBMR2");
715 Builder.defineMacro("_POWER");
716 Builder.defineMacro("__THW_BIG_ENDIAN__");
717
718 Builder.defineMacro("_AIX");
719 Builder.defineMacro("__TOS_AIX__");
720 Builder.defineMacro("__HOS_AIX__");
721
722 if (Opts.C11) {
723 Builder.defineMacro("__STDC_NO_ATOMICS__");
724 Builder.defineMacro("__STDC_NO_THREADS__");
725 }
726
727 if (Opts.EnableAIXExtendedAltivecABI)
728 Builder.defineMacro("__EXTABI__");
729
730 VersionTuple OsVersion = Triple.getOSVersion();
731
732 // Define AIX OS-Version Macros.
733 // Includes logic for legacy versions of AIX; no specific intent to support.
734 if (OsVersion >= VersionTuple(3, 2))
735 Builder.defineMacro("_AIX32");
736 if (OsVersion >= VersionTuple(4, 1))
737 Builder.defineMacro("_AIX41");
738 if (OsVersion >= VersionTuple(4, 3))
739 Builder.defineMacro("_AIX43");
740 if (OsVersion >= VersionTuple(5, 0))
741 Builder.defineMacro("_AIX50");
742 if (OsVersion >= VersionTuple(5, 1))
743 Builder.defineMacro("_AIX51");
744 if (OsVersion >= VersionTuple(5, 2))
745 Builder.defineMacro("_AIX52");
746 if (OsVersion >= VersionTuple(5, 3))
747 Builder.defineMacro("_AIX53");
748 if (OsVersion >= VersionTuple(6, 1))
749 Builder.defineMacro("_AIX61");
750 if (OsVersion >= VersionTuple(7, 1))
751 Builder.defineMacro("_AIX71");
752 if (OsVersion >= VersionTuple(7, 2))
753 Builder.defineMacro("_AIX72");
754 if (OsVersion >= VersionTuple(7, 3))
755 Builder.defineMacro("_AIX73");
756
757 // FIXME: Do not define _LONG_LONG when -fno-long-long is specified.
758 Builder.defineMacro("_LONG_LONG");
759
760 if (Opts.POSIXThreads) {
761 Builder.defineMacro("_THREAD_SAFE");
762 }
763
764 if (this->PointerWidth == 64) {
765 Builder.defineMacro("__64BIT__");
766 }
767
768 // Define _WCHAR_T when it is a fundamental type
769 // (i.e., for C++ without -fno-wchar).
770 if (Opts.CPlusPlus && Opts.WChar) {
771 Builder.defineMacro("_WCHAR_T");
772 }
773 }
774
775public:
776 AIXTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
777 : OSTargetInfo<Target>(Triple, Opts) {
778 this->MCountName = "__mcount";
779 this->TheCXXABI.set(TargetCXXABI::XL);
780
781 if (this->PointerWidth == 64) {
782 this->WCharType = this->UnsignedInt;
783 } else {
784 this->WCharType = this->UnsignedShort;
785 }
786 this->UseZeroLengthBitfieldAlignment = true;
787 }
788
789 // AIX sets FLT_EVAL_METHOD to be 1.
793
794 bool defaultsToAIXPowerAlignment() const override { return true; }
795
796 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
797 return false;
798 }
799};
800
801// z/OS target
802template <typename Target>
803class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
804protected:
805 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
806 MacroBuilder &Builder) const override {
807 // FIXME: _LONG_LONG should not be defined under -std=c89.
808 Builder.defineMacro("_LONG_LONG");
809 Builder.defineMacro("__370__");
810 Builder.defineMacro("__BFP__");
811 // FIXME: __BOOL__ should not be defined under -std=c89.
812 Builder.defineMacro("__BOOL__");
813 Builder.defineMacro("__COMPILER_VER__", "0x50000000");
814 Builder.defineMacro("__LONGNAME__");
815 Builder.defineMacro("__MVS__");
816 Builder.defineMacro("__THW_370__");
817 Builder.defineMacro("__THW_BIG_ENDIAN__");
818 Builder.defineMacro("__TOS_390__");
819 Builder.defineMacro("__TOS_MVS__");
820 Builder.defineMacro("__XPLINK__");
821
822 if (this->PointerWidth == 64)
823 Builder.defineMacro("__64BIT__");
824
825 if (Opts.CPlusPlus && Opts.WChar) {
826 // Macro __wchar_t is defined so that the wchar_t data
827 // type is not declared as a typedef in system headers.
828 Builder.defineMacro("__wchar_t");
829 }
830
831 this->PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
832 }
833
834public:
835 ZOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
836 : OSTargetInfo<Target>(Triple, Opts) {
837 this->WCharType = TargetInfo::UnsignedInt;
838 this->MaxAlignedAttribute = 128;
839 this->UseBitFieldTypeAlignment = false;
840 this->UseZeroLengthBitfieldAlignment = true;
841 this->UseLeadingZeroLengthBitfield = false;
842 this->ZeroLengthBitfieldBoundary = 32;
843 this->TheCXXABI.set(TargetCXXABI::XL);
844 }
845
846 bool areDefaultedSMFStillPOD(const LangOptions &) const override {
847 return false;
848 }
849};
850
851// UEFI target
852template <typename Target>
853class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
854protected:
855 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
856 MacroBuilder &Builder) const override {
857 Builder.defineMacro("__UEFI__");
858 }
859
860public:
861 UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
862 : OSTargetInfo<Target>(Triple, Opts) {
863 this->WCharType = TargetInfo::UnsignedShort;
864 this->WIntType = TargetInfo::UnsignedShort;
865 this->UseMicrosoftManglingForC = true;
866 }
867};
868
869void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
870 MacroBuilder &Builder);
871
872// Windows target
873template <typename Target>
874class LLVM_LIBRARY_VISIBILITY WindowsTargetInfo : public OSTargetInfo<Target> {
875protected:
876 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
877 MacroBuilder &Builder) const override {
878 addWindowsDefines(Triple, Opts, Builder);
879 }
880
881public:
882 WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
883 : OSTargetInfo<Target>(Triple, Opts) {
884 this->WCharType = TargetInfo::UnsignedShort;
885 this->WIntType = TargetInfo::UnsignedShort;
886 this->UseMicrosoftManglingForC = true;
887 }
888};
889
890// Fuchsia Target
891template <typename Target>
892class LLVM_LIBRARY_VISIBILITY FuchsiaTargetInfo : public OSTargetInfo<Target> {
893protected:
894 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
895 MacroBuilder &Builder) const override {
896 Builder.defineMacro("__Fuchsia__");
897 if (Opts.POSIXThreads)
898 Builder.defineMacro("_REENTRANT");
899 // Required by the libc++ locale support.
900 if (Opts.CPlusPlus)
901 Builder.defineMacro("_GNU_SOURCE");
902 Builder.defineMacro("__Fuchsia_API_level__", Twine(Opts.FuchsiaAPILevel));
903 this->PlatformName = "fuchsia";
904 this->PlatformMinVersion = VersionTuple(Opts.FuchsiaAPILevel);
905 }
906
907public:
908 FuchsiaTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
909 : OSTargetInfo<Target>(Triple, Opts) {
910 this->WIntType = TargetInfo::UnsignedInt;
911 this->MCountName = "__mcount";
912 this->TheCXXABI.set(TargetCXXABI::Fuchsia);
913 }
914};
915
916// WebAssembly target
917template <typename Target>
918class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
919 : public OSTargetInfo<Target> {
920protected:
921 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
922 MacroBuilder &Builder) const override {
923 // A common platform macro.
924 if (Opts.POSIXThreads)
925 Builder.defineMacro("_REENTRANT");
926 // Follow g++ convention and predefine _GNU_SOURCE for C++.
927 if (Opts.CPlusPlus)
928 Builder.defineMacro("_GNU_SOURCE");
929 // Indicate that we have __float128.
930 Builder.defineMacro("__FLOAT128__");
931 }
932
933public:
934 explicit WebAssemblyOSTargetInfo(const llvm::Triple &Triple,
935 const TargetOptions &Opts)
936 : OSTargetInfo<Target>(Triple, Opts) {
937 this->MCountName = "__mcount";
938 this->TheCXXABI.set(TargetCXXABI::WebAssembly);
939 this->HasFloat128 = true;
940 }
941};
942
943// WASI target
944template <typename Target>
945class LLVM_LIBRARY_VISIBILITY WASITargetInfo
946 : public WebAssemblyOSTargetInfo<Target> {
947 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
948 MacroBuilder &Builder) const final {
950 Builder.defineMacro("__wasi__");
951 }
952
953public:
955};
956
957// WALI target
958template <typename Target>
959class LLVM_LIBRARY_VISIBILITY WALITargetInfo
960 : public WebAssemblyOSTargetInfo<Target> {
961 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
962 MacroBuilder &Builder) const final {
964 // Linux defines; list based off of gcc output
965 DefineStd(Builder, "unix", Opts);
966 DefineStd(Builder, "linux", Opts);
967 Builder.defineMacro("__wali__");
968 }
969
970public:
972};
973
974// Emscripten target
975template <typename Target>
976class LLVM_LIBRARY_VISIBILITY EmscriptenTargetInfo
977 : public WebAssemblyOSTargetInfo<Target> {
978 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
979 MacroBuilder &Builder) const final {
981 DefineStd(Builder, "unix", Opts);
982 Builder.defineMacro("__EMSCRIPTEN__");
983 if (Opts.POSIXThreads)
984 Builder.defineMacro("__EMSCRIPTEN_PTHREADS__");
985 }
986
987public:
988 explicit EmscriptenTargetInfo(const llvm::Triple &Triple,
989 const TargetOptions &Opts)
990 : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {
991 // Keeping the alignment of long double to 8 bytes even though its size is
992 // 16 bytes allows emscripten to have an 8-byte-aligned max_align_t which
993 // in turn gives is a 8-byte aligned malloc.
994 // Emscripten's ABI is unstable and we may change this back to 128 to match
995 // the WebAssembly default in the future.
996 this->LongDoubleAlign = 64;
997 this->Float128Align = 64;
998 }
999};
1000
1001// OHOS target
1002template <typename Target>
1003class LLVM_LIBRARY_VISIBILITY OHOSTargetInfo : public OSTargetInfo<Target> {
1004protected:
1005 void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
1006 MacroBuilder &Builder) const override {
1007 // Linux defines; list based off of gcc output
1008 DefineStd(Builder, "unix", Opts);
1009
1010 // Generic OHOS target defines
1011 if (Triple.isOHOSFamily()) {
1012 Builder.defineMacro("__OHOS_FAMILY__", "1");
1013
1014 auto Version = Triple.getEnvironmentVersion();
1015 this->PlatformName = "ohos";
1016 this->PlatformMinVersion = Version;
1017 Builder.defineMacro("__OHOS_Major__", Twine(Version.getMajor()));
1018 if (auto Minor = Version.getMinor())
1019 Builder.defineMacro("__OHOS_Minor__", Twine(*Minor));
1020 if (auto Subminor = Version.getSubminor())
1021 Builder.defineMacro("__OHOS_Micro__", Twine(*Subminor));
1022 }
1023
1024 if (Triple.isOpenHOS())
1025 Builder.defineMacro("__OHOS__");
1026
1027 if (Triple.isOSLinux()) {
1028 DefineStd(Builder, "linux", Opts);
1029 } else if (Triple.isOSLiteOS()) {
1030 Builder.defineMacro("__LITEOS__");
1031 }
1032
1033 if (Opts.POSIXThreads)
1034 Builder.defineMacro("_REENTRANT");
1035 if (Opts.CPlusPlus)
1036 Builder.defineMacro("_GNU_SOURCE");
1037 if (this->HasFloat128)
1038 Builder.defineMacro("__FLOAT128__");
1039 }
1040
1041public:
1042 OHOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
1043 : OSTargetInfo<Target>(Triple, Opts) {
1044 this->WIntType = TargetInfo::UnsignedInt;
1045
1046 switch (Triple.getArch()) {
1047 default:
1048 break;
1049 case llvm::Triple::x86:
1050 case llvm::Triple::x86_64:
1051 this->HasFloat128 = true;
1052 break;
1053 }
1054 }
1055
1056 const char *getStaticInitSectionSpecifier() const override {
1057 return ".text.startup";
1058 }
1059};
1060
1061} // namespace targets
1062} // namespace clang
1063#endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
#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:776
bool defaultsToAIXPowerAlignment() const override
Definition OSTargets.h:794
LangOptions::FPEvalMethodKind getFPEvalMethod() const override
Definition OSTargets.h:790
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition OSTargets.h:796
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:711
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:988
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:894
FuchsiaTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:908
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:1056
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:1005
OHOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:1042
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: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:667
SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:689
UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:861
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:855
WebAssemblyOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:934
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:921
WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:882
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:876
bool areDefaultedSMFStillPOD(const LangOptions &) const override
Definition OSTargets.h:846
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
Definition OSTargets.h:805
ZOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Definition OSTargets.h:835
void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts, MacroBuilder &Builder)
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())))
const FunctionProtoType * T
CallingConv
CallingConv - Specifies the calling convention that a function uses.
Definition Specifiers.h:278
IntType
===-— Target Data Type Query Methods ----------------------------—===//
Definition TargetInfo.h:146