Go to the documentation of this file.
9 #ifndef LLVM_CLANG_DRIVER_TOOLCHAIN_H
10 #define LLVM_CLANG_DRIVER_TOOLCHAIN_H
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/ADT/ArrayRef.h"
21 #include "llvm/ADT/FloatingPointMode.h"
22 #include "llvm/ADT/SmallVector.h"
23 #include "llvm/ADT/StringRef.h"
24 #include "llvm/ADT/Triple.h"
25 #include "llvm/MC/MCTargetOptions.h"
26 #include "llvm/Option/Option.h"
27 #include "llvm/Support/VersionTuple.h"
28 #include "llvm/Target/TargetOptions.h"
130 const llvm::opt::ArgList &Args;
133 const llvm::opt::Arg *
const CachedRTTIArg;
146 mutable std::unique_ptr<Tool> Clang;
147 mutable std::unique_ptr<Tool> Flang;
148 mutable std::unique_ptr<Tool>
Assemble;
149 mutable std::unique_ptr<Tool>
Link;
150 mutable std::unique_ptr<Tool> StaticLibTool;
151 mutable std::unique_ptr<Tool>
IfsMerge;
152 mutable std::unique_ptr<Tool> OffloadBundler;
153 mutable std::unique_ptr<Tool> OffloadWrapper;
154 mutable std::unique_ptr<Tool> OffloadPackager;
155 mutable std::unique_ptr<Tool> LinkerWrapper;
157 Tool *getClang()
const;
158 Tool *getFlang()
const;
159 Tool *getAssemble()
const;
160 Tool *getLink()
const;
161 Tool *getStaticLibTool()
const;
162 Tool *getIfsMerge()
const;
163 Tool *getClangAs()
const;
164 Tool *getOffloadBundler()
const;
165 Tool *getOffloadWrapper()
const;
166 Tool *getOffloadPackager()
const;
167 Tool *getLinkerWrapper()
const;
169 mutable bool SanitizerArgsChecked =
false;
170 mutable std::unique_ptr<XRayArgs> XRayArguments;
173 mutable llvm::Triple EffectiveTriple;
176 void setEffectiveTriple(llvm::Triple ET)
const {
177 EffectiveTriple = std::move(ET);
189 const llvm::opt::ArgList &Args);
206 llvm::opt::ArgStringList &CC1Args,
209 llvm::opt::ArgStringList &CC1Args,
213 llvm::opt::ArgStringList &CC1Args,
216 llvm::opt::ArgStringList &CC1Args,
220 const Twine &
C =
"",
const Twine &D =
"");
229 llvm::vfs::FileSystem &
getVFS()
const;
230 const llvm::Triple &
getTriple()
const {
return Triple; }
244 llvm::Triple::ArchType
getArch()
const {
return Triple.getArch(); }
247 StringRef
getOS()
const {
return Triple.getOSName(); }
254 return Triple.getTriple();
259 assert(!EffectiveTriple.getTriple().empty() &&
"No effective triple");
260 return EffectiveTriple;
281 const llvm::opt::Arg *
getRTTIArg()
const {
return CachedRTTIArg; }
312 virtual llvm::opt::DerivedArgList *
322 const llvm::opt::DerivedArgList &Args,
bool SameTripleAsHost,
329 const llvm::opt::DerivedArgList &Args, llvm::opt::Arg *&A,
330 llvm::opt::DerivedArgList *DAL,
336 virtual llvm::opt::DerivedArgList *
510 virtual bool isPIEDefault(
const llvm::opt::ArgList &Args)
const = 0;
553 return llvm::DebuggerKind::GDB;
563 const llvm::opt::ArgList &Args)
const {}
566 virtual llvm::ExceptionHandling
579 const llvm::Triple &TargetTriple,
580 StringRef SysRoot)
const {
581 return TargetTriple.str();
596 const llvm::opt::ArgList &Args,
622 llvm::opt::ArgStringList &CC1Args)
const;
626 llvm::opt::ArgStringList &CC1Args,
652 llvm::opt::ArgStringList &CC1Args)
const;
657 llvm::opt::ArgStringList &CC1Args)
const;
666 llvm::opt::ArgStringList &CmdArgs)
const;
670 llvm::opt::ArgStringList &CmdArgs)
const;
675 llvm::opt::ArgStringList &CmdArgs)
const;
682 const llvm::opt::ArgList &Args,
std::string &Path)
const;
689 const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs)
const;
694 llvm::opt::ArgStringList &CmdArgs)
const;
698 llvm::opt::ArgStringList &CC1Args)
const;
702 llvm::opt::ArgStringList &CC1Args)
const;
706 llvm::opt::ArgStringList &CC1Args)
const;
710 const llvm::opt::ArgList &Args)
const;
719 llvm::opt::ArgStringList &CmdArgs)
const {}
737 const llvm::opt::ArgList &DriverArgs,
const JobAction &JA,
738 const llvm::fltSemantics *FPType =
nullptr)
const {
739 return llvm::DenormalMode::getIEEE();
749 llvm::Triple TT(TripleStr);
750 if (TT.getVendor() == llvm::Triple::UnknownVendor ||
751 TT.getOS() == llvm::Triple::UnknownOS) {
752 if (TT.getArch() == llvm::Triple::nvptx)
753 return llvm::Triple(
"nvptx-nvidia-cuda");
754 if (TT.getArch() == llvm::Triple::nvptx64)
755 return llvm::Triple(
"nvptx64-nvidia-cuda");
756 if (TT.getArch() == llvm::Triple::amdgcn)
757 return llvm::Triple(
"amdgcn-amd-amdhsa");
770 TC.setEffectiveTriple(std::move(T));
780 #endif // LLVM_CLANG_DRIVER_TOOLCHAIN_H
ParsedClangName(std::string Suffix, const char *Mode)
YAML serialization mapping.
Helper structure used to pass information extracted from clang executable name such as i686-linux-and...
ParsedClangName()=default
The base class of the type hierarchy.
const char * DriverMode
Corresponding driver mode argument, as '–driver-mode=g++'.
bool TargetIsValid
True if TargetPrefix is recognized as a registered target name.
This corresponds to a single GCC Multilib, or a segment of one controlled by a command line flag.
~RegisterEffectiveTriple()
std::string TargetPrefix
Target part of the executable name, as i686-linux-android.
ParsedClangName(std::string Target, std::string Suffix, const char *Mode, bool IsRegistered)
RegisterEffectiveTriple(const ToolChain &TC, llvm::Triple T)
The basic abstraction for the target Objective-C runtime.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Set a ToolChain's effective triple.
std::string ModeSuffix
Driver mode part of the executable name, as g++.