10 #ifndef LLVM_CLANG_DRIVER_TOOLCHAIN_H 11 #define LLVM_CLANG_DRIVER_TOOLCHAIN_H 19 #include "llvm/ADT/SmallVector.h" 20 #include "llvm/ADT/Triple.h" 21 #include "llvm/Target/TargetOptions.h" 41 class CudaInstallationDetector;
45 class RegisterEffectiveTriple;
65 : ModeSuffix(Suffix), DriverMode(Mode), TargetIsValid(
false) {}
68 : TargetPrefix(Target), ModeSuffix(Suffix), DriverMode(Mode),
69 TargetIsValid(IsRegistered) {}
97 const llvm::opt::ArgList &Args;
99 const llvm::opt::Arg *
const CachedRTTIArg;
108 path_list ProgramPaths;
110 mutable std::unique_ptr<Tool> Clang;
111 mutable std::unique_ptr<Tool>
Assemble;
112 mutable std::unique_ptr<Tool>
Link;
113 mutable std::unique_ptr<Tool> OffloadBundler;
114 Tool *getClang()
const;
115 Tool *getAssemble()
const;
116 Tool *getLink()
const;
117 Tool *getClangAs()
const;
118 Tool *getOffloadBundler()
const;
120 mutable std::unique_ptr<SanitizerArgs> SanitizerArguments;
121 mutable std::unique_ptr<XRayArgs> XRayArguments;
124 mutable llvm::Triple EffectiveTriple;
127 void setEffectiveTriple(llvm::Triple ET)
const {
128 EffectiveTriple = std::move(ET);
137 const llvm::opt::ArgList &Args);
139 void setTripleEnvironment(llvm::Triple::EnvironmentType Env);
141 virtual Tool *buildAssembler()
const;
142 virtual Tool *buildLinker()
const;
147 static void addSystemInclude(
const llvm::opt::ArgList &DriverArgs,
148 llvm::opt::ArgStringList &CC1Args,
150 static void addExternCSystemInclude(
const llvm::opt::ArgList &DriverArgs,
151 llvm::opt::ArgStringList &CC1Args,
154 addExternCSystemIncludeIfExists(
const llvm::opt::ArgList &DriverArgs,
155 llvm::opt::ArgStringList &CC1Args,
157 static void addSystemIncludes(
const llvm::opt::ArgList &DriverArgs,
158 llvm::opt::ArgStringList &CC1Args,
169 const llvm::Triple &
getTriple()
const {
return Triple; }
181 virtual std::string getInputFilename(
const InputInfo &Input)
const;
183 llvm::Triple::ArchType
getArch()
const {
return Triple.getArch(); }
186 StringRef
getOS()
const {
return Triple.getOSName(); }
190 StringRef getDefaultUniversalArchName()
const;
193 return Triple.getTriple();
198 assert(!EffectiveTriple.getTriple().empty() &&
"No effective triple");
199 return EffectiveTriple;
212 const XRayArgs& getXRayArgs()
const;
215 const llvm::opt::Arg *
getRTTIArg()
const {
return CachedRTTIArg; }
235 static ParsedClangName getTargetAndModeFromProgramName(StringRef ProgName);
247 virtual llvm::opt::DerivedArgList *
256 virtual llvm::opt::DerivedArgList *TranslateOpenMPTargetArgs(
257 const llvm::opt::DerivedArgList &Args,
bool SameTripleAsHost,
268 std::string GetFilePath(
const char *Name)
const;
269 std::string GetProgramPath(
const char *Name)
const;
273 std::string GetLinkerPath()
const;
286 virtual bool isCrossCompiling()
const;
290 virtual bool HasNativeLLVMSupport()
const;
294 virtual types::ID LookupTypeForExtension(StringRef Ext)
const;
304 virtual bool useIntegratedAs()
const;
322 virtual bool useRelaxRelocations()
const;
337 return ToolChain::RLT_Libgcc;
341 return ToolChain::CST_Libstdcxx;
344 virtual std::string getCompilerRTPath()
const;
346 virtual std::string getCompilerRT(
const llvm::opt::ArgList &Args,
348 bool Shared =
false)
const;
350 const char *getCompilerRTArgString(
const llvm::opt::ArgList &Args,
352 bool Shared =
false)
const;
356 std::string getArchSpecificLibPath()
const;
359 static bool needsProfileRT(
const llvm::opt::ArgList &Args);
363 virtual bool IsUnwindTablesDefault(
const llvm::opt::ArgList &Args)
const;
366 virtual bool isPICDefault()
const = 0;
369 virtual bool isPIEDefault()
const = 0;
375 virtual bool isPICDefaultForced()
const = 0;
399 return llvm::DebuggerKind::GDB;
403 virtual llvm::ExceptionHandling
404 GetExceptionModel(
const llvm::opt::ArgList &Args)
const;
415 virtual bool isThreadModelSupported(
const StringRef Model)
const;
420 ComputeLLVMTriple(
const llvm::opt::ArgList &Args,
428 virtual std::string ComputeEffectiveClangTriple(
429 const llvm::opt::ArgList &Args,
436 virtual ObjCRuntime getDefaultObjCRuntime(
bool isNonFragile)
const;
450 AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
451 llvm::opt::ArgStringList &CC1Args)
const;
454 virtual void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
455 llvm::opt::ArgStringList &CC1Args,
459 virtual void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args)
const;
464 GetRuntimeLibType(
const llvm::opt::ArgList &Args)
const;
468 virtual CXXStdlibType GetCXXStdlibType(
const llvm::opt::ArgList &Args)
const;
473 AddClangCXXStdlibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
474 llvm::opt::ArgStringList &CC1Args)
const;
478 bool ShouldLinkCXXStdlib(
const llvm::opt::ArgList &Args)
const;
482 virtual void AddCXXStdlibLibArgs(
const llvm::opt::ArgList &Args,
483 llvm::opt::ArgStringList &CmdArgs)
const;
486 void AddFilePathLibArgs(
const llvm::opt::ArgList &Args,
487 llvm::opt::ArgStringList &CmdArgs)
const;
491 virtual void AddCCKextLibArgs(
const llvm::opt::ArgList &Args,
492 llvm::opt::ArgStringList &CmdArgs)
const;
498 virtual bool AddFastMathRuntimeIfAvailable(
499 const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs)
const;
502 virtual void addProfileRTLibs(
const llvm::opt::ArgList &Args,
503 llvm::opt::ArgStringList &CmdArgs)
const;
506 virtual void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
507 llvm::opt::ArgStringList &CC1Args)
const;
510 virtual void AddIAMCUIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
511 llvm::opt::ArgStringList &CC1Args)
const;
515 const llvm::opt::ArgList &Args)
const;
531 TC.setEffectiveTriple(std::move(T));
std::string ModeSuffix
Driver mode part of the executable name, as g++.
Represents a version number in the form major[.minor[.subminor[.build]]].
DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterat...
Set a ToolChain's effective triple.
RegisterEffectiveTriple(const ToolChain &TC, llvm::Triple T)
Defines the clang::SanitizerKind enum.
The virtual file system interface.
std::string TargetPrefix
Target part of the executable name, as i686-linux-android.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
const FunctionProtoType * T
ParsedClangName(std::string Suffix, const char *Mode)
Helper structure used to pass information extracted from clang executable name such as i686-linux-and...
Dataflow Directional Tag Classes.
The basic abstraction for the target Objective-C runtime.
Defines the clang::VersionTuple class, which represents a version in the form major[.minor[.subminor]].
ParsedClangName(std::string Target, std::string Suffix, const char *Mode, bool IsRegistered)
~RegisterEffectiveTriple()
const char * DriverMode
Corresponding driver mode argument, as '–driver-mode=g++'.
bool TargetIsValid
True if TargetPrefix is recognized as a registered target name.