9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DARWIN_H
34 const llvm::opt::ArgList &Args);
37 virtual void anchor();
40 void AddMachOArch(
const llvm::opt::ArgList &Args,
41 llvm::opt::ArgStringList &CmdArgs)
const;
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,
70 bool LinkerIsLLD,
bool UsePlatformVersion)
const;
80 const llvm::opt::ArgList &TCArgs,
81 const char *LinkingOutput)
const override;
87 :
MachOTool(
"darwin::StaticLibTool",
"static-lib-linker", TC) {}
94 const llvm::opt::ArgList &TCArgs,
95 const char *LinkingOutput)
const override;
106 const llvm::opt::ArgList &TCArgs,
107 const char *LinkingOutput)
const override;
113 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
120 const llvm::opt::ArgList &TCArgs,
121 const char *LinkingOutput)
const override;
127 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
133 const llvm::opt::ArgList &TCArgs,
134 const char *LinkingOutput)
const override;
139namespace toolchains {
143 Tool *buildAssembler()
const override;
144 Tool *buildLinker()
const override;
145 Tool *buildStaticLibTool()
const override;
149 mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
150 mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
151 mutable std::unique_ptr<tools::darwin::VerifyDebug> VerifyDebug;
154 mutable std::optional<VersionTuple> LinkerVersion;
158 const llvm::opt::ArgList &Args);
166 StringRef getMachOArchName(
const llvm::opt::ArgList &Args)
const;
170 VersionTuple getLinkerVersion(
const llvm::opt::ArgList &Args)
const;
174 llvm::opt::ArgStringList &CmdArgs)
const {}
180 virtual void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
181 llvm::opt::ArgStringList &CmdArgs,
182 bool ForceLinkBuiltinRT =
false)
const;
185 llvm::opt::ArgStringList &CmdArgs)
const {
189 llvm::opt::ArgStringList &CmdArgs)
const {}
192 llvm::opt::ArgStringList &CmdArgs)
const {
205 RLO_AlwaysLink = 1 << 0,
208 RLO_IsEmbedded = 1 << 1,
211 RLO_AddRPath = 1 << 2,
215 void AddLinkRuntimeLib(
const llvm::opt::ArgList &Args,
216 llvm::opt::ArgStringList &CmdArgs, StringRef Component,
217 RuntimeLinkOptions Opts = RuntimeLinkOptions(),
218 bool IsShared =
false)
const;
223 llvm::opt::ArgStringList &CmdArgs)
const override {
231 getCompilerRT(
const llvm::opt::ArgList &Args, StringRef Component,
238 types::ID LookupTypeForExtension(StringRef Ext)
const override;
240 bool HasNativeLLVMSupport()
const override;
242 llvm::opt::DerivedArgList *
243 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
258 return getTriple().getArch() != llvm::Triple::x86;
264 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
267 return ToolChain::RLT_CompilerRT;
270 bool isPICDefault()
const override;
271 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
272 bool isPICDefaultForced()
const override;
274 bool SupportsProfiling()
const override;
276 bool UseDwarfDebugFlags()
const override;
277 std::string GetGlobalDebugPathRemapping()
const override;
279 llvm::ExceptionHandling
281 return llvm::ExceptionHandling::None;
298 const llvm::opt::ArgList &Args);
305 AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
306 llvm::opt::ArgStringList &CC1Args)
const override;
308 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
309 llvm::opt::ArgStringList &CC1Args)
const override;
310 void AddHIPIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
311 llvm::opt::ArgStringList &CC1Args)
const override;
312 void addSYCLIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
313 llvm::opt::ArgStringList &CC1Args)
const override;
315 void AddClangCXXStdlibIncludeArgs(
316 const llvm::opt::ArgList &DriverArgs,
317 llvm::opt::ArgStringList &CC1Args)
const override;
318 void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
319 llvm::opt::ArgStringList &CmdArgs)
const override;
321 void printVerboseInfo(raw_ostream &OS)
const override;
330 GetEffectiveSysroot(
const llvm::opt::ArgList &DriverArgs)
const;
334 AddGnuCPlusPlusIncludePaths(
const llvm::opt::ArgList &DriverArgs,
335 llvm::opt::ArgStringList &CC1Args)
const;
355 LastDarwinPlatform = XROS
378 void AddDeploymentTarget(llvm::opt::DerivedArgList &Args)
const;
382 const llvm::opt::ArgList &Args);
385 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
391 void addMinVersionArgs(
const llvm::opt::ArgList &Args,
392 llvm::opt::ArgStringList &CmdArgs)
const override;
394 void addPlatformVersionArgs(
const llvm::opt::ArgList &Args,
395 llvm::opt::ArgStringList &CmdArgs)
const override;
397 void addStartObjectFileArgs(
const llvm::opt::ArgList &Args,
398 llvm::opt::ArgStringList &CmdArgs)
const override;
401 return (!(isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) &&
402 !isTargetWatchOS() && !isTargetDriverKit());
405 void addProfileRTLibs(
const llvm::opt::ArgList &Args,
406 llvm::opt::ArgStringList &CmdArgs)
const override;
411 getCompilerRT(
const llvm::opt::ArgList &Args, StringRef Component,
422 unsigned Major,
unsigned Minor,
unsigned Micro,
423 VersionTuple NativeTargetVersion)
const {
426 if (TargetInitialized && TargetPlatform == Platform &&
427 TargetEnvironment == Environment &&
428 (Environment == MacCatalyst ? OSTargetVersion :
TargetVersion) ==
429 VersionTuple(Major, Minor, Micro))
432 assert(!TargetInitialized &&
"Target already initialized!");
433 TargetInitialized =
true;
434 TargetPlatform = Platform;
435 TargetEnvironment = Environment;
437 if (Environment == Simulator)
438 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::Simulator);
439 else if (Environment == MacCatalyst) {
440 const_cast<Darwin *
>(
this)->setTripleEnvironment(llvm::Triple::MacABI);
442 OSTargetVersion = VersionTuple(Major, Minor, Micro);
448 assert(TargetInitialized &&
"Target not initialized!");
449 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
450 TargetEnvironment == NativeEnvironment;
454 assert(TargetInitialized &&
"Target not initialized!");
455 return (TargetPlatform == IPhoneOS || TargetPlatform == TvOS) &&
456 TargetEnvironment == Simulator;
460 assert(TargetInitialized &&
"Target not initialized!");
461 return isTargetIPhoneOS() || isTargetIOSSimulator();
465 return TargetPlatform == XROS && TargetEnvironment == NativeEnvironment;
469 return TargetPlatform == XROS && TargetEnvironment == Simulator;
475 assert(TargetInitialized &&
"Target not initialized!");
476 return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment;
480 assert(TargetInitialized &&
"Target not initialized!");
481 return TargetPlatform == TvOS && TargetEnvironment == Simulator;
485 assert(TargetInitialized &&
"Target not initialized!");
486 return TargetPlatform == TvOS;
490 assert(TargetInitialized &&
"Target not initialized!");
491 return TargetPlatform == WatchOS && TargetEnvironment == NativeEnvironment;
495 assert(TargetInitialized &&
"Target not initialized!");
496 return TargetPlatform == WatchOS && TargetEnvironment == Simulator;
500 assert(TargetInitialized &&
"Target not initialized!");
501 return TargetPlatform == WatchOS;
505 assert(TargetInitialized &&
"Target not initialized!");
506 return TargetPlatform == DriverKit;
510 return TargetPlatform == IPhoneOS && TargetEnvironment == MacCatalyst;
514 assert(TargetInitialized &&
"Target not initialized!");
515 return TargetPlatform == MacOS;
519 assert(TargetInitialized &&
"Target not initialized!");
520 return TargetPlatform == MacOS || isTargetMacCatalyst();
524 assert(TargetInitialized &&
"Target not initialized!");
525 return isTargetMacOSBased() && getArch() == llvm::Triple::aarch64;
535 assert(TargetInitialized &&
"Target not initialized!");
536 return isTargetMacCatalyst() ? OSTargetVersion :
TargetVersion;
540 unsigned V2 = 0)
const {
541 assert(isTargetIOSBased() &&
"Unexpected call for non iOS target!");
550 assert(isTargetMacOSBased() &&
551 (getTriple().isMacOSX() || getTriple().isMacCatalystEnvironment()) &&
552 "Unexpected call for non OS X target!");
555 VersionTuple MinVers =
556 llvm::Triple(getTriple().getArchName(),
"apple",
"macos")
557 .getMinimumSupportedOSVersion();
567 bool isAlignedAllocationUnavailable()
const;
571 bool isSizedDeallocationUnavailable()
const;
573 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
574 llvm::opt::ArgStringList &CC1Args,
577 void addClangCC1ASTargetOptions(
578 const llvm::opt::ArgList &Args,
579 llvm::opt::ArgStringList &CC1ASArgs)
const override;
581 StringRef getPlatformFamily()
const;
582 StringRef getOSLibraryNameSuffix(
bool IgnoreSim =
false)
const override;
585 static StringRef getSDKName(StringRef isysroot);
596 llvm::opt::DerivedArgList *
597 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
600 CXXStdlibType GetDefaultCXXStdlibType()
const override;
601 ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const override;
602 bool hasBlocksRuntime()
const override;
608 return !(isTargetMacOSBased() && isMacosxVersionLT(10, 6));
615 if (isTargetIOSBased() || isTargetWatchOSBased() || isTargetDriverKit() ||
617 return LangOptions::SSPOn;
618 else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 6))
619 return LangOptions::SSPOn;
620 else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 5) && !KernelOrKext)
621 return LangOptions::SSPOn;
623 return LangOptions::SSPOff;
626 void CheckObjCARC()
const override;
628 llvm::ExceptionHandling GetExceptionModel(
629 const llvm::opt::ArgList &Args)
const override;
631 bool SupportsEmbeddedBitcode()
const override;
640 const llvm::opt::ArgList &Args);
645 RuntimeLibType GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const override;
647 void AddLinkRuntimeLibArgs(
const llvm::opt::ArgList &Args,
648 llvm::opt::ArgStringList &CmdArgs,
649 bool ForceLinkBuiltinRT =
false)
const override;
651 void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
652 llvm::opt::ArgStringList &CmdArgs)
const override;
654 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const override;
656 void AddLinkARCArgs(
const llvm::opt::ArgList &Args,
657 llvm::opt::ArgStringList &CmdArgs)
const override;
659 unsigned GetDefaultDwarfVersion()
const override;
664 return llvm::DebuggerKind::LLDB;
670 void AddLinkSanitizerLibArgs(
const llvm::opt::ArgList &Args,
671 llvm::opt::ArgStringList &CmdArgs,
673 bool shared =
true)
const;
676 AddGnuCPlusPlusIncludePaths(
const llvm::opt::ArgList &DriverArgs,
677 llvm::opt::ArgStringList &CC1Args)
const override;
679 bool AddGnuCPlusPlusIncludePaths(
const llvm::opt::ArgList &DriverArgs,
680 llvm::opt::ArgStringList &CC1Args,
682 llvm::StringRef Version,
683 llvm::StringRef ArchDir,
684 llvm::StringRef BitDir)
const;
Defines the clang::LangOptions interface.
llvm::MachO::FileType FileType
Simple wrapper for toolchain detector with costly initialization.
The basic abstraction for the target Objective-C runtime.
The base class of the type hierarchy.
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