22 #include "llvm/ADT/STLExtras.h"
23 #include "llvm/ADT/StringRef.h"
24 #include "llvm/Option/ArgList.h"
25 #include "llvm/Support/Host.h"
26 using namespace clang;
29 std::unique_ptr<CompilerInvocation>
32 assert(!ArgList.empty());
33 auto Diags = Opts.
Diags
34 ? std::move(Opts.
Diags)
42 Args, [](
const char *Elem) {
return llvm::StringRef(Elem) ==
"--"; }),
46 driver::Driver TheDriver(Args[0], llvm::sys::getDefaultTargetTriple(), *Diags,
47 "clang LLVM compiler", Opts.
VFS);
58 if (C->getArgs().hasArg(driver::options::OPT__HASH_HASH_HASH)) {
59 C->getJobs().Print(llvm::errs(),
"\n",
true);
69 bool OffloadCompilation =
false;
70 if (Jobs.
size() > 1) {
71 for (
auto &A : C->getActions()){
73 if (isa<driver::BindArchAction>(A))
74 A = *A->input_begin();
75 if (isa<driver::OffloadAction>(A)) {
76 OffloadCompilation =
true;
83 if (Jobs.
size() == 0 || (Jobs.
size() > 1 && !PickFirstOfMany)) {
85 llvm::raw_svector_ostream OS(Msg);
86 Jobs.
Print(OS,
"; ",
true);
87 Diags->Report(diag::err_fe_expected_compiler_job) << OS.str();
91 return StringRef(
Cmd.getCreator().getName()) ==
"clang";
94 Diags->Report(diag::err_fe_expected_clang_command);
98 const ArgStringList &CCArgs =
Cmd->getArguments();
100 *Opts.
CC1Args = {CCArgs.begin(), CCArgs.end()};
101 auto CI = std::make_unique<CompilerInvocation>();