10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
11 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
20 namespace toolchains {
31 virtual void anchor();
34 void AddMachOArch(
const llvm::opt::ArgList &Args,
35 llvm::opt::ArgStringList &CmdArgs)
const;
45 llvm::sys::WindowsEncodingMethod ResponseEncoding = llvm::sys::WEM_UTF8,
46 const char *ResponseFlag =
"@")
47 :
Tool(Name, ShortName, TC, ResponseSupport, ResponseEncoding,
54 :
MachOTool(
"darwin::Assembler",
"assembler", TC) {}
60 const llvm::opt::ArgList &TCArgs,
61 const char *LinkingOutput)
const override;
66 void AddLinkArgs(
Compilation &C,
const llvm::opt::ArgList &Args,
67 llvm::opt::ArgStringList &CmdArgs,
72 :
MachOTool(
"darwin::Linker",
"linker", TC, RF_FileList,
73 llvm::sys::WEM_UTF8,
"-filelist") {}
80 const llvm::opt::ArgList &TCArgs,
81 const char *LinkingOutput)
const override;
92 const llvm::opt::ArgList &TCArgs,
93 const char *LinkingOutput)
const override;
99 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
106 const llvm::opt::ArgList &TCArgs,
107 const char *LinkingOutput)
const override;
113 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
119 const llvm::opt::ArgList &TCArgs,
120 const char *LinkingOutput)
const override;
125 namespace toolchains {
129 Tool *buildAssembler()
const override;
130 Tool *buildLinker()
const override;
134 mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
135 mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
136 mutable std::unique_ptr<tools::darwin::VerifyDebug> VerifyDebug;
140 const llvm::opt::ArgList &Args);
148 StringRef getMachOArchName(
const llvm::opt::ArgList &Args)
const;
152 llvm::opt::ArgStringList &CmdArgs)
const {}
155 virtual void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
156 llvm::opt::ArgStringList &CmdArgs)
const;
157 virtual void AddFuzzerLinkArgs(
const llvm::opt::ArgList &Args,
158 llvm::opt::ArgStringList &CmdArgs)
const;
161 llvm::opt::ArgStringList &CmdArgs)
const {
165 llvm::opt::ArgStringList &CmdArgs)
const {}
174 void AddLinkRuntimeLib(
const llvm::opt::ArgList &Args,
175 llvm::opt::ArgStringList &CmdArgs,
176 StringRef DarwinLibName,
bool AlwaysLink =
false,
177 bool IsEmbedded =
false,
bool AddRPath =
false)
const;
182 llvm::opt::ArgStringList &CmdArgs)
const override {
190 types::ID LookupTypeForExtension(StringRef Ext)
const override;
192 bool HasNativeLLVMSupport()
const override;
194 llvm::opt::DerivedArgList *
195 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
214 return getTriple().getArch() != llvm::Triple::x86;
219 bool IsUnwindTablesDefault(
const llvm::opt::ArgList &Args)
const override;
225 bool isPICDefault()
const override;
226 bool isPIEDefault()
const override;
227 bool isPICDefaultForced()
const override;
229 bool SupportsProfiling()
const override;
233 bool UseDwarfDebugFlags()
const override;
270 void AddDeploymentTarget(llvm::opt::DerivedArgList &Args)
const;
274 const llvm::opt::ArgList &Args);
277 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
283 void addMinVersionArgs(
const llvm::opt::ArgList &Args,
284 llvm::opt::ArgStringList &CmdArgs)
const override;
286 void addStartObjectFileArgs(
const llvm::opt::ArgList &Args,
287 llvm::opt::ArgStringList &CmdArgs)
const override;
290 return (!(isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) &&
294 void addProfileRTLibs(
const llvm::opt::ArgList &Args,
295 llvm::opt::ArgStringList &CmdArgs)
const override;
305 unsigned Micro)
const {
308 if (TargetInitialized && TargetPlatform == Platform &&
312 assert(!TargetInitialized &&
"Target already initialized!");
313 TargetInitialized =
true;
314 TargetPlatform = Platform;
319 assert(TargetInitialized &&
"Target not initialized!");
320 return TargetPlatform == IPhoneOS || TargetPlatform == TvOS;
324 assert(TargetInitialized &&
"Target not initialized!");
325 return TargetPlatform == IPhoneOSSimulator ||
326 TargetPlatform == TvOSSimulator;
330 assert(TargetInitialized &&
"Target not initialized!");
331 return isTargetIPhoneOS() || isTargetIOSSimulator();
335 assert(TargetInitialized &&
"Target not initialized!");
336 return TargetPlatform == TvOS;
340 assert(TargetInitialized &&
"Target not initialized!");
341 return TargetPlatform == TvOSSimulator;
345 assert(TargetInitialized &&
"Target not initialized!");
346 return TargetPlatform == TvOS || TargetPlatform == TvOSSimulator;
350 assert(TargetInitialized &&
"Target not initialized!");
351 return TargetPlatform == WatchOS;
355 assert(TargetInitialized &&
"Target not initialized!");
356 return TargetPlatform == WatchOSSimulator;
360 assert(TargetInitialized &&
"Target not initialized!");
361 return TargetPlatform == WatchOS || TargetPlatform == WatchOSSimulator;
365 assert(TargetInitialized &&
"Target not initialized!");
366 return TargetPlatform == MacOS;
372 assert(TargetInitialized &&
"Target not initialized!");
373 return TargetVersion;
377 unsigned V2 = 0)
const {
378 assert(isTargetIOSBased() &&
"Unexpected call for non iOS target!");
383 assert(isTargetMacOS() &&
"Unexpected call for non OS X target!");
390 bool isAlignedAllocationUnavailable()
const;
392 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
393 llvm::opt::ArgStringList &CC1Args,
396 StringRef getPlatformFamily()
const;
397 static StringRef getSDKName(StringRef isysroot);
398 StringRef getOSLibraryNameSuffix()
const;
410 llvm::opt::DerivedArgList *
411 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
414 CXXStdlibType GetDefaultCXXStdlibType()
const override;
415 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
416 bool hasBlocksRuntime()
const override;
418 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
419 llvm::opt::ArgStringList &CC1Args)
const override;
425 return !(isTargetMacOS() && isMacosxVersionLT(10, 6));
431 if (isTargetIOSBased() || isTargetWatchOSBased())
433 else if (isTargetMacOS() && !isMacosxVersionLT(10, 6))
435 else if (isTargetMacOS() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
441 bool SupportsObjCGC()
const override;
443 void CheckObjCARC()
const override;
445 bool UseSjLjExceptions(
const llvm::opt::ArgList &Args)
const override;
447 bool SupportsEmbeddedBitcode()
const override;
451 void printVerboseInfo(raw_ostream &OS)
const override;
458 const llvm::opt::ArgList &Args);
463 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
465 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
466 llvm::opt::ArgStringList &CmdArgs)
const override;
468 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
469 llvm::opt::ArgStringList &CmdArgs)
const override;
471 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
472 llvm::opt::ArgStringList &CmdArgs)
const override;
474 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
476 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
477 llvm::opt::ArgStringList &CmdArgs)
const override;
479 unsigned GetDefaultDwarfVersion()
const override;
484 return llvm::DebuggerKind::LLDB;
490 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
491 llvm::opt::ArgStringList &CmdArgs,
492 StringRef Sanitizer)
const;
499 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
Represents a version number in the form major[.minor[.subminor[.build]]].
A class to find a viable CUDA installation.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
The basic abstraction for the target Objective-C runtime.
Compilation - A set of tasks to perform for a single driver invocation.