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;
43 const char *Name,
const char *ShortName,
const ToolChain &TC,
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 {}
158 virtual void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
159 llvm::opt::ArgStringList &CmdArgs)
const;
162 llvm::opt::ArgStringList &CmdArgs)
const {
166 llvm::opt::ArgStringList &CmdArgs)
const {}
178 RLO_AlwaysLink = 1 << 0,
181 RLO_IsEmbedded = 1 << 1,
184 RLO_AddRPath = 1 << 2,
187 RLO_FirstLink = 1 << 3,
191 void AddLinkRuntimeLib(
const llvm::opt::ArgList &Args,
192 llvm::opt::ArgStringList &CmdArgs,
193 StringRef DarwinLibName,
199 llvm::opt::ArgStringList &CmdArgs)
const override {
207 types::ID LookupTypeForExtension(StringRef Ext)
const override;
209 bool HasNativeLLVMSupport()
const override;
211 llvm::opt::DerivedArgList *
212 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
231 return getTriple().getArch() != llvm::Triple::x86;
236 bool IsUnwindTablesDefault(
const llvm::opt::ArgList &Args)
const override;
242 bool isPICDefault()
const override;
243 bool isPIEDefault()
const override;
244 bool isPICDefaultForced()
const override;
246 bool SupportsProfiling()
const override;
248 bool UseDwarfDebugFlags()
const override;
250 llvm::ExceptionHandling
273 LastDarwinPlatform = WatchOS
289 void AddDeploymentTarget(llvm::opt::DerivedArgList &Args)
const;
293 const llvm::opt::ArgList &Args);
296 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
302 void addMinVersionArgs(
const llvm::opt::ArgList &Args,
303 llvm::opt::ArgStringList &CmdArgs)
const override;
305 void addStartObjectFileArgs(
const llvm::opt::ArgList &Args,
306 llvm::opt::ArgStringList &CmdArgs)
const override;
309 return (!(isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) &&
313 void addProfileRTLibs(
const llvm::opt::ArgList &Args,
314 llvm::opt::ArgStringList &CmdArgs)
const override;
324 unsigned Major,
unsigned Minor,
unsigned Micro)
const {
327 if (TargetInitialized && TargetPlatform == Platform &&
328 TargetEnvironment == Environment &&
332 assert(!TargetInitialized &&
"Target already initialized!");
333 TargetInitialized =
true;
334 TargetPlatform = Platform;
335 TargetEnvironment = Environment;
337 if (Environment == Simulator)
338 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::Simulator);
342 assert(TargetInitialized &&
"Target not initialized!");
343 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
344 TargetEnvironment == NativeEnvironment;
348 assert(TargetInitialized &&
"Target not initialized!");
349 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
350 TargetEnvironment == Simulator;
354 assert(TargetInitialized &&
"Target not initialized!");
355 return isTargetIPhoneOS() || isTargetIOSSimulator();
359 assert(TargetInitialized &&
"Target not initialized!");
360 return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment;
364 assert(TargetInitialized &&
"Target not initialized!");
365 return TargetPlatform == TvOS && TargetEnvironment == Simulator;
369 assert(TargetInitialized &&
"Target not initialized!");
370 return TargetPlatform == TvOS;
374 assert(TargetInitialized &&
"Target not initialized!");
375 return TargetPlatform == WatchOS && TargetEnvironment == NativeEnvironment;
379 assert(TargetInitialized &&
"Target not initialized!");
380 return TargetPlatform == WatchOS && TargetEnvironment == Simulator;
384 assert(TargetInitialized &&
"Target not initialized!");
385 return TargetPlatform == WatchOS;
389 assert(TargetInitialized &&
"Target not initialized!");
390 return TargetPlatform == MacOS;
396 assert(TargetInitialized &&
"Target not initialized!");
397 return TargetVersion;
401 unsigned V2 = 0)
const {
402 assert(isTargetIOSBased() &&
"Unexpected call for non iOS target!");
407 assert(isTargetMacOS() &&
"Unexpected call for non OS X target!");
414 bool isAlignedAllocationUnavailable()
const;
416 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
417 llvm::opt::ArgStringList &CC1Args,
420 StringRef getPlatformFamily()
const;
421 StringRef getOSLibraryNameSuffix()
const;
424 static StringRef getSDKName(StringRef isysroot);
435 llvm::opt::DerivedArgList *
436 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
440 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
441 bool hasBlocksRuntime()
const override;
443 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
444 llvm::opt::ArgStringList &CC1Args)
const override;
450 return !(isTargetMacOS() && isMacosxVersionLT(10, 6));
456 if (isTargetIOSBased() || isTargetWatchOSBased())
458 else if (isTargetMacOS() && !isMacosxVersionLT(10, 6))
460 else if (isTargetMacOS() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
466 void CheckObjCARC()
const override;
468 llvm::ExceptionHandling GetExceptionModel(
469 const llvm::opt::ArgList &Args)
const override;
471 bool SupportsEmbeddedBitcode()
const override;
475 void printVerboseInfo(raw_ostream &OS)
const override;
482 const llvm::opt::ArgList &Args);
487 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
489 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
490 llvm::opt::ArgStringList &CmdArgs)
const override;
492 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
493 llvm::opt::ArgStringList &CmdArgs)
const override;
495 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
496 llvm::opt::ArgStringList &CmdArgs)
const override;
498 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
500 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
501 llvm::opt::ArgStringList &CmdArgs)
const override;
503 unsigned GetDefaultDwarfVersion()
const override;
508 return llvm::DebuggerKind::LLDB;
514 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
515 llvm::opt::ArgStringList &CmdArgs,
517 bool shared =
true)
const;
524 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
Represents a version number in the form major[.minor[.subminor[.build]]].
DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterat...
A class to find a viable CUDA installation.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
const FunctionProtoType * T
Dataflow Directional Tag Classes.
The basic abstraction for the target Objective-C runtime.
Compilation - A set of tasks to perform for a single driver invocation.