10 #ifndef LLVM_CLANG_DRIVER_COMPILATION_H
11 #define LLVM_CLANG_DRIVER_COMPILATION_H
16 #include "llvm/ADT/DenseMap.h"
17 #include "llvm/Support/Path.h"
44 unsigned ActiveOffloadMask;
50 std::multimap<Action::OffloadKind, const ToolChain *>
51 OrderedOffloadingToolchains;
54 llvm::opt::InputArgList *Args;
58 llvm::opt::DerivedArgList *TranslatedArgs;
62 std::vector<std::unique_ptr<Action>> AllActions;
73 llvm::DenseMap<std::pair<const ToolChain *, const char *>,
74 llvm::opt::DerivedArgList *> TCArgs;
77 llvm::opt::ArgStringList TempFiles;
87 const StringRef **Redirects;
94 llvm::opt::InputArgList *Args,
95 llvm::opt::DerivedArgList *TranslatedArgs);
103 return ActiveOffloadMask &
Kind;
114 template <Action::OffloadKind Kind>
116 return OrderedOffloadingToolchains.equal_range(
Kind);
121 template <Action::OffloadKind Kind>
123 auto TCs = getOffloadToolChains<Kind>();
125 assert(TCs.first != TCs.second &&
126 "No tool chains of the selected kind exist!");
127 assert(std::next(TCs.first) == TCs.second &&
128 "More than one tool chain of the this kind exist.");
129 return TCs.first->second;
135 "This is not a device tool chain!");
138 ActiveOffloadMask |= OffloadKind;
139 OrderedOffloadingToolchains.insert(
140 std::make_pair(OffloadKind, DeviceToolChain));
145 const llvm::opt::DerivedArgList &
getArgs()
const {
return *TranslatedArgs; }
147 llvm::opt::DerivedArgList &
getArgs() {
return *TranslatedArgs; }
155 template <
typename T,
typename... Args> T *
MakeAction(Args &&... Arg) {
156 T *RawPtr =
new T(std::forward<Args>(Arg)...);
157 AllActions.push_back(std::unique_ptr<Action>(RawPtr));
166 const llvm::opt::ArgStringList &
getTempFiles()
const {
return TempFiles; }
171 return FailureResultFiles;
182 const char *BoundArch);
187 TempFiles.push_back(Name);
194 ResultFiles[JA] =
Name;
201 FailureResultFiles[JA] =
Name;
209 bool CleanupFile(
const char *File,
bool IssueErrors =
false)
const;
216 bool IssueErrors =
false)
const;
226 bool IssueErrors =
false)
const;
241 SmallVectorImpl<std::pair<int, const Command *>> &FailingCommands)
const;
258 void Redirect(
const StringRef** Redirects);
const Driver & getDriver() const
const ArgStringMap & getResultFiles() const
T * MakeAction(Args &&...Arg)
Creates a new Action owned by this Compilation.
bool CleanupFile(const char *File, bool IssueErrors=false) const
CleanupFile - Delete a given file.
void addOffloadDeviceToolChain(const ToolChain *DeviceToolChain, Action::OffloadKind OffloadKind)
class LLVM_ALIGNAS(8) DependentTemplateSpecializationType const IdentifierInfo * Name
Represents a template specialization type whose template cannot be resolved, e.g. ...
const std::multimap< Action::OffloadKind, const ToolChain * >::const_iterator const_offload_toolchains_iterator
Iterator that visits device toolchains of a given kind.
const llvm::opt::DerivedArgList & getArgs() const
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Compilation(const Driver &D, const ToolChain &DefaultToolChain, llvm::opt::InputArgList *Args, llvm::opt::DerivedArgList *TranslatedArgs)
unsigned isOffloadingHostKind(Action::OffloadKind Kind) const
llvm::opt::DerivedArgList & getArgs()
bool isForDiagnostics() const
Return true if we're compiling for diagnostics.
const ToolChain * getSingleOffloadToolChain() const
Return an offload toolchain of the provided kind.
bool CleanupFileList(const llvm::opt::ArgStringList &Files, bool IssueErrors=false) const
CleanupFileList - Remove the files in the given list.
void addCommand(std::unique_ptr< Command > C)
JobList - A sequence of jobs to perform.
void addJob(std::unique_ptr< Command > J)
Add a job to the list (taking ownership).
llvm::DenseMap< const JobAction *, const char * > ArgStringMap
ArgStringMap - Type used to map a JobAction to its result file.
bool CleanupFileMap(const ArgStringMap &Files, const JobAction *JA, bool IssueErrors=false) const
CleanupFileMap - Remove the files in the given map.
void Redirect(const StringRef **Redirects)
Redirect - Redirect output of this compilation.
const_offload_toolchains_range getOffloadToolChains() const
Command - An executable path/name and argument vector to execute.
const char * addResultFile(const char *Name, const JobAction *JA)
addResultFile - Add a file to remove on failure, and returns its argument.
const llvm::opt::DerivedArgList & getArgsForToolChain(const ToolChain *TC, const char *BoundArch)
getArgsForToolChain - Return the derived argument list for the tool chain TC (or the default tool cha...
const ToolChain & getDefaultToolChain() const
const ArgStringMap & getFailureResultFiles() const
const ActionList & getActions() const
ActionList & getActions()
void ExecuteJobs(const JobList &Jobs, SmallVectorImpl< std::pair< int, const Command * >> &FailingCommands) const
ExecuteJob - Execute a single job.
Compilation - A set of tasks to perform for a single driver invocation.
int ExecuteCommand(const Command &C, const Command *&FailingCommand) const
ExecuteCommand - Execute an actual command.
const llvm::opt::InputArgList & getInputArgs() const
StringRef getSysRoot() const
Returns the sysroot path.
const char * addFailureResultFile(const char *Name, const JobAction *JA)
addFailureResultFile - Add a file to remove if we crash, and returns its argument.
const llvm::opt::ArgStringList & getTempFiles() const
std::pair< const_offload_toolchains_iterator, const_offload_toolchains_iterator > const_offload_toolchains_range
const char * addTempFile(const char *Name)
addTempFile - Add a file to remove on exit, and returns its argument.
const JobList & getJobs() const
void initCompilationForDiagnostics()
initCompilationForDiagnostics - Remove stale state and suppress output so compilation can be reexecut...