9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H 10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H 21 namespace toolchains {
32 virtual void anchor();
35 void AddMachOArch(
const llvm::opt::ArgList &Args,
36 llvm::opt::ArgStringList &CmdArgs)
const;
44 const char *Name,
const char *ShortName,
const ToolChain &TC,
46 llvm::sys::WindowsEncodingMethod ResponseEncoding = llvm::sys::WEM_UTF8,
47 const char *ResponseFlag =
"@")
48 :
Tool(Name, ShortName, TC, ResponseSupport, ResponseEncoding,
55 :
MachOTool(
"darwin::Assembler",
"assembler", TC) {}
61 const llvm::opt::ArgList &TCArgs,
62 const char *LinkingOutput)
const override;
67 void AddLinkArgs(
Compilation &C,
const llvm::opt::ArgList &Args,
68 llvm::opt::ArgStringList &CmdArgs,
73 :
MachOTool(
"darwin::Linker",
"linker", TC, RF_FileList,
74 llvm::sys::WEM_UTF8,
"-filelist") {}
81 const llvm::opt::ArgList &TCArgs,
82 const char *LinkingOutput)
const override;
93 const llvm::opt::ArgList &TCArgs,
94 const char *LinkingOutput)
const override;
100 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
107 const llvm::opt::ArgList &TCArgs,
108 const char *LinkingOutput)
const override;
114 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
120 const llvm::opt::ArgList &TCArgs,
121 const char *LinkingOutput)
const override;
126 namespace toolchains {
130 Tool *buildAssembler()
const override;
131 Tool *buildLinker()
const override;
135 mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
136 mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
137 mutable std::unique_ptr<tools::darwin::VerifyDebug> VerifyDebug;
141 const llvm::opt::ArgList &Args);
149 StringRef getMachOArchName(
const llvm::opt::ArgList &Args)
const;
153 llvm::opt::ArgStringList &CmdArgs)
const {}
159 virtual void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
160 llvm::opt::ArgStringList &CmdArgs,
161 bool ForceLinkBuiltinRT =
false)
const;
164 llvm::opt::ArgStringList &CmdArgs)
const {
168 llvm::opt::ArgStringList &CmdArgs)
const {}
171 llvm::opt::ArgStringList &CmdArgs)
const {
184 RLO_AlwaysLink = 1 << 0,
187 RLO_IsEmbedded = 1 << 1,
190 RLO_AddRPath = 1 << 2,
193 RLO_FirstLink = 1 << 3,
197 void AddLinkRuntimeLib(
const llvm::opt::ArgList &Args,
198 llvm::opt::ArgStringList &CmdArgs, StringRef Component,
200 bool IsShared =
false)
const;
205 llvm::opt::ArgStringList &CmdArgs)
const override {
213 types::ID LookupTypeForExtension(StringRef Ext)
const override;
215 bool HasNativeLLVMSupport()
const override;
217 llvm::opt::DerivedArgList *
218 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
237 return getTriple().getArch() != llvm::Triple::x86;
242 bool IsUnwindTablesDefault(
const llvm::opt::ArgList &Args)
const override;
248 bool isPICDefault()
const override;
249 bool isPIEDefault()
const override;
250 bool isPICDefaultForced()
const override;
252 bool SupportsProfiling()
const override;
254 bool UseDwarfDebugFlags()
const override;
256 llvm::ExceptionHandling
286 LastDarwinPlatform = WatchOS
305 void AddDeploymentTarget(llvm::opt::DerivedArgList &Args)
const;
309 const llvm::opt::ArgList &Args);
312 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
318 void addMinVersionArgs(
const llvm::opt::ArgList &Args,
319 llvm::opt::ArgStringList &CmdArgs)
const override;
321 void addPlatformVersionArgs(
const llvm::opt::ArgList &Args,
322 llvm::opt::ArgStringList &CmdArgs)
const override;
324 void addStartObjectFileArgs(
const llvm::opt::ArgList &Args,
325 llvm::opt::ArgStringList &CmdArgs)
const override;
328 return (!(isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) &&
332 void addProfileRTLibs(
const llvm::opt::ArgList &Args,
333 llvm::opt::ArgStringList &CmdArgs)
const override;
343 unsigned Major,
unsigned Minor,
unsigned Micro)
const {
346 if (TargetInitialized && TargetPlatform == Platform &&
347 TargetEnvironment == Environment &&
348 TargetVersion == VersionTuple(Major, Minor, Micro))
351 assert(!TargetInitialized &&
"Target already initialized!");
352 TargetInitialized =
true;
353 TargetPlatform = Platform;
354 TargetEnvironment = Environment;
355 TargetVersion = VersionTuple(Major, Minor, Micro);
356 if (Environment == Simulator)
357 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::Simulator);
361 assert(TargetInitialized &&
"Target not initialized!");
362 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
363 TargetEnvironment == NativeEnvironment;
367 assert(TargetInitialized &&
"Target not initialized!");
368 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
369 TargetEnvironment == Simulator;
373 assert(TargetInitialized &&
"Target not initialized!");
374 return isTargetIPhoneOS() || isTargetIOSSimulator();
378 assert(TargetInitialized &&
"Target not initialized!");
379 return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment;
383 assert(TargetInitialized &&
"Target not initialized!");
384 return TargetPlatform == TvOS && TargetEnvironment == Simulator;
388 assert(TargetInitialized &&
"Target not initialized!");
389 return TargetPlatform == TvOS;
393 assert(TargetInitialized &&
"Target not initialized!");
394 return TargetPlatform == WatchOS && TargetEnvironment == NativeEnvironment;
398 assert(TargetInitialized &&
"Target not initialized!");
399 return TargetPlatform == WatchOS && TargetEnvironment == Simulator;
403 assert(TargetInitialized &&
"Target not initialized!");
404 return TargetPlatform == WatchOS;
408 assert(TargetInitialized &&
"Target not initialized!");
409 return TargetPlatform == MacOS;
415 assert(TargetInitialized &&
"Target not initialized!");
416 return TargetVersion;
420 unsigned V2 = 0)
const {
421 assert(isTargetIOSBased() &&
"Unexpected call for non iOS target!");
422 return TargetVersion < VersionTuple(V0, V1, V2);
426 assert(isTargetMacOS() &&
"Unexpected call for non OS X target!");
427 return TargetVersion < VersionTuple(V0, V1, V2);
433 bool isAlignedAllocationUnavailable()
const;
435 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
436 llvm::opt::ArgStringList &CC1Args,
439 StringRef getPlatformFamily()
const;
440 StringRef getOSLibraryNameSuffix(
bool IgnoreSim =
false)
const override;
443 static StringRef getSDKName(StringRef isysroot);
454 llvm::opt::DerivedArgList *
455 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
459 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
460 bool hasBlocksRuntime()
const override;
462 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
463 llvm::opt::ArgStringList &CC1Args)
const override;
469 return !(isTargetMacOS() && isMacosxVersionLT(10, 6));
475 if (isTargetIOSBased() || isTargetWatchOSBased())
477 else if (isTargetMacOS() && !isMacosxVersionLT(10, 6))
479 else if (isTargetMacOS() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
485 void CheckObjCARC()
const override;
487 llvm::ExceptionHandling GetExceptionModel(
488 const llvm::opt::ArgList &Args)
const override;
490 bool SupportsEmbeddedBitcode()
const override;
494 void printVerboseInfo(raw_ostream &OS)
const override;
501 const llvm::opt::ArgList &Args);
506 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
508 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
509 llvm::opt::ArgStringList &CmdArgs,
510 bool ForceLinkBuiltinRT =
false)
const override;
512 void AddClangCXXStdlibIncludeArgs(
513 const llvm::opt::ArgList &DriverArgs,
514 llvm::opt::ArgStringList &CC1Args)
const override;
516 void AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
517 llvm::opt::ArgStringList &CC1Args)
const override;
519 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
520 llvm::opt::ArgStringList &CmdArgs)
const override;
522 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
523 llvm::opt::ArgStringList &CmdArgs)
const override;
525 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
527 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
528 llvm::opt::ArgStringList &CmdArgs)
const override;
530 unsigned GetDefaultDwarfVersion()
const override;
535 return llvm::DebuggerKind::LLDB;
541 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
542 llvm::opt::ArgStringList &CmdArgs,
544 bool shared =
true)
const;
546 bool AddGnuCPlusPlusIncludePaths(
const llvm::opt::ArgList &DriverArgs,
547 llvm::opt::ArgStringList &CC1Args,
549 llvm::StringRef Version,
550 llvm::StringRef ArchDir,
551 llvm::StringRef BitDir)
const;
553 llvm::StringRef GetHeaderSysroot(
const llvm::opt::ArgList &DriverArgs)
const;
560 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion...
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.