23 #include "llvm/Option/ArgList.h"
24 #include "llvm/Support/Host.h"
25 using namespace clang;
26 using namespace llvm::opt;
43 Args.push_back(
"<clang>");
44 Args.insert(Args.end(), ArgList.begin(), ArgList.end());
47 Args.push_back(
"-fsyntax-only");
50 driver::Driver TheDriver(
"clang", llvm::sys::getDefaultTargetTriple(),
59 if (
C->getArgs().hasArg(driver::options::OPT__HASH_HASH_HASH)) {
60 C->getJobs().Print(llvm::errs(),
"\n",
true);
70 bool CudaCompilation =
false;
71 if (Jobs.
size() > 1) {
72 for (
auto &A :
C->getActions()){
74 if (isa<driver::BindArchAction>(A))
76 if (isa<driver::CudaDeviceAction>(A)) {
77 CudaCompilation =
true;
82 if (Jobs.
size() == 0 || !isa<driver::Command>(*Jobs.
begin()) ||
83 (Jobs.
size() > 1 && !CudaCompilation)) {
85 llvm::raw_svector_ostream OS(Msg);
86 Jobs.
Print(OS,
"; ",
true);
87 Diags->Report(diag::err_fe_expected_compiler_job) << OS.str();
93 Diags->Report(diag::err_fe_expected_clang_command);
100 const_cast<const char **>(CCArgs.data()),
101 const_cast<const char **>(CCArgs.data()) +
void createDiagnostics(DiagnosticConsumer *Client=nullptr, bool ShouldOwnClient=true)
static bool CreateFromArgs(CompilerInvocation &Res, const char *const *ArgBegin, const char *const *ArgEnd, DiagnosticsEngine &Diags)
Create a compiler invocation from a list of input options.
Compilation * BuildCompilation(ArrayRef< const char * > Args)
const Tool & getCreator() const
getCreator - Return the Tool which caused the creation of this job.
JobList - A sequence of jobs to perform.
void setCheckInputsExist(bool Value)
Options for controlling the compiler diagnostics engine.
const llvm::opt::ArgStringList & getArguments() const
CompilerInvocation * createInvocationFromCommandLine(ArrayRef< const char * > Args, IntrusiveRefCntPtr< DiagnosticsEngine > Diags=IntrusiveRefCntPtr< DiagnosticsEngine >())
Helper class for holding the data necessary to invoke the compiler.
void Print(llvm::raw_ostream &OS, const char *Terminator, bool Quote, CrashReportInfo *CrashInfo=nullptr) const