9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
33 const llvm::opt::ArgList &Args);
36 virtual void anchor();
39 void AddMachOArch(
const llvm::opt::ArgList &Args,
40 llvm::opt::ArgStringList &CmdArgs)
const;
48 :
Tool(Name, ShortName, TC) {}
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,
69 bool LinkerIsLLD,
bool UsePlatformVersion)
const;
79 const llvm::opt::ArgList &TCArgs,
80 const char *LinkingOutput)
const override;
86 :
MachOTool(
"darwin::StaticLibTool",
"static-lib-linker", TC) {}
93 const llvm::opt::ArgList &TCArgs,
94 const char *LinkingOutput)
const override;
105 const llvm::opt::ArgList &TCArgs,
106 const char *LinkingOutput)
const override;
112 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
119 const llvm::opt::ArgList &TCArgs,
120 const char *LinkingOutput)
const override;
126 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
132 const llvm::opt::ArgList &TCArgs,
133 const char *LinkingOutput)
const override;
138namespace toolchains {
142 Tool *buildAssembler()
const override;
143 Tool *buildLinker()
const override;
144 Tool *buildStaticLibTool()
const override;
148 mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
149 mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
150 mutable std::unique_ptr<tools::darwin::VerifyDebug> VerifyDebug;
153 mutable std::optional<VersionTuple> LinkerVersion;
157 const llvm::opt::ArgList &Args);
165 StringRef getMachOArchName(
const llvm::opt::ArgList &Args)
const;
169 VersionTuple getLinkerVersion(
const llvm::opt::ArgList &Args)
const;
173 llvm::opt::ArgStringList &CmdArgs)
const {}
179 virtual void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
180 llvm::opt::ArgStringList &CmdArgs,
181 bool ForceLinkBuiltinRT =
false)
const;
184 llvm::opt::ArgStringList &CmdArgs)
const {
188 llvm::opt::ArgStringList &CmdArgs)
const {}
191 llvm::opt::ArgStringList &CmdArgs)
const {
204 RLO_AlwaysLink = 1 << 0,
207 RLO_IsEmbedded = 1 << 1,
210 RLO_AddRPath = 1 << 2,
214 void AddLinkRuntimeLib(
const llvm::opt::ArgList &Args,
215 llvm::opt::ArgStringList &CmdArgs, StringRef Component,
216 RuntimeLinkOptions Opts = RuntimeLinkOptions(),
217 bool IsShared =
false)
const;
222 llvm::opt::ArgStringList &CmdArgs)
const override {
230 types::ID LookupTypeForExtension(StringRef Ext)
const override;
232 bool HasNativeLLVMSupport()
const override;
234 llvm::opt::DerivedArgList *
235 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
250 return getTriple().getArch() != llvm::Triple::x86;
256 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
259 return ToolChain::RLT_CompilerRT;
262 bool isPICDefault()
const override;
263 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
264 bool isPICDefaultForced()
const override;
266 bool SupportsProfiling()
const override;
268 bool UseDwarfDebugFlags()
const override;
269 std::string GetGlobalDebugPathRemapping()
const override;
271 llvm::ExceptionHandling
273 return llvm::ExceptionHandling::None;
303 LastDarwinPlatform = XROS
329 void AddDeploymentTarget(llvm::opt::DerivedArgList &Args)
const;
333 const llvm::opt::ArgList &Args);
336 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
342 void addMinVersionArgs(
const llvm::opt::ArgList &Args,
343 llvm::opt::ArgStringList &CmdArgs)
const override;
345 void addPlatformVersionArgs(
const llvm::opt::ArgList &Args,
346 llvm::opt::ArgStringList &CmdArgs)
const override;
348 void addStartObjectFileArgs(
const llvm::opt::ArgList &Args,
349 llvm::opt::ArgStringList &CmdArgs)
const override;
352 return (!(isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) &&
353 !isTargetWatchOS() && !isTargetDriverKit());
356 void addProfileRTLibs(
const llvm::opt::ArgList &Args,
357 llvm::opt::ArgStringList &CmdArgs)
const override;
367 unsigned Major,
unsigned Minor,
unsigned Micro,
368 VersionTuple NativeTargetVersion)
const {
371 if (TargetInitialized && TargetPlatform == Platform &&
372 TargetEnvironment == Environment &&
373 (Environment == MacCatalyst ? OSTargetVersion :
TargetVersion) ==
374 VersionTuple(Major, Minor, Micro))
377 assert(!TargetInitialized &&
"Target already initialized!");
378 TargetInitialized =
true;
379 TargetPlatform = Platform;
380 TargetEnvironment = Environment;
382 if (Environment == Simulator)
383 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::Simulator);
384 else if (Environment == MacCatalyst) {
385 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::MacABI);
387 OSTargetVersion = VersionTuple(Major, Minor, Micro);
393 assert(TargetInitialized &&
"Target not initialized!");
394 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
395 TargetEnvironment == NativeEnvironment;
399 assert(TargetInitialized &&
"Target not initialized!");
400 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
401 TargetEnvironment == Simulator;
405 assert(TargetInitialized &&
"Target not initialized!");
406 return isTargetIPhoneOS() || isTargetIOSSimulator();
410 return TargetPlatform == XROS && TargetEnvironment == NativeEnvironment;
414 return TargetPlatform == XROS && TargetEnvironment == Simulator;
420 assert(TargetInitialized &&
"Target not initialized!");
421 return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment;
425 assert(TargetInitialized &&
"Target not initialized!");
426 return TargetPlatform == TvOS && TargetEnvironment == Simulator;
430 assert(TargetInitialized &&
"Target not initialized!");
431 return TargetPlatform == TvOS;
435 assert(TargetInitialized &&
"Target not initialized!");
436 return TargetPlatform == WatchOS && TargetEnvironment == NativeEnvironment;
440 assert(TargetInitialized &&
"Target not initialized!");
441 return TargetPlatform == WatchOS && TargetEnvironment == Simulator;
445 assert(TargetInitialized &&
"Target not initialized!");
446 return TargetPlatform == WatchOS;
450 assert(TargetInitialized &&
"Target not initialized!");
451 return TargetPlatform == DriverKit;
455 return TargetPlatform == IPhoneOS && TargetEnvironment == MacCatalyst;
459 assert(TargetInitialized &&
"Target not initialized!");
460 return TargetPlatform == MacOS;
464 assert(TargetInitialized &&
"Target not initialized!");
465 return TargetPlatform == MacOS || isTargetMacCatalyst();
469 assert(TargetInitialized &&
"Target not initialized!");
470 return isTargetMacOSBased() && getArch() == llvm::Triple::aarch64;
480 assert(TargetInitialized &&
"Target not initialized!");
481 return isTargetMacCatalyst() ? OSTargetVersion :
TargetVersion;
485 unsigned V2 = 0)
const {
486 assert(isTargetIOSBased() &&
"Unexpected call for non iOS target!");
495 assert(isTargetMacOSBased() &&
496 (getTriple().isMacOSX() || getTriple().isMacCatalystEnvironment()) &&
497 "Unexpected call for non OS X target!");
500 VersionTuple MinVers =
501 llvm::Triple(getTriple().getArchName(),
"apple",
"macos")
502 .getMinimumSupportedOSVersion();
512 bool isAlignedAllocationUnavailable()
const;
514 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
515 llvm::opt::ArgStringList &CC1Args,
518 void addClangCC1ASTargetOptions(
519 const llvm::opt::ArgList &Args,
520 llvm::opt::ArgStringList &CC1ASArgs)
const override;
522 StringRef getPlatformFamily()
const;
523 StringRef getOSLibraryNameSuffix(
bool IgnoreSim =
false)
const override;
526 static StringRef getSDKName(StringRef isysroot);
537 llvm::opt::DerivedArgList *
538 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
541 CXXStdlibType GetDefaultCXXStdlibType()
const override;
542 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
543 bool hasBlocksRuntime()
const override;
545 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
546 llvm::opt::ArgStringList &CC1Args)
const override;
547 void AddHIPIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
548 llvm::opt::ArgStringList &CC1Args)
const override;
554 return !(isTargetMacOSBased() && isMacosxVersionLT(10, 6));
561 if (isTargetIOSBased() || isTargetWatchOSBased() || isTargetDriverKit() ||
563 return LangOptions::SSPOn;
564 else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 6))
565 return LangOptions::SSPOn;
566 else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
567 return LangOptions::SSPOn;
569 return LangOptions::SSPOff;
572 void CheckObjCARC()
const override;
574 llvm::ExceptionHandling GetExceptionModel(
575 const llvm::opt::ArgList &Args)
const override;
577 bool SupportsEmbeddedBitcode()
const override;
581 void printVerboseInfo(raw_ostream &OS)
const override;
588 const llvm::opt::ArgList &Args);
593 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
595 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
596 llvm::opt::ArgStringList &CmdArgs,
597 bool ForceLinkBuiltinRT =
false)
const override;
599 void AddClangCXXStdlibIncludeArgs(
600 const llvm::opt::ArgList &DriverArgs,
601 llvm::opt::ArgStringList &CC1Args)
const override;
603 void AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
604 llvm::opt::ArgStringList &CC1Args)
const override;
606 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
607 llvm::opt::ArgStringList &CmdArgs)
const override;
609 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
610 llvm::opt::ArgStringList &CmdArgs)
const override;
612 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
614 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
615 llvm::opt::ArgStringList &CmdArgs)
const override;
617 unsigned GetDefaultDwarfVersion()
const override;
622 return llvm::DebuggerKind::LLDB;
628 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
629 llvm::opt::ArgStringList &CmdArgs,
631 bool shared =
true)
const;
633 bool AddGnuCPlusPlusIncludePaths(
const llvm::opt::ArgList &DriverArgs,
634 llvm::opt::ArgStringList &CC1Args,
636 llvm::StringRef Version,
637 llvm::StringRef ArchDir,
638 llvm::StringRef BitDir)
const;
641 GetEffectiveSysroot(
const llvm::opt::ArgList &DriverArgs)
const;
Defines the clang::LangOptions interface.
Simple wrapper for toolchain detector with costly initialization.
The basic abstraction for the target Objective-C runtime.
Compilation - A set of tasks to perform for a single driver invocation.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T