9 #ifndef LLVM_CLANG_DRIVER_TOOLCHAIN_H
10 #define LLVM_CLANG_DRIVER_TOOLCHAIN_H
18 #include "llvm/ADT/APFloat.h"
19 #include "llvm/ADT/ArrayRef.h"
20 #include "llvm/ADT/FloatingPointMode.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/StringRef.h"
23 #include "llvm/Frontend/Debug/Options.h"
24 #include "llvm/MC/MCTargetOptions.h"
25 #include "llvm/Option/Option.h"
26 #include "llvm/Support/VersionTuple.h"
27 #include "llvm/Target/TargetOptions.h"
28 #include "llvm/TargetParser/Triple.h"
142 const llvm::opt::ArgList &Args;
145 const llvm::opt::Arg *
const CachedRTTIArg;
160 mutable std::unique_ptr<Tool> Clang;
161 mutable std::unique_ptr<Tool> Flang;
162 mutable std::unique_ptr<Tool>
Assemble;
163 mutable std::unique_ptr<Tool>
Link;
164 mutable std::unique_ptr<Tool> StaticLibTool;
165 mutable std::unique_ptr<Tool>
IfsMerge;
167 mutable std::unique_ptr<Tool> OffloadWrapper;
168 mutable std::unique_ptr<Tool> OffloadPackager;
169 mutable std::unique_ptr<Tool> OffloadDeps;
170 mutable std::unique_ptr<Tool> SPIRVTranslator;
171 mutable std::unique_ptr<Tool> SYCLPostLink;
172 mutable std::unique_ptr<Tool> BackendCompiler;
173 mutable std::unique_ptr<Tool> AppendFooter;
174 mutable std::unique_ptr<Tool> FileTableTform;
175 mutable std::unique_ptr<Tool> SpirvToIrWrapper;
176 mutable std::unique_ptr<Tool> LinkerWrapper;
178 Tool *getClang()
const;
179 Tool *getFlang()
const;
180 Tool *getAssemble()
const;
181 Tool *getLink()
const;
182 Tool *getStaticLibTool()
const;
183 Tool *getIfsMerge()
const;
184 Tool *getClangAs()
const;
185 Tool *getOffloadBundler()
const;
186 Tool *getOffloadWrapper()
const;
187 Tool *getOffloadPackager()
const;
188 Tool *getOffloadDeps()
const;
189 Tool *getSPIRVTranslator()
const;
190 Tool *getSYCLPostLink()
const;
191 Tool *getBackendCompiler()
const;
192 Tool *getAppendFooter()
const;
193 Tool *getTableTform()
const;
194 Tool *getSpirvToIrWrapper()
const;
195 Tool *getLinkerWrapper()
const;
197 mutable bool SanitizerArgsChecked =
false;
198 mutable std::unique_ptr<XRayArgs> XRayArguments;
201 mutable llvm::Triple EffectiveTriple;
204 void setEffectiveTriple(llvm::Triple ET)
const {
205 EffectiveTriple = std::move(ET);
208 std::optional<std::string>
209 getFallbackAndroidTargetPath(StringRef BaseDir)
const;
211 mutable std::optional<CXXStdlibType> cxxStdlibType;
212 mutable std::optional<RuntimeLibType> runtimeLibType;
213 mutable std::optional<UnwindLibType> unwindLibType;
220 const llvm::opt::ArgList &Args);
247 llvm::opt::ArgStringList &CC1Args,
250 llvm::opt::ArgStringList &CC1Args,
254 llvm::opt::ArgStringList &CC1Args,
257 llvm::opt::ArgStringList &CC1Args,
260 static std::string
concat(StringRef Path,
const Twine &A,
const Twine &B =
"",
261 const Twine &
C =
"",
const Twine &D =
"");
270 llvm::vfs::FileSystem &
getVFS()
const;
271 const llvm::Triple &
getTriple()
const {
return Triple; }
285 llvm::Triple::ArchType
getArch()
const {
return Triple.getArch(); }
288 StringRef
getOS()
const {
return Triple.getOSName(); }
295 return Triple.getTriple();
300 assert(!EffectiveTriple.getTriple().empty() &&
"No effective triple");
301 return EffectiveTriple;
305 return !EffectiveTriple.getTriple().empty();
340 const llvm::opt::Arg *
getRTTIArg()
const {
return CachedRTTIArg; }
374 virtual llvm::opt::DerivedArgList *
385 const llvm::opt::DerivedArgList &Args,
bool SameTripleAsHost,
393 const llvm::opt::DerivedArgList &Args, llvm::opt::Arg *&A,
394 llvm::opt::DerivedArgList *DAL,
400 virtual llvm::opt::DerivedArgList *
422 std::string
GetLinkerPath(
bool *LinkerIsLLD =
nullptr)
const;
529 virtual std::string
getCompilerRT(
const llvm::opt::ArgList &Args,
590 return llvm::codegenoptions::DIF_DWARF;
617 return llvm::DebuggerKind::GDB;
628 const llvm::opt::ArgList &Args)
const {}
631 virtual llvm::ExceptionHandling
647 const llvm::Triple &TargetTriple,
648 StringRef SysRoot)
const {
649 return TargetTriple.str();
664 const llvm::opt::ArgList &Args,
690 llvm::opt::ArgStringList &CC1Args)
const;
694 llvm::opt::ArgStringList &CC1Args,
700 llvm::opt::ArgStringList &CC1ASArgs)
const;
725 llvm::opt::ArgStringList &CC1Args)
const;
730 llvm::opt::ArgStringList &CC1Args)
const;
739 llvm::opt::ArgStringList &CmdArgs)
const;
743 llvm::opt::ArgStringList &CmdArgs)
const;
748 llvm::opt::ArgStringList &CmdArgs)
const;
755 const llvm::opt::ArgList &Args, std::string &Path)
const;
762 const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs)
const;
771 llvm::opt::ArgStringList &CmdArgs)
const;
775 llvm::opt::ArgStringList &CC1Args)
const;
779 llvm::opt::ArgStringList &CC1Args)
const;
783 llvm::opt::ArgStringList &CC1Args)
const;
787 const llvm::opt::ArgList &Args)
const;
797 llvm::opt::ArgStringList &CmdArgs)
const {}
815 const llvm::opt::ArgList &DriverArgs,
const JobAction &JA,
816 const llvm::fltSemantics *FPType =
nullptr)
const {
817 return llvm::DenormalMode::getIEEE();
823 llvm::Triple TT(TripleStr);
824 if (TT.getVendor() == llvm::Triple::UnknownVendor ||
825 TT.getOS() == llvm::Triple::UnknownOS) {
826 if (TT.getArch() == llvm::Triple::nvptx)
827 return llvm::Triple(
"nvptx-nvidia-cuda");
828 if (TT.getArch() == llvm::Triple::nvptx64)
829 return llvm::Triple(
"nvptx64-nvidia-cuda");
830 if (TT.getArch() == llvm::Triple::amdgcn)
831 return llvm::Triple(
"amdgcn-amd-amdhsa");
844 TC.setEffectiveTriple(std::move(
T));
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::LangOptions interface.
llvm::MachO::FileType FileType
llvm::MachO::Target Target
Defines the clang::SanitizerKind enum.
The basic abstraction for the target Objective-C runtime.
The base class of the type hierarchy.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
See also MultilibSetBuilder for combining multilibs into a set.
std::vector< std::string > flags_list
Set a ToolChain's effective triple.
~RegisterEffectiveTriple()
RegisterEffectiveTriple(const ToolChain &TC, llvm::Triple T)
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
Diagnostic wrappers for TextAPI types for error reporting.
Helper structure used to pass information extracted from clang executable name such as i686-linux-and...
ParsedClangName(std::string Suffix, const char *Mode)
ParsedClangName()=default
const char * DriverMode
Corresponding driver mode argument, as '–driver-mode=g++'.
std::string ModeSuffix
Driver mode part of the executable name, as g++.
std::string TargetPrefix
Target part of the executable name, as i686-linux-android.
bool TargetIsValid
True if TargetPrefix is recognized as a registered target name.
ParsedClangName(std::string Target, std::string Suffix, const char *Mode, bool IsRegistered)