10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H 11 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H 22 namespace toolchains {
33 virtual void anchor();
36 void AddMachOArch(
const llvm::opt::ArgList &Args,
37 llvm::opt::ArgStringList &CmdArgs)
const;
45 const char *Name,
const char *ShortName,
const ToolChain &TC,
47 llvm::sys::WindowsEncodingMethod ResponseEncoding = llvm::sys::WEM_UTF8,
48 const char *ResponseFlag =
"@")
49 :
Tool(Name, ShortName, TC, ResponseSupport, ResponseEncoding,
56 :
MachOTool(
"darwin::Assembler",
"assembler", TC) {}
62 const llvm::opt::ArgList &TCArgs,
63 const char *LinkingOutput)
const override;
68 void AddLinkArgs(
Compilation &C,
const llvm::opt::ArgList &Args,
69 llvm::opt::ArgStringList &CmdArgs,
74 :
MachOTool(
"darwin::Linker",
"linker", TC, RF_FileList,
75 llvm::sys::WEM_UTF8,
"-filelist") {}
82 const llvm::opt::ArgList &TCArgs,
83 const char *LinkingOutput)
const override;
94 const llvm::opt::ArgList &TCArgs,
95 const char *LinkingOutput)
const override;
101 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
108 const llvm::opt::ArgList &TCArgs,
109 const char *LinkingOutput)
const override;
115 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
121 const llvm::opt::ArgList &TCArgs,
122 const char *LinkingOutput)
const override;
127 namespace toolchains {
131 Tool *buildAssembler()
const override;
132 Tool *buildLinker()
const override;
136 mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
137 mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
138 mutable std::unique_ptr<tools::darwin::VerifyDebug> VerifyDebug;
142 const llvm::opt::ArgList &Args);
150 StringRef getMachOArchName(
const llvm::opt::ArgList &Args)
const;
154 llvm::opt::ArgStringList &CmdArgs)
const {}
160 virtual void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
161 llvm::opt::ArgStringList &CmdArgs)
const;
164 llvm::opt::ArgStringList &CmdArgs)
const {
168 llvm::opt::ArgStringList &CmdArgs)
const {}
180 RLO_AlwaysLink = 1 << 0,
183 RLO_IsEmbedded = 1 << 1,
186 RLO_AddRPath = 1 << 2,
189 RLO_FirstLink = 1 << 3,
193 void AddLinkRuntimeLib(
const llvm::opt::ArgList &Args,
194 llvm::opt::ArgStringList &CmdArgs, StringRef Component,
196 bool IsShared =
false)
const;
201 llvm::opt::ArgStringList &CmdArgs)
const override {
209 types::ID LookupTypeForExtension(StringRef Ext)
const override;
211 bool HasNativeLLVMSupport()
const override;
213 llvm::opt::DerivedArgList *
214 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
233 return getTriple().getArch() != llvm::Triple::x86;
238 bool IsUnwindTablesDefault(
const llvm::opt::ArgList &Args)
const override;
244 bool isPICDefault()
const override;
245 bool isPIEDefault()
const override;
246 bool isPICDefaultForced()
const override;
248 bool SupportsProfiling()
const override;
250 bool UseDwarfDebugFlags()
const override;
252 llvm::ExceptionHandling
279 LastDarwinPlatform = WatchOS
298 void AddDeploymentTarget(llvm::opt::DerivedArgList &Args)
const;
302 const llvm::opt::ArgList &Args);
305 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
311 void addMinVersionArgs(
const llvm::opt::ArgList &Args,
312 llvm::opt::ArgStringList &CmdArgs)
const override;
314 void addStartObjectFileArgs(
const llvm::opt::ArgList &Args,
315 llvm::opt::ArgStringList &CmdArgs)
const override;
318 return (!(isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) &&
322 void addProfileRTLibs(
const llvm::opt::ArgList &Args,
323 llvm::opt::ArgStringList &CmdArgs)
const override;
333 unsigned Major,
unsigned Minor,
unsigned Micro)
const {
336 if (TargetInitialized && TargetPlatform == Platform &&
337 TargetEnvironment == Environment &&
338 TargetVersion == VersionTuple(Major, Minor, Micro))
341 assert(!TargetInitialized &&
"Target already initialized!");
342 TargetInitialized =
true;
343 TargetPlatform = Platform;
344 TargetEnvironment = Environment;
345 TargetVersion = VersionTuple(Major, Minor, Micro);
346 if (Environment == Simulator)
347 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::Simulator);
351 assert(TargetInitialized &&
"Target not initialized!");
352 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
353 TargetEnvironment == NativeEnvironment;
357 assert(TargetInitialized &&
"Target not initialized!");
358 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
359 TargetEnvironment == Simulator;
363 assert(TargetInitialized &&
"Target not initialized!");
364 return isTargetIPhoneOS() || isTargetIOSSimulator();
368 assert(TargetInitialized &&
"Target not initialized!");
369 return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment;
373 assert(TargetInitialized &&
"Target not initialized!");
374 return TargetPlatform == TvOS && TargetEnvironment == Simulator;
378 assert(TargetInitialized &&
"Target not initialized!");
379 return TargetPlatform == TvOS;
383 assert(TargetInitialized &&
"Target not initialized!");
384 return TargetPlatform == WatchOS && TargetEnvironment == NativeEnvironment;
388 assert(TargetInitialized &&
"Target not initialized!");
389 return TargetPlatform == WatchOS && TargetEnvironment == Simulator;
393 assert(TargetInitialized &&
"Target not initialized!");
394 return TargetPlatform == WatchOS;
398 assert(TargetInitialized &&
"Target not initialized!");
399 return TargetPlatform == MacOS;
405 assert(TargetInitialized &&
"Target not initialized!");
406 return TargetVersion;
410 unsigned V2 = 0)
const {
411 assert(isTargetIOSBased() &&
"Unexpected call for non iOS target!");
412 return TargetVersion < VersionTuple(V0, V1, V2);
416 assert(isTargetMacOS() &&
"Unexpected call for non OS X target!");
417 return TargetVersion < VersionTuple(V0, V1, V2);
423 bool isAlignedAllocationUnavailable()
const;
425 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
426 llvm::opt::ArgStringList &CC1Args,
429 StringRef getPlatformFamily()
const;
430 StringRef getOSLibraryNameSuffix(
bool IgnoreSim =
false)
const override;
433 static StringRef getSDKName(StringRef isysroot);
444 llvm::opt::DerivedArgList *
445 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
449 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
450 bool hasBlocksRuntime()
const override;
452 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
453 llvm::opt::ArgStringList &CC1Args)
const override;
459 return !(isTargetMacOS() && isMacosxVersionLT(10, 6));
465 if (isTargetIOSBased() || isTargetWatchOSBased())
467 else if (isTargetMacOS() && !isMacosxVersionLT(10, 6))
469 else if (isTargetMacOS() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
475 void CheckObjCARC()
const override;
477 llvm::ExceptionHandling GetExceptionModel(
478 const llvm::opt::ArgList &Args)
const override;
480 bool SupportsEmbeddedBitcode()
const override;
484 void printVerboseInfo(raw_ostream &OS)
const override;
491 const llvm::opt::ArgList &Args);
496 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
498 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
499 llvm::opt::ArgStringList &CmdArgs)
const override;
501 void AddClangCXXStdlibIncludeArgs(
502 const llvm::opt::ArgList &DriverArgs,
503 llvm::opt::ArgStringList &CC1Args)
const override;
505 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
506 llvm::opt::ArgStringList &CmdArgs)
const override;
508 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
509 llvm::opt::ArgStringList &CmdArgs)
const override;
511 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
513 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
514 llvm::opt::ArgStringList &CmdArgs)
const override;
516 unsigned GetDefaultDwarfVersion()
const override;
521 return llvm::DebuggerKind::LLDB;
527 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
528 llvm::opt::ArgStringList &CmdArgs,
530 bool shared =
true)
const;
537 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
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...
constexpr XRayInstrMask None
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.