15 #include "llvm/ADT/StringRef.h" 17 using namespace clang;
24 const llvm::Triple &Triple, StringRef &PlatformName,
25 VersionTuple &PlatformMinVersion) {
38 Builder.
defineMacro(
"__weak",
"__attribute__((objc_gc(weak)))");
48 if (Opts.POSIXThreads)
52 unsigned Maj, Min, Rev;
53 if (Triple.isMacOSX()) {
54 Triple.getMacOSXVersion(Maj, Min, Rev);
55 PlatformName =
"macos";
57 Triple.getOSVersion(Maj, Min, Rev);
58 PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
64 if (PlatformName ==
"win32") {
65 PlatformMinVersion = VersionTuple(Maj, Min, Rev);
71 assert(Maj < 100 && Min < 100 && Rev < 100 &&
"Invalid version!");
75 Str[1] =
'0' + (Min / 10);
76 Str[2] =
'0' + (Min % 10);
77 Str[3] =
'0' + (Rev / 10);
78 Str[4] =
'0' + (Rev % 10);
82 Str[0] =
'0' + (Maj / 10);
83 Str[1] =
'0' + (Maj % 10);
84 Str[2] =
'0' + (Min / 10);
85 Str[3] =
'0' + (Min % 10);
86 Str[4] =
'0' + (Rev / 10);
87 Str[5] =
'0' + (Rev % 10);
91 Builder.
defineMacro(
"__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__", Str);
93 Builder.
defineMacro(
"__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__",
96 }
else if (Triple.isWatchOS()) {
97 assert(Maj < 10 && Min < 100 && Rev < 100 &&
"Invalid version!");
100 Str[1] =
'0' + (Min / 10);
101 Str[2] =
'0' + (Min % 10);
102 Str[3] =
'0' + (Rev / 10);
103 Str[4] =
'0' + (Rev % 10);
105 Builder.
defineMacro(
"__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__", Str);
106 }
else if (Triple.isMacOSX()) {
111 assert(Maj < 100 && Min < 100 && Rev < 100 &&
"Invalid version!");
113 if (Maj < 10 || (Maj == 10 && Min < 10)) {
114 Str[0] =
'0' + (Maj / 10);
115 Str[1] =
'0' + (Maj % 10);
121 Str[0] =
'0' + (Maj / 10);
122 Str[1] =
'0' + (Maj % 10);
123 Str[2] =
'0' + (Min / 10);
124 Str[3] =
'0' + (Min % 10);
125 Str[4] =
'0' + (Rev / 10);
126 Str[5] =
'0' + (Rev % 10);
129 Builder.
defineMacro(
"__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__", Str);
133 if (Triple.isOSDarwin())
136 PlatformMinVersion = VersionTuple(Maj, Min, Rev);
Defines the clang::MacroBuilder utility class.
SanitizerSet Sanitize
Set of enabled sanitizers.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple, StringRef &PlatformName, VersionTuple &PlatformMinVersion)
Dataflow Directional Tag Classes.
bool has(SanitizerMask K) const
Check if a certain (single) sanitizer is enabled.
__DEVICE__ int min(int __a, int __b)
void defineMacro(const Twine &Name, const Twine &Value="1")
Append a #define line for macro of the form "\#define Name Value\n".