9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
24 namespace toolchains {
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;
138 namespace 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;
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
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;
516 bool isSizedDeallocationUnavailable()
const;
518 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
519 llvm::opt::ArgStringList &CC1Args,
522 void addClangCC1ASTargetOptions(
523 const llvm::opt::ArgList &Args,
524 llvm::opt::ArgStringList &CC1ASArgs)
const override;
526 StringRef getPlatformFamily()
const;
527 StringRef getOSLibraryNameSuffix(
bool IgnoreSim =
false)
const override;
530 static StringRef getSDKName(StringRef isysroot);
541 llvm::opt::DerivedArgList *
542 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
545 CXXStdlibType GetDefaultCXXStdlibType()
const override;
546 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
547 bool hasBlocksRuntime()
const override;
549 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
550 llvm::opt::ArgStringList &CC1Args)
const override;
551 void AddHIPIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
552 llvm::opt::ArgStringList &CC1Args)
const override;
558 return !(isTargetMacOSBased() && isMacosxVersionLT(10, 6));
565 if (isTargetIOSBased() || isTargetWatchOSBased() || isTargetDriverKit() ||
568 else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 6))
570 else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
576 void CheckObjCARC()
const override;
578 llvm::ExceptionHandling GetExceptionModel(
579 const llvm::opt::ArgList &Args)
const override;
581 bool SupportsEmbeddedBitcode()
const override;
585 void printVerboseInfo(raw_ostream &OS)
const override;
592 const llvm::opt::ArgList &Args);
597 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
599 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
600 llvm::opt::ArgStringList &CmdArgs,
601 bool ForceLinkBuiltinRT =
false)
const override;
603 void AddClangCXXStdlibIncludeArgs(
604 const llvm::opt::ArgList &DriverArgs,
605 llvm::opt::ArgStringList &CC1Args)
const override;
607 void AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
608 llvm::opt::ArgStringList &CC1Args)
const override;
610 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
611 llvm::opt::ArgStringList &CmdArgs)
const override;
613 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
614 llvm::opt::ArgStringList &CmdArgs)
const override;
616 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
618 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
619 llvm::opt::ArgStringList &CmdArgs)
const override;
621 unsigned GetDefaultDwarfVersion()
const override;
626 return llvm::DebuggerKind::LLDB;
632 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
633 llvm::opt::ArgStringList &CmdArgs,
635 bool shared =
true)
const;
637 bool AddGnuCPlusPlusIncludePaths(
const llvm::opt::ArgList &DriverArgs,
638 llvm::opt::ArgStringList &CC1Args,
640 llvm::StringRef Version,
641 llvm::StringRef ArchDir,
642 llvm::StringRef BitDir)
const;
645 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...
constexpr XRayInstrMask None
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T