Driver.cpp revision 73052bf669d3fe4c202cff2792cfe215cf5727be
1//===--- Driver.cpp - Clang GCC Compatible Driver -------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "clang/Driver/Driver.h"
11#include "InputInfo.h"
12#include "ToolChains.h"
13#include "clang/Basic/Version.h"
14#include "clang/Driver/Action.h"
15#include "clang/Driver/Compilation.h"
16#include "clang/Driver/DriverDiagnostic.h"
17#include "clang/Driver/Job.h"
18#include "clang/Driver/Options.h"
19#include "clang/Driver/Tool.h"
20#include "clang/Driver/ToolChain.h"
21#include "llvm/ADT/ArrayRef.h"
22#include "llvm/ADT/OwningPtr.h"
23#include "llvm/ADT/STLExtras.h"
24#include "llvm/ADT/StringSet.h"
25#include "llvm/ADT/StringSwitch.h"
26#include "llvm/Option/Arg.h"
27#include "llvm/Option/ArgList.h"
28#include "llvm/Option/OptTable.h"
29#include "llvm/Option/Option.h"
30#include "llvm/Option/OptSpecifier.h"
31#include "llvm/Support/Debug.h"
32#include "llvm/Support/ErrorHandling.h"
33#include "llvm/Support/FileSystem.h"
34#include "llvm/Support/Path.h"
35#include "llvm/Support/PrettyStackTrace.h"
36#include "llvm/Support/Program.h"
37#include "llvm/Support/raw_ostream.h"
38#include <map>
39
40// FIXME: It would prevent us from including llvm-config.h
41// if config.h were included before system_error.h.
42#include "clang/Config/config.h"
43
44using namespace clang::driver;
45using namespace clang;
46using namespace llvm::opt;
47
48Driver::Driver(StringRef ClangExecutable,
49               StringRef DefaultTargetTriple,
50               StringRef DefaultImageName,
51               DiagnosticsEngine &Diags)
52  : Opts(createDriverOptTable()), Diags(Diags), Mode(GCCMode),
53    ClangExecutable(ClangExecutable), SysRoot(DEFAULT_SYSROOT),
54    UseStdLib(true), DefaultTargetTriple(DefaultTargetTriple),
55    DefaultImageName(DefaultImageName),
56    DriverTitle("clang LLVM compiler"),
57    CCPrintOptionsFilename(0), CCPrintHeadersFilename(0),
58    CCLogDiagnosticsFilename(0),
59    CCCPrintBindings(false),
60    CCPrintOptions(false), CCPrintHeaders(false), CCLogDiagnostics(false),
61    CCGenDiagnostics(false), CCCGenericGCCName(""), CheckInputsExist(true),
62    CCCUsePCH(true), SuppressMissingInputWarning(false) {
63
64  Name = llvm::sys::path::stem(ClangExecutable);
65  Dir  = llvm::sys::path::parent_path(ClangExecutable);
66
67  // Compute the path to the resource directory.
68  StringRef ClangResourceDir(CLANG_RESOURCE_DIR);
69  SmallString<128> P(Dir);
70  if (ClangResourceDir != "")
71    llvm::sys::path::append(P, ClangResourceDir);
72  else
73    llvm::sys::path::append(P, "..", "lib", "clang", CLANG_VERSION_STRING);
74  ResourceDir = P.str();
75}
76
77Driver::~Driver() {
78  delete Opts;
79
80  for (llvm::StringMap<ToolChain *>::iterator I = ToolChains.begin(),
81                                              E = ToolChains.end();
82       I != E; ++I)
83    delete I->second;
84}
85
86void Driver::ParseDriverMode(ArrayRef<const char *> Args) {
87  const std::string OptName =
88    getOpts().getOption(options::OPT_driver_mode).getPrefixedName();
89
90  for (size_t I = 0, E = Args.size(); I != E; ++I) {
91    const StringRef Arg = Args[I];
92    if (!Arg.startswith(OptName))
93      continue;
94
95    const StringRef Value = Arg.drop_front(OptName.size());
96    const unsigned M = llvm::StringSwitch<unsigned>(Value)
97        .Case("gcc", GCCMode)
98        .Case("g++", GXXMode)
99        .Case("cpp", CPPMode)
100        .Case("cl",  CLMode)
101        .Default(~0U);
102
103    if (M != ~0U)
104      Mode = static_cast<DriverMode>(M);
105    else
106      Diag(diag::err_drv_unsupported_option_argument) << OptName << Value;
107  }
108}
109
110InputArgList *Driver::ParseArgStrings(ArrayRef<const char *> ArgList) {
111  llvm::PrettyStackTraceString CrashInfo("Command line argument parsing");
112
113  unsigned IncludedFlagsBitmask;
114  unsigned ExcludedFlagsBitmask;
115  llvm::tie(IncludedFlagsBitmask, ExcludedFlagsBitmask) =
116    getIncludeExcludeOptionFlagMasks();
117
118  unsigned MissingArgIndex, MissingArgCount;
119  InputArgList *Args = getOpts().ParseArgs(ArgList.begin(), ArgList.end(),
120                                           MissingArgIndex, MissingArgCount,
121                                           IncludedFlagsBitmask,
122                                           ExcludedFlagsBitmask);
123
124  // Check for missing argument error.
125  if (MissingArgCount)
126    Diag(clang::diag::err_drv_missing_argument)
127      << Args->getArgString(MissingArgIndex) << MissingArgCount;
128
129  // Check for unsupported options.
130  for (ArgList::const_iterator it = Args->begin(), ie = Args->end();
131       it != ie; ++it) {
132    Arg *A = *it;
133    if (A->getOption().hasFlag(options::Unsupported)) {
134      Diag(clang::diag::err_drv_unsupported_opt) << A->getAsString(*Args);
135      continue;
136    }
137
138    // Warn about -mcpu= without an argument.
139    if (A->getOption().matches(options::OPT_mcpu_EQ) &&
140        A->containsValue("")) {
141      Diag(clang::diag::warn_drv_empty_joined_argument) <<
142        A->getAsString(*Args);
143    }
144  }
145
146  return Args;
147}
148
149// Determine which compilation mode we are in. We look for options which
150// affect the phase, starting with the earliest phases, and record which
151// option we used to determine the final phase.
152phases::ID Driver::getFinalPhase(const DerivedArgList &DAL, Arg **FinalPhaseArg)
153const {
154  Arg *PhaseArg = 0;
155  phases::ID FinalPhase;
156
157  // -{E,M,MM} only run the preprocessor.
158  if (CCCIsCPP() ||
159      (PhaseArg = DAL.getLastArg(options::OPT_E)) ||
160      (PhaseArg = DAL.getLastArg(options::OPT_M, options::OPT_MM))) {
161    FinalPhase = phases::Preprocess;
162
163    // -{fsyntax-only,-analyze,emit-ast,S} only run up to the compiler.
164  } else if ((PhaseArg = DAL.getLastArg(options::OPT_fsyntax_only)) ||
165             (PhaseArg = DAL.getLastArg(options::OPT_module_file_info)) ||
166             (PhaseArg = DAL.getLastArg(options::OPT_rewrite_objc)) ||
167             (PhaseArg = DAL.getLastArg(options::OPT_rewrite_legacy_objc)) ||
168             (PhaseArg = DAL.getLastArg(options::OPT__migrate)) ||
169             (PhaseArg = DAL.getLastArg(options::OPT__analyze,
170                                        options::OPT__analyze_auto)) ||
171             (PhaseArg = DAL.getLastArg(options::OPT_emit_ast)) ||
172             (PhaseArg = DAL.getLastArg(options::OPT_S))) {
173    FinalPhase = phases::Compile;
174
175    // -c only runs up to the assembler.
176  } else if ((PhaseArg = DAL.getLastArg(options::OPT_c))) {
177    FinalPhase = phases::Assemble;
178
179    // Otherwise do everything.
180  } else
181    FinalPhase = phases::Link;
182
183  if (FinalPhaseArg)
184    *FinalPhaseArg = PhaseArg;
185
186  return FinalPhase;
187}
188
189static Arg* MakeInputArg(const DerivedArgList &Args, OptTable *Opts,
190                         StringRef Value) {
191  Arg *A = new Arg(Opts->getOption(options::OPT_INPUT), Value,
192                   Args.getBaseArgs().MakeIndex(Value), Value.data());
193  A->claim();
194  return A;
195}
196
197DerivedArgList *Driver::TranslateInputArgs(const InputArgList &Args) const {
198  DerivedArgList *DAL = new DerivedArgList(Args);
199
200  bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
201  for (ArgList::const_iterator it = Args.begin(),
202         ie = Args.end(); it != ie; ++it) {
203    const Arg *A = *it;
204
205    // Unfortunately, we have to parse some forwarding options (-Xassembler,
206    // -Xlinker, -Xpreprocessor) because we either integrate their functionality
207    // (assembler and preprocessor), or bypass a previous driver ('collect2').
208
209    // Rewrite linker options, to replace --no-demangle with a custom internal
210    // option.
211    if ((A->getOption().matches(options::OPT_Wl_COMMA) ||
212         A->getOption().matches(options::OPT_Xlinker)) &&
213        A->containsValue("--no-demangle")) {
214      // Add the rewritten no-demangle argument.
215      DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_Xlinker__no_demangle));
216
217      // Add the remaining values as Xlinker arguments.
218      for (unsigned i = 0, e = A->getNumValues(); i != e; ++i)
219        if (StringRef(A->getValue(i)) != "--no-demangle")
220          DAL->AddSeparateArg(A, Opts->getOption(options::OPT_Xlinker),
221                              A->getValue(i));
222
223      continue;
224    }
225
226    // Rewrite preprocessor options, to replace -Wp,-MD,FOO which is used by
227    // some build systems. We don't try to be complete here because we don't
228    // care to encourage this usage model.
229    if (A->getOption().matches(options::OPT_Wp_COMMA) &&
230        (A->getValue(0) == StringRef("-MD") ||
231         A->getValue(0) == StringRef("-MMD"))) {
232      // Rewrite to -MD/-MMD along with -MF.
233      if (A->getValue(0) == StringRef("-MD"))
234        DAL->AddFlagArg(A, Opts->getOption(options::OPT_MD));
235      else
236        DAL->AddFlagArg(A, Opts->getOption(options::OPT_MMD));
237      if (A->getNumValues() == 2)
238        DAL->AddSeparateArg(A, Opts->getOption(options::OPT_MF),
239                            A->getValue(1));
240      continue;
241    }
242
243    // Rewrite reserved library names.
244    if (A->getOption().matches(options::OPT_l)) {
245      StringRef Value = A->getValue();
246
247      // Rewrite unless -nostdlib is present.
248      if (!HasNostdlib && Value == "stdc++") {
249        DAL->AddFlagArg(A, Opts->getOption(
250                              options::OPT_Z_reserved_lib_stdcxx));
251        continue;
252      }
253
254      // Rewrite unconditionally.
255      if (Value == "cc_kext") {
256        DAL->AddFlagArg(A, Opts->getOption(
257                              options::OPT_Z_reserved_lib_cckext));
258        continue;
259      }
260    }
261
262    // Pick up inputs via the -- option.
263    if (A->getOption().matches(options::OPT__DASH_DASH)) {
264      A->claim();
265      for (unsigned i = 0, e = A->getNumValues(); i != e; ++i)
266        DAL->append(MakeInputArg(*DAL, Opts, A->getValue(i)));
267      continue;
268    }
269
270    DAL->append(*it);
271  }
272
273  // Add a default value of -mlinker-version=, if one was given and the user
274  // didn't specify one.
275#if defined(HOST_LINK_VERSION)
276  if (!Args.hasArg(options::OPT_mlinker_version_EQ)) {
277    DAL->AddJoinedArg(0, Opts->getOption(options::OPT_mlinker_version_EQ),
278                      HOST_LINK_VERSION);
279    DAL->getLastArg(options::OPT_mlinker_version_EQ)->claim();
280  }
281#endif
282
283  return DAL;
284}
285
286/// \brief Check whether there are multiple instances of OptionID in Args, and
287/// if so, issue a diagnostics about it.
288static void DiagnoseOptionOverride(const Driver &D, const DerivedArgList &Args,
289                                   unsigned OptionID) {
290  assert(Args.hasArg(OptionID));
291
292  arg_iterator it = Args.filtered_begin(OptionID);
293  arg_iterator ie = Args.filtered_end();
294  Arg *Previous = *it;
295  ++it;
296
297  while (it != ie) {
298    D.Diag(clang::diag::warn_drv_overriding_joined_option)
299        << Previous->getSpelling() << Previous->getValue()
300        << (*it)->getSpelling() << (*it)->getValue();
301    Previous = *it;
302    ++it;
303  }
304}
305
306Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
307  llvm::PrettyStackTraceString CrashInfo("Compilation construction");
308
309  // FIXME: Handle environment options which affect driver behavior, somewhere
310  // (client?). GCC_EXEC_PREFIX, LPATH, CC_PRINT_OPTIONS.
311
312  if (char *env = ::getenv("COMPILER_PATH")) {
313    StringRef CompilerPath = env;
314    while (!CompilerPath.empty()) {
315      std::pair<StringRef, StringRef> Split
316        = CompilerPath.split(llvm::sys::EnvPathSeparator);
317      PrefixDirs.push_back(Split.first);
318      CompilerPath = Split.second;
319    }
320  }
321
322  // We look for the driver mode option early, because the mode can affect
323  // how other options are parsed.
324  ParseDriverMode(ArgList.slice(1));
325
326  // FIXME: What are we going to do with -V and -b?
327
328  // FIXME: This stuff needs to go into the Compilation, not the driver.
329  bool CCCPrintOptions, CCCPrintActions;
330
331  InputArgList *Args = ParseArgStrings(ArgList.slice(1));
332
333  // -no-canonical-prefixes is used very early in main.
334  Args->ClaimAllArgs(options::OPT_no_canonical_prefixes);
335
336  // Ignore -pipe.
337  Args->ClaimAllArgs(options::OPT_pipe);
338
339  // Extract -ccc args.
340  //
341  // FIXME: We need to figure out where this behavior should live. Most of it
342  // should be outside in the client; the parts that aren't should have proper
343  // options, either by introducing new ones or by overloading gcc ones like -V
344  // or -b.
345  CCCPrintOptions = Args->hasArg(options::OPT_ccc_print_options);
346  CCCPrintActions = Args->hasArg(options::OPT_ccc_print_phases);
347  CCCPrintBindings = Args->hasArg(options::OPT_ccc_print_bindings);
348  if (const Arg *A = Args->getLastArg(options::OPT_ccc_gcc_name))
349    CCCGenericGCCName = A->getValue();
350  CCCUsePCH = Args->hasFlag(options::OPT_ccc_pch_is_pch,
351                            options::OPT_ccc_pch_is_pth);
352  // FIXME: DefaultTargetTriple is used by the target-prefixed calls to as/ld
353  // and getToolChain is const.
354  if (const Arg *A = Args->getLastArg(options::OPT_target))
355    DefaultTargetTriple = A->getValue();
356  if (const Arg *A = Args->getLastArg(options::OPT_ccc_install_dir))
357    Dir = InstalledDir = A->getValue();
358  for (arg_iterator it = Args->filtered_begin(options::OPT_B),
359         ie = Args->filtered_end(); it != ie; ++it) {
360    const Arg *A = *it;
361    A->claim();
362    PrefixDirs.push_back(A->getValue(0));
363  }
364  if (const Arg *A = Args->getLastArg(options::OPT__sysroot_EQ))
365    SysRoot = A->getValue();
366  if (const Arg *A = Args->getLastArg(options::OPT__dyld_prefix_EQ))
367    DyldPrefix = A->getValue();
368  if (Args->hasArg(options::OPT_nostdlib))
369    UseStdLib = false;
370
371  if (const Arg *A = Args->getLastArg(options::OPT_resource_dir))
372    ResourceDir = A->getValue();
373
374  // Perform the default argument translations.
375  DerivedArgList *TranslatedArgs = TranslateInputArgs(*Args);
376
377  // Owned by the host.
378  const ToolChain &TC = getToolChain(*Args);
379
380  // The compilation takes ownership of Args.
381  Compilation *C = new Compilation(*this, TC, Args, TranslatedArgs);
382
383  // FIXME: This behavior shouldn't be here.
384  if (CCCPrintOptions) {
385    PrintOptions(C->getInputArgs());
386    return C;
387  }
388
389  if (!HandleImmediateArgs(*C))
390    return C;
391
392  // Construct the list of inputs.
393  InputList Inputs;
394  BuildInputs(C->getDefaultToolChain(), *TranslatedArgs, Inputs);
395
396  // Construct the list of abstract actions to perform for this compilation. On
397  // Darwin target OSes this uses the driver-driver and universal actions.
398  if (TC.getTriple().isOSDarwin())
399    BuildUniversalActions(C->getDefaultToolChain(), C->getArgs(),
400                          Inputs, C->getActions());
401  else
402    BuildActions(C->getDefaultToolChain(), C->getArgs(), Inputs,
403                 C->getActions());
404
405  if (CCCPrintActions) {
406    PrintActions(*C);
407    return C;
408  }
409
410  BuildJobs(*C);
411
412  return C;
413}
414
415// When clang crashes, produce diagnostic information including the fully
416// preprocessed source file(s).  Request that the developer attach the
417// diagnostic information to a bug report.
418void Driver::generateCompilationDiagnostics(Compilation &C,
419                                            const Command *FailingCommand) {
420  if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics))
421    return;
422
423  // Don't try to generate diagnostics for link or dsymutil jobs.
424  if (FailingCommand && (FailingCommand->getCreator().isLinkJob() ||
425                         FailingCommand->getCreator().isDsymutilJob()))
426    return;
427
428  // Print the version of the compiler.
429  PrintVersion(C, llvm::errs());
430
431  Diag(clang::diag::note_drv_command_failed_diag_msg)
432    << "PLEASE submit a bug report to " BUG_REPORT_URL " and include the "
433    "crash backtrace, preprocessed source, and associated run script.";
434
435  // Suppress driver output and emit preprocessor output to temp file.
436  Mode = CPPMode;
437  CCGenDiagnostics = true;
438  C.getArgs().AddFlagArg(0, Opts->getOption(options::OPT_frewrite_includes));
439
440  // Save the original job command(s).
441  std::string Cmd;
442  llvm::raw_string_ostream OS(Cmd);
443  if (FailingCommand)
444    C.PrintDiagnosticJob(OS, *FailingCommand);
445  else
446    // Crash triggered by FORCE_CLANG_DIAGNOSTICS_CRASH, which doesn't have an
447    // associated FailingCommand, so just pass all jobs.
448    C.PrintDiagnosticJob(OS, C.getJobs());
449  OS.flush();
450
451  // Keep track of whether we produce any errors while trying to produce
452  // preprocessed sources.
453  DiagnosticErrorTrap Trap(Diags);
454
455  // Suppress tool output.
456  C.initCompilationForDiagnostics();
457
458  // Construct the list of inputs.
459  InputList Inputs;
460  BuildInputs(C.getDefaultToolChain(), C.getArgs(), Inputs);
461
462  for (InputList::iterator it = Inputs.begin(), ie = Inputs.end(); it != ie;) {
463    bool IgnoreInput = false;
464
465    // Ignore input from stdin or any inputs that cannot be preprocessed.
466    if (!strcmp(it->second->getValue(), "-")) {
467      Diag(clang::diag::note_drv_command_failed_diag_msg)
468        << "Error generating preprocessed source(s) - ignoring input from stdin"
469        ".";
470      IgnoreInput = true;
471    } else if (types::getPreprocessedType(it->first) == types::TY_INVALID) {
472      IgnoreInput = true;
473    }
474
475    if (IgnoreInput) {
476      it = Inputs.erase(it);
477      ie = Inputs.end();
478    } else {
479      ++it;
480    }
481  }
482
483  if (Inputs.empty()) {
484    Diag(clang::diag::note_drv_command_failed_diag_msg)
485      << "Error generating preprocessed source(s) - no preprocessable inputs.";
486    return;
487  }
488
489  // Don't attempt to generate preprocessed files if multiple -arch options are
490  // used, unless they're all duplicates.
491  llvm::StringSet<> ArchNames;
492  for (ArgList::const_iterator it = C.getArgs().begin(), ie = C.getArgs().end();
493       it != ie; ++it) {
494    Arg *A = *it;
495    if (A->getOption().matches(options::OPT_arch)) {
496      StringRef ArchName = A->getValue();
497      ArchNames.insert(ArchName);
498    }
499  }
500  if (ArchNames.size() > 1) {
501    Diag(clang::diag::note_drv_command_failed_diag_msg)
502      << "Error generating preprocessed source(s) - cannot generate "
503      "preprocessed source with multiple -arch options.";
504    return;
505  }
506
507  // Construct the list of abstract actions to perform for this compilation. On
508  // Darwin OSes this uses the driver-driver and builds universal actions.
509  const ToolChain &TC = C.getDefaultToolChain();
510  if (TC.getTriple().isOSDarwin())
511    BuildUniversalActions(TC, C.getArgs(), Inputs, C.getActions());
512  else
513    BuildActions(TC, C.getArgs(), Inputs, C.getActions());
514
515  BuildJobs(C);
516
517  // If there were errors building the compilation, quit now.
518  if (Trap.hasErrorOccurred()) {
519    Diag(clang::diag::note_drv_command_failed_diag_msg)
520      << "Error generating preprocessed source(s).";
521    return;
522  }
523
524  // Generate preprocessed output.
525  SmallVector<std::pair<int, const Command *>, 4> FailingCommands;
526  C.ExecuteJob(C.getJobs(), FailingCommands);
527
528  // If the command succeeded, we are done.
529  if (FailingCommands.empty()) {
530    Diag(clang::diag::note_drv_command_failed_diag_msg)
531      << "\n********************\n\n"
532      "PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:\n"
533      "Preprocessed source(s) and associated run script(s) are located at:";
534    ArgStringList Files = C.getTempFiles();
535    for (ArgStringList::const_iterator it = Files.begin(), ie = Files.end();
536         it != ie; ++it) {
537      Diag(clang::diag::note_drv_command_failed_diag_msg) << *it;
538
539      std::string Err;
540      std::string Script = StringRef(*it).rsplit('.').first;
541      Script += ".sh";
542      llvm::raw_fd_ostream ScriptOS(
543          Script.c_str(), Err, llvm::sys::fs::F_Excl | llvm::sys::fs::F_Binary);
544      if (!Err.empty()) {
545        Diag(clang::diag::note_drv_command_failed_diag_msg)
546          << "Error generating run script: " + Script + " " + Err;
547      } else {
548        // Append the new filename with correct preprocessed suffix.
549        size_t I, E;
550        I = Cmd.find("-main-file-name ");
551        assert (I != std::string::npos && "Expected to find -main-file-name");
552        I += 16;
553        E = Cmd.find(" ", I);
554        assert (E != std::string::npos && "-main-file-name missing argument?");
555        StringRef OldFilename = StringRef(Cmd).slice(I, E);
556        StringRef NewFilename = llvm::sys::path::filename(*it);
557        I = StringRef(Cmd).rfind(OldFilename);
558        E = I + OldFilename.size();
559        I = Cmd.rfind(" ", I) + 1;
560        Cmd.replace(I, E - I, NewFilename.data(), NewFilename.size());
561        ScriptOS << Cmd;
562        Diag(clang::diag::note_drv_command_failed_diag_msg) << Script;
563      }
564    }
565    Diag(clang::diag::note_drv_command_failed_diag_msg)
566      << "\n\n********************";
567  } else {
568    // Failure, remove preprocessed files.
569    if (!C.getArgs().hasArg(options::OPT_save_temps))
570      C.CleanupFileList(C.getTempFiles(), true);
571
572    Diag(clang::diag::note_drv_command_failed_diag_msg)
573      << "Error generating preprocessed source(s).";
574  }
575}
576
577int Driver::ExecuteCompilation(const Compilation &C,
578    SmallVectorImpl< std::pair<int, const Command *> > &FailingCommands) const {
579  // Just print if -### was present.
580  if (C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
581    C.PrintJob(llvm::errs(), C.getJobs(), "\n", true);
582    return 0;
583  }
584
585  // If there were errors building the compilation, quit now.
586  if (Diags.hasErrorOccurred())
587    return 1;
588
589  C.ExecuteJob(C.getJobs(), FailingCommands);
590
591  // Remove temp files.
592  C.CleanupFileList(C.getTempFiles());
593
594  // If the command succeeded, we are done.
595  if (FailingCommands.empty())
596    return 0;
597
598  // Otherwise, remove result files and print extra information about abnormal
599  // failures.
600  for (SmallVectorImpl< std::pair<int, const Command *> >::iterator it =
601         FailingCommands.begin(), ie = FailingCommands.end(); it != ie; ++it) {
602    int Res = it->first;
603    const Command *FailingCommand = it->second;
604
605    // Remove result files if we're not saving temps.
606    if (!C.getArgs().hasArg(options::OPT_save_temps)) {
607      const JobAction *JA = cast<JobAction>(&FailingCommand->getSource());
608      C.CleanupFileMap(C.getResultFiles(), JA, true);
609
610      // Failure result files are valid unless we crashed.
611      if (Res < 0)
612        C.CleanupFileMap(C.getFailureResultFiles(), JA, true);
613    }
614
615    // Print extra information about abnormal failures, if possible.
616    //
617    // This is ad-hoc, but we don't want to be excessively noisy. If the result
618    // status was 1, assume the command failed normally. In particular, if it
619    // was the compiler then assume it gave a reasonable error code. Failures
620    // in other tools are less common, and they generally have worse
621    // diagnostics, so always print the diagnostic there.
622    const Tool &FailingTool = FailingCommand->getCreator();
623
624    if (!FailingCommand->getCreator().hasGoodDiagnostics() || Res != 1) {
625      // FIXME: See FIXME above regarding result code interpretation.
626      if (Res < 0)
627        Diag(clang::diag::err_drv_command_signalled)
628          << FailingTool.getShortName();
629      else
630        Diag(clang::diag::err_drv_command_failed)
631          << FailingTool.getShortName() << Res;
632    }
633  }
634  return 0;
635}
636
637void Driver::PrintOptions(const ArgList &Args) const {
638  unsigned i = 0;
639  for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
640       it != ie; ++it, ++i) {
641    Arg *A = *it;
642    llvm::errs() << "Option " << i << " - "
643                 << "Name: \"" << A->getOption().getPrefixedName() << "\", "
644                 << "Values: {";
645    for (unsigned j = 0; j < A->getNumValues(); ++j) {
646      if (j)
647        llvm::errs() << ", ";
648      llvm::errs() << '"' << A->getValue(j) << '"';
649    }
650    llvm::errs() << "}\n";
651  }
652}
653
654void Driver::PrintHelp(bool ShowHidden) const {
655  unsigned IncludedFlagsBitmask;
656  unsigned ExcludedFlagsBitmask;
657  llvm::tie(IncludedFlagsBitmask, ExcludedFlagsBitmask) =
658    getIncludeExcludeOptionFlagMasks();
659
660  ExcludedFlagsBitmask |= options::NoDriverOption;
661  if (!ShowHidden)
662    ExcludedFlagsBitmask |= HelpHidden;
663
664  getOpts().PrintHelp(llvm::outs(), Name.c_str(), DriverTitle.c_str(),
665                      IncludedFlagsBitmask, ExcludedFlagsBitmask);
666}
667
668void Driver::PrintVersion(const Compilation &C, raw_ostream &OS) const {
669  // FIXME: The following handlers should use a callback mechanism, we don't
670  // know what the client would like to do.
671  OS << getClangFullVersion() << '\n';
672  const ToolChain &TC = C.getDefaultToolChain();
673  OS << "Target: " << TC.getTripleString() << '\n';
674
675  // Print the threading model.
676  //
677  // FIXME: Implement correctly.
678  OS << "Thread model: " << "posix" << '\n';
679}
680
681/// PrintDiagnosticCategories - Implement the --print-diagnostic-categories
682/// option.
683static void PrintDiagnosticCategories(raw_ostream &OS) {
684  // Skip the empty category.
685  for (unsigned i = 1, max = DiagnosticIDs::getNumberOfCategories();
686       i != max; ++i)
687    OS << i << ',' << DiagnosticIDs::getCategoryNameFromID(i) << '\n';
688}
689
690bool Driver::HandleImmediateArgs(const Compilation &C) {
691  // The order these options are handled in gcc is all over the place, but we
692  // don't expect inconsistencies w.r.t. that to matter in practice.
693
694  if (C.getArgs().hasArg(options::OPT_dumpmachine)) {
695    llvm::outs() << C.getDefaultToolChain().getTripleString() << '\n';
696    return false;
697  }
698
699  if (C.getArgs().hasArg(options::OPT_dumpversion)) {
700    // Since -dumpversion is only implemented for pedantic GCC compatibility, we
701    // return an answer which matches our definition of __VERSION__.
702    //
703    // If we want to return a more correct answer some day, then we should
704    // introduce a non-pedantically GCC compatible mode to Clang in which we
705    // provide sensible definitions for -dumpversion, __VERSION__, etc.
706    llvm::outs() << "4.2.1\n";
707    return false;
708  }
709
710  if (C.getArgs().hasArg(options::OPT__print_diagnostic_categories)) {
711    PrintDiagnosticCategories(llvm::outs());
712    return false;
713  }
714
715  if (C.getArgs().hasArg(options::OPT_help) ||
716      C.getArgs().hasArg(options::OPT__help_hidden)) {
717    PrintHelp(C.getArgs().hasArg(options::OPT__help_hidden));
718    return false;
719  }
720
721  if (C.getArgs().hasArg(options::OPT__version)) {
722    // Follow gcc behavior and use stdout for --version and stderr for -v.
723    PrintVersion(C, llvm::outs());
724    return false;
725  }
726
727  if (C.getArgs().hasArg(options::OPT_v) ||
728      C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
729    PrintVersion(C, llvm::errs());
730    SuppressMissingInputWarning = true;
731  }
732
733  const ToolChain &TC = C.getDefaultToolChain();
734
735  if (C.getArgs().hasArg(options::OPT_v))
736    TC.printVerboseInfo(llvm::errs());
737
738  if (C.getArgs().hasArg(options::OPT_print_search_dirs)) {
739    llvm::outs() << "programs: =";
740    for (ToolChain::path_list::const_iterator it = TC.getProgramPaths().begin(),
741           ie = TC.getProgramPaths().end(); it != ie; ++it) {
742      if (it != TC.getProgramPaths().begin())
743        llvm::outs() << ':';
744      llvm::outs() << *it;
745    }
746    llvm::outs() << "\n";
747    llvm::outs() << "libraries: =" << ResourceDir;
748
749    StringRef sysroot = C.getSysRoot();
750
751    for (ToolChain::path_list::const_iterator it = TC.getFilePaths().begin(),
752           ie = TC.getFilePaths().end(); it != ie; ++it) {
753      llvm::outs() << ':';
754      const char *path = it->c_str();
755      if (path[0] == '=')
756        llvm::outs() << sysroot << path + 1;
757      else
758        llvm::outs() << path;
759    }
760    llvm::outs() << "\n";
761    return false;
762  }
763
764  // FIXME: The following handlers should use a callback mechanism, we don't
765  // know what the client would like to do.
766  if (Arg *A = C.getArgs().getLastArg(options::OPT_print_file_name_EQ)) {
767    llvm::outs() << GetFilePath(A->getValue(), TC) << "\n";
768    return false;
769  }
770
771  if (Arg *A = C.getArgs().getLastArg(options::OPT_print_prog_name_EQ)) {
772    llvm::outs() << GetProgramPath(A->getValue(), TC) << "\n";
773    return false;
774  }
775
776  if (C.getArgs().hasArg(options::OPT_print_libgcc_file_name)) {
777    llvm::outs() << GetFilePath("libgcc.a", TC) << "\n";
778    return false;
779  }
780
781  if (C.getArgs().hasArg(options::OPT_print_multi_lib)) {
782    // FIXME: We need tool chain support for this.
783    llvm::outs() << ".;\n";
784
785    switch (C.getDefaultToolChain().getTriple().getArch()) {
786    default:
787      break;
788
789    case llvm::Triple::x86_64:
790      llvm::outs() << "x86_64;@m64" << "\n";
791      break;
792
793    case llvm::Triple::ppc64:
794      llvm::outs() << "ppc64;@m64" << "\n";
795      break;
796
797    case llvm::Triple::ppc64le:
798      llvm::outs() << "ppc64le;@m64" << "\n";
799      break;
800    }
801    return false;
802  }
803
804  // FIXME: What is the difference between print-multi-directory and
805  // print-multi-os-directory?
806  if (C.getArgs().hasArg(options::OPT_print_multi_directory) ||
807      C.getArgs().hasArg(options::OPT_print_multi_os_directory)) {
808    switch (C.getDefaultToolChain().getTriple().getArch()) {
809    default:
810    case llvm::Triple::x86:
811    case llvm::Triple::ppc:
812      llvm::outs() << "." << "\n";
813      break;
814
815    case llvm::Triple::x86_64:
816      llvm::outs() << "x86_64" << "\n";
817      break;
818
819    case llvm::Triple::ppc64:
820      llvm::outs() << "ppc64" << "\n";
821      break;
822
823    case llvm::Triple::ppc64le:
824      llvm::outs() << "ppc64le" << "\n";
825      break;
826    }
827    return false;
828  }
829
830  return true;
831}
832
833static unsigned PrintActions1(const Compilation &C, Action *A,
834                              std::map<Action*, unsigned> &Ids) {
835  if (Ids.count(A))
836    return Ids[A];
837
838  std::string str;
839  llvm::raw_string_ostream os(str);
840
841  os << Action::getClassName(A->getKind()) << ", ";
842  if (InputAction *IA = dyn_cast<InputAction>(A)) {
843    os << "\"" << IA->getInputArg().getValue() << "\"";
844  } else if (BindArchAction *BIA = dyn_cast<BindArchAction>(A)) {
845    os << '"' << BIA->getArchName() << '"'
846       << ", {" << PrintActions1(C, *BIA->begin(), Ids) << "}";
847  } else {
848    os << "{";
849    for (Action::iterator it = A->begin(), ie = A->end(); it != ie;) {
850      os << PrintActions1(C, *it, Ids);
851      ++it;
852      if (it != ie)
853        os << ", ";
854    }
855    os << "}";
856  }
857
858  unsigned Id = Ids.size();
859  Ids[A] = Id;
860  llvm::errs() << Id << ": " << os.str() << ", "
861               << types::getTypeName(A->getType()) << "\n";
862
863  return Id;
864}
865
866void Driver::PrintActions(const Compilation &C) const {
867  std::map<Action*, unsigned> Ids;
868  for (ActionList::const_iterator it = C.getActions().begin(),
869         ie = C.getActions().end(); it != ie; ++it)
870    PrintActions1(C, *it, Ids);
871}
872
873/// \brief Check whether the given input tree contains any compilation or
874/// assembly actions.
875static bool ContainsCompileOrAssembleAction(const Action *A) {
876  if (isa<CompileJobAction>(A) || isa<AssembleJobAction>(A))
877    return true;
878
879  for (Action::const_iterator it = A->begin(), ie = A->end(); it != ie; ++it)
880    if (ContainsCompileOrAssembleAction(*it))
881      return true;
882
883  return false;
884}
885
886void Driver::BuildUniversalActions(const ToolChain &TC,
887                                   DerivedArgList &Args,
888                                   const InputList &BAInputs,
889                                   ActionList &Actions) const {
890  llvm::PrettyStackTraceString CrashInfo("Building universal build actions");
891  // Collect the list of architectures. Duplicates are allowed, but should only
892  // be handled once (in the order seen).
893  llvm::StringSet<> ArchNames;
894  SmallVector<const char *, 4> Archs;
895  for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
896       it != ie; ++it) {
897    Arg *A = *it;
898
899    if (A->getOption().matches(options::OPT_arch)) {
900      // Validate the option here; we don't save the type here because its
901      // particular spelling may participate in other driver choices.
902      llvm::Triple::ArchType Arch =
903        tools::darwin::getArchTypeForDarwinArchName(A->getValue());
904      if (Arch == llvm::Triple::UnknownArch) {
905        Diag(clang::diag::err_drv_invalid_arch_name)
906          << A->getAsString(Args);
907        continue;
908      }
909
910      A->claim();
911      if (ArchNames.insert(A->getValue()))
912        Archs.push_back(A->getValue());
913    }
914  }
915
916  // When there is no explicit arch for this platform, make sure we still bind
917  // the architecture (to the default) so that -Xarch_ is handled correctly.
918  if (!Archs.size())
919    Archs.push_back(Args.MakeArgString(TC.getDefaultUniversalArchName()));
920
921  ActionList SingleActions;
922  BuildActions(TC, Args, BAInputs, SingleActions);
923
924  // Add in arch bindings for every top level action, as well as lipo and
925  // dsymutil steps if needed.
926  for (unsigned i = 0, e = SingleActions.size(); i != e; ++i) {
927    Action *Act = SingleActions[i];
928
929    // Make sure we can lipo this kind of output. If not (and it is an actual
930    // output) then we disallow, since we can't create an output file with the
931    // right name without overwriting it. We could remove this oddity by just
932    // changing the output names to include the arch, which would also fix
933    // -save-temps. Compatibility wins for now.
934
935    if (Archs.size() > 1 && !types::canLipoType(Act->getType()))
936      Diag(clang::diag::err_drv_invalid_output_with_multiple_archs)
937        << types::getTypeName(Act->getType());
938
939    ActionList Inputs;
940    for (unsigned i = 0, e = Archs.size(); i != e; ++i) {
941      Inputs.push_back(new BindArchAction(Act, Archs[i]));
942      if (i != 0)
943        Inputs.back()->setOwnsInputs(false);
944    }
945
946    // Lipo if necessary, we do it this way because we need to set the arch flag
947    // so that -Xarch_ gets overwritten.
948    if (Inputs.size() == 1 || Act->getType() == types::TY_Nothing)
949      Actions.append(Inputs.begin(), Inputs.end());
950    else
951      Actions.push_back(new LipoJobAction(Inputs, Act->getType()));
952
953    // Handle debug info queries.
954    Arg *A = Args.getLastArg(options::OPT_g_Group);
955    if (A && !A->getOption().matches(options::OPT_g0) &&
956        !A->getOption().matches(options::OPT_gstabs) &&
957        ContainsCompileOrAssembleAction(Actions.back())) {
958
959      // Add a 'dsymutil' step if necessary, when debug info is enabled and we
960      // have a compile input. We need to run 'dsymutil' ourselves in such cases
961      // because the debug info will refer to a temporary object file which
962      // will be removed at the end of the compilation process.
963      if (Act->getType() == types::TY_Image) {
964        ActionList Inputs;
965        Inputs.push_back(Actions.back());
966        Actions.pop_back();
967        Actions.push_back(new DsymutilJobAction(Inputs, types::TY_dSYM));
968      }
969
970      // Verify the output (debug information only) if we passed '-verify'.
971      if (Args.hasArg(options::OPT_verify)) {
972        ActionList VerifyInputs;
973        VerifyInputs.push_back(Actions.back());
974        Actions.pop_back();
975        Actions.push_back(new VerifyJobAction(VerifyInputs,
976                                              types::TY_Nothing));
977      }
978    }
979  }
980}
981
982/// \brief Check that the file referenced by Value exists. If it doesn't,
983/// issue a diagnostic and return false.
984static bool DiagnoseInputExistance(const Driver &D, const DerivedArgList &Args,
985                                   StringRef Value) {
986  if (!D.getCheckInputsExist())
987    return true;
988
989  // stdin always exists.
990  if (Value == "-")
991    return true;
992
993  SmallString<64> Path(Value);
994  if (Arg *WorkDir = Args.getLastArg(options::OPT_working_directory)) {
995    if (!llvm::sys::path::is_absolute(Path.str())) {
996      SmallString<64> Directory(WorkDir->getValue());
997      llvm::sys::path::append(Directory, Value);
998      Path.assign(Directory);
999    }
1000  }
1001
1002  if (llvm::sys::fs::exists(Twine(Path)))
1003    return true;
1004
1005  D.Diag(clang::diag::err_drv_no_such_file) << Path.str();
1006  return false;
1007}
1008
1009// Construct a the list of inputs and their types.
1010void Driver::BuildInputs(const ToolChain &TC, const DerivedArgList &Args,
1011                         InputList &Inputs) const {
1012  // Track the current user specified (-x) input. We also explicitly track the
1013  // argument used to set the type; we only want to claim the type when we
1014  // actually use it, so we warn about unused -x arguments.
1015  types::ID InputType = types::TY_Nothing;
1016  Arg *InputTypeArg = 0;
1017
1018  // The last /TC or /TP option sets the input type to C or C++ globally.
1019  if (Arg *TCTP = Args.getLastArg(options::OPT__SLASH_TC,
1020                                  options::OPT__SLASH_TP)) {
1021    InputTypeArg = TCTP;
1022    InputType = TCTP->getOption().matches(options::OPT__SLASH_TC)
1023        ? types::TY_C : types::TY_CXX;
1024
1025    arg_iterator it = Args.filtered_begin(options::OPT__SLASH_TC,
1026                                          options::OPT__SLASH_TP);
1027    const arg_iterator ie = Args.filtered_end();
1028    Arg *Previous = *it++;
1029    bool ShowNote = false;
1030    while (it != ie) {
1031      Diag(clang::diag::warn_drv_overriding_t_option) << Previous->getSpelling()
1032          << (*it)->getSpelling();
1033      Previous = *it++;
1034      ShowNote = true;
1035    }
1036    if (ShowNote)
1037      Diag(clang::diag::note_drv_t_option_is_global);
1038
1039    // No driver mode exposes -x and /TC or /TP; we don't support mixing them.
1040    assert(!Args.hasArg(options::OPT_x) && "-x and /TC or /TP is not allowed");
1041  }
1042
1043  for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
1044       it != ie; ++it) {
1045    Arg *A = *it;
1046
1047    if (A->getOption().getKind() == Option::InputClass) {
1048      const char *Value = A->getValue();
1049      types::ID Ty = types::TY_INVALID;
1050
1051      // Infer the input type if necessary.
1052      if (InputType == types::TY_Nothing) {
1053        // If there was an explicit arg for this, claim it.
1054        if (InputTypeArg)
1055          InputTypeArg->claim();
1056
1057        // stdin must be handled specially.
1058        if (memcmp(Value, "-", 2) == 0) {
1059          // If running with -E, treat as a C input (this changes the builtin
1060          // macros, for example). This may be overridden by -ObjC below.
1061          //
1062          // Otherwise emit an error but still use a valid type to avoid
1063          // spurious errors (e.g., no inputs).
1064          if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP())
1065            Diag(clang::diag::err_drv_unknown_stdin_type);
1066          Ty = types::TY_C;
1067        } else {
1068          // Otherwise lookup by extension.
1069          // Fallback is C if invoked as C preprocessor or Object otherwise.
1070          // We use a host hook here because Darwin at least has its own
1071          // idea of what .s is.
1072          if (const char *Ext = strrchr(Value, '.'))
1073            Ty = TC.LookupTypeForExtension(Ext + 1);
1074
1075          if (Ty == types::TY_INVALID) {
1076            if (CCCIsCPP())
1077              Ty = types::TY_C;
1078            else
1079              Ty = types::TY_Object;
1080          }
1081
1082          // If the driver is invoked as C++ compiler (like clang++ or c++) it
1083          // should autodetect some input files as C++ for g++ compatibility.
1084          if (CCCIsCXX()) {
1085            types::ID OldTy = Ty;
1086            Ty = types::lookupCXXTypeForCType(Ty);
1087
1088            if (Ty != OldTy)
1089              Diag(clang::diag::warn_drv_treating_input_as_cxx)
1090                << getTypeName(OldTy) << getTypeName(Ty);
1091          }
1092        }
1093
1094        // -ObjC and -ObjC++ override the default language, but only for "source
1095        // files". We just treat everything that isn't a linker input as a
1096        // source file.
1097        //
1098        // FIXME: Clean this up if we move the phase sequence into the type.
1099        if (Ty != types::TY_Object) {
1100          if (Args.hasArg(options::OPT_ObjC))
1101            Ty = types::TY_ObjC;
1102          else if (Args.hasArg(options::OPT_ObjCXX))
1103            Ty = types::TY_ObjCXX;
1104        }
1105      } else {
1106        assert(InputTypeArg && "InputType set w/o InputTypeArg");
1107        InputTypeArg->claim();
1108        Ty = InputType;
1109      }
1110
1111      if (DiagnoseInputExistance(*this, Args, Value))
1112        Inputs.push_back(std::make_pair(Ty, A));
1113
1114    } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {
1115      StringRef Value = A->getValue();
1116      if (DiagnoseInputExistance(*this, Args, Value)) {
1117        Arg *InputArg = MakeInputArg(Args, Opts, A->getValue());
1118        Inputs.push_back(std::make_pair(types::TY_C, InputArg));
1119      }
1120      A->claim();
1121    } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {
1122      StringRef Value = A->getValue();
1123      if (DiagnoseInputExistance(*this, Args, Value)) {
1124        Arg *InputArg = MakeInputArg(Args, Opts, A->getValue());
1125        Inputs.push_back(std::make_pair(types::TY_CXX, InputArg));
1126      }
1127      A->claim();
1128    } else if (A->getOption().hasFlag(options::LinkerInput)) {
1129      // Just treat as object type, we could make a special type for this if
1130      // necessary.
1131      Inputs.push_back(std::make_pair(types::TY_Object, A));
1132
1133    } else if (A->getOption().matches(options::OPT_x)) {
1134      InputTypeArg = A;
1135      InputType = types::lookupTypeForTypeSpecifier(A->getValue());
1136      A->claim();
1137
1138      // Follow gcc behavior and treat as linker input for invalid -x
1139      // options. Its not clear why we shouldn't just revert to unknown; but
1140      // this isn't very important, we might as well be bug compatible.
1141      if (!InputType) {
1142        Diag(clang::diag::err_drv_unknown_language) << A->getValue();
1143        InputType = types::TY_Object;
1144      }
1145    }
1146  }
1147  if (CCCIsCPP() && Inputs.empty()) {
1148    // If called as standalone preprocessor, stdin is processed
1149    // if no other input is present.
1150    Arg *A = MakeInputArg(Args, Opts, "-");
1151    Inputs.push_back(std::make_pair(types::TY_C, A));
1152  }
1153}
1154
1155void Driver::BuildActions(const ToolChain &TC, DerivedArgList &Args,
1156                          const InputList &Inputs, ActionList &Actions) const {
1157  llvm::PrettyStackTraceString CrashInfo("Building compilation actions");
1158
1159  if (!SuppressMissingInputWarning && Inputs.empty()) {
1160    Diag(clang::diag::err_drv_no_input_files);
1161    return;
1162  }
1163
1164  Arg *FinalPhaseArg;
1165  phases::ID FinalPhase = getFinalPhase(Args, &FinalPhaseArg);
1166
1167  // Reject -Z* at the top level, these options should never have been exposed
1168  // by gcc.
1169  if (Arg *A = Args.getLastArg(options::OPT_Z_Joined))
1170    Diag(clang::diag::err_drv_use_of_Z_option) << A->getAsString(Args);
1171
1172  // Diagnose misuse of /Fo.
1173  if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fo)) {
1174    DiagnoseOptionOverride(*this, Args, options::OPT__SLASH_Fo);
1175    StringRef V = A->getValue();
1176    if (V.empty()) {
1177      // It has to have a value.
1178      Diag(clang::diag::err_drv_missing_argument) << A->getSpelling() << 1;
1179      Args.eraseArg(options::OPT__SLASH_Fo);
1180    } else if (Inputs.size() > 1 && !llvm::sys::path::is_separator(V.back())) {
1181      // Check whether /Fo tries to name an output file for multiple inputs.
1182      Diag(clang::diag::err_drv_obj_file_argument_with_multiple_sources)
1183        << A->getSpelling() << V;
1184      Args.eraseArg(options::OPT__SLASH_Fo);
1185    }
1186  }
1187
1188  // Diagnose misuse of /Fe.
1189  if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fe)) {
1190    DiagnoseOptionOverride(*this, Args, options::OPT__SLASH_Fe);
1191    if (A->getValue()[0] == '\0') {
1192      // It has to have a value.
1193      Diag(clang::diag::err_drv_missing_argument) << A->getSpelling() << 1;
1194      Args.eraseArg(options::OPT__SLASH_Fe);
1195    }
1196  }
1197
1198  // Construct the actions to perform.
1199  ActionList LinkerInputs;
1200  ActionList SplitInputs;
1201  llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PL;
1202  for (unsigned i = 0, e = Inputs.size(); i != e; ++i) {
1203    types::ID InputType = Inputs[i].first;
1204    const Arg *InputArg = Inputs[i].second;
1205
1206    PL.clear();
1207    types::getCompilationPhases(InputType, PL);
1208
1209    // If the first step comes after the final phase we are doing as part of
1210    // this compilation, warn the user about it.
1211    phases::ID InitialPhase = PL[0];
1212    if (InitialPhase > FinalPhase) {
1213      // Claim here to avoid the more general unused warning.
1214      InputArg->claim();
1215
1216      // Suppress all unused style warnings with -Qunused-arguments
1217      if (Args.hasArg(options::OPT_Qunused_arguments))
1218        continue;
1219
1220      // Special case when final phase determined by binary name, rather than
1221      // by a command-line argument with a corresponding Arg.
1222      if (CCCIsCPP())
1223        Diag(clang::diag::warn_drv_input_file_unused_by_cpp)
1224          << InputArg->getAsString(Args)
1225          << getPhaseName(InitialPhase);
1226      // Special case '-E' warning on a previously preprocessed file to make
1227      // more sense.
1228      else if (InitialPhase == phases::Compile &&
1229               FinalPhase == phases::Preprocess &&
1230               getPreprocessedType(InputType) == types::TY_INVALID)
1231        Diag(clang::diag::warn_drv_preprocessed_input_file_unused)
1232          << InputArg->getAsString(Args)
1233          << !!FinalPhaseArg
1234          << FinalPhaseArg ? FinalPhaseArg->getOption().getName() : "";
1235      else
1236        Diag(clang::diag::warn_drv_input_file_unused)
1237          << InputArg->getAsString(Args)
1238          << getPhaseName(InitialPhase)
1239          << !!FinalPhaseArg
1240          << FinalPhaseArg ? FinalPhaseArg->getOption().getName() : "";
1241      continue;
1242    }
1243
1244    // Build the pipeline for this file.
1245    OwningPtr<Action> Current(new InputAction(*InputArg, InputType));
1246    for (SmallVectorImpl<phases::ID>::iterator
1247           i = PL.begin(), e = PL.end(); i != e; ++i) {
1248      phases::ID Phase = *i;
1249
1250      // We are done if this step is past what the user requested.
1251      if (Phase > FinalPhase)
1252        break;
1253
1254      // Queue linker inputs.
1255      if (Phase == phases::Link) {
1256        assert((i + 1) == e && "linking must be final compilation step.");
1257        LinkerInputs.push_back(Current.take());
1258        break;
1259      }
1260
1261      // Some types skip the assembler phase (e.g., llvm-bc), but we can't
1262      // encode this in the steps because the intermediate type depends on
1263      // arguments. Just special case here.
1264      if (Phase == phases::Assemble && Current->getType() != types::TY_PP_Asm)
1265        continue;
1266
1267      // Otherwise construct the appropriate action.
1268      Current.reset(ConstructPhaseAction(Args, Phase, Current.take()));
1269      if (Current->getType() == types::TY_Nothing)
1270        break;
1271    }
1272
1273    // If we ended with something, add to the output list.
1274    if (Current)
1275      Actions.push_back(Current.take());
1276  }
1277
1278  // Add a link action if necessary.
1279  if (!LinkerInputs.empty())
1280    Actions.push_back(new LinkJobAction(LinkerInputs, types::TY_Image));
1281
1282  // If we are linking, claim any options which are obviously only used for
1283  // compilation.
1284  if (FinalPhase == phases::Link && PL.size() == 1)
1285    Args.ClaimAllArgs(options::OPT_CompileOnly_Group);
1286}
1287
1288Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase,
1289                                     Action *Input) const {
1290  llvm::PrettyStackTraceString CrashInfo("Constructing phase actions");
1291  // Build the appropriate action.
1292  switch (Phase) {
1293  case phases::Link: llvm_unreachable("link action invalid here.");
1294  case phases::Preprocess: {
1295    types::ID OutputTy;
1296    // -{M, MM} alter the output type.
1297    if (Args.hasArg(options::OPT_M, options::OPT_MM)) {
1298      OutputTy = types::TY_Dependencies;
1299    } else {
1300      OutputTy = Input->getType();
1301      if (!Args.hasFlag(options::OPT_frewrite_includes,
1302                        options::OPT_fno_rewrite_includes, false))
1303        OutputTy = types::getPreprocessedType(OutputTy);
1304      assert(OutputTy != types::TY_INVALID &&
1305             "Cannot preprocess this input type!");
1306    }
1307    return new PreprocessJobAction(Input, OutputTy);
1308  }
1309  case phases::Precompile: {
1310    types::ID OutputTy = types::TY_PCH;
1311    if (Args.hasArg(options::OPT_fsyntax_only)) {
1312      // Syntax checks should not emit a PCH file
1313      OutputTy = types::TY_Nothing;
1314    }
1315    return new PrecompileJobAction(Input, OutputTy);
1316  }
1317  case phases::Compile: {
1318    if (Args.hasArg(options::OPT_fsyntax_only)) {
1319      return new CompileJobAction(Input, types::TY_Nothing);
1320    } else if (Args.hasArg(options::OPT_rewrite_objc)) {
1321      return new CompileJobAction(Input, types::TY_RewrittenObjC);
1322    } else if (Args.hasArg(options::OPT_rewrite_legacy_objc)) {
1323      return new CompileJobAction(Input, types::TY_RewrittenLegacyObjC);
1324    } else if (Args.hasArg(options::OPT__analyze, options::OPT__analyze_auto)) {
1325      return new AnalyzeJobAction(Input, types::TY_Plist);
1326    } else if (Args.hasArg(options::OPT__migrate)) {
1327      return new MigrateJobAction(Input, types::TY_Remap);
1328    } else if (Args.hasArg(options::OPT_emit_ast)) {
1329      return new CompileJobAction(Input, types::TY_AST);
1330    } else if (Args.hasArg(options::OPT_module_file_info)) {
1331      return new CompileJobAction(Input, types::TY_ModuleFile);
1332    } else if (IsUsingLTO(Args)) {
1333      types::ID Output =
1334        Args.hasArg(options::OPT_S) ? types::TY_LTO_IR : types::TY_LTO_BC;
1335      return new CompileJobAction(Input, Output);
1336    } else {
1337      return new CompileJobAction(Input, types::TY_PP_Asm);
1338    }
1339  }
1340  case phases::Assemble:
1341    return new AssembleJobAction(Input, types::TY_Object);
1342  }
1343
1344  llvm_unreachable("invalid phase in ConstructPhaseAction");
1345}
1346
1347bool Driver::IsUsingLTO(const ArgList &Args) const {
1348  // Check for -emit-llvm or -flto.
1349  if (Args.hasArg(options::OPT_emit_llvm) ||
1350      Args.hasFlag(options::OPT_flto, options::OPT_fno_lto, false))
1351    return true;
1352
1353  // Check for -O4.
1354  if (const Arg *A = Args.getLastArg(options::OPT_O_Group))
1355      return A->getOption().matches(options::OPT_O4);
1356
1357  return false;
1358}
1359
1360void Driver::BuildJobs(Compilation &C) const {
1361  llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
1362
1363  Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o);
1364
1365  // It is an error to provide a -o option if we are making multiple output
1366  // files.
1367  if (FinalOutput) {
1368    unsigned NumOutputs = 0;
1369    for (ActionList::const_iterator it = C.getActions().begin(),
1370           ie = C.getActions().end(); it != ie; ++it)
1371      if ((*it)->getType() != types::TY_Nothing)
1372        ++NumOutputs;
1373
1374    if (NumOutputs > 1) {
1375      Diag(clang::diag::err_drv_output_argument_with_multiple_files);
1376      FinalOutput = 0;
1377    }
1378  }
1379
1380  // Collect the list of architectures.
1381  llvm::StringSet<> ArchNames;
1382  if (C.getDefaultToolChain().getTriple().isOSDarwin()) {
1383    for (ArgList::const_iterator it = C.getArgs().begin(), ie = C.getArgs().end();
1384         it != ie; ++it) {
1385      Arg *A = *it;
1386      if (A->getOption().matches(options::OPT_arch))
1387        ArchNames.insert(A->getValue());
1388    }
1389  }
1390
1391  for (ActionList::const_iterator it = C.getActions().begin(),
1392         ie = C.getActions().end(); it != ie; ++it) {
1393    Action *A = *it;
1394
1395    // If we are linking an image for multiple archs then the linker wants
1396    // -arch_multiple and -final_output <final image name>. Unfortunately, this
1397    // doesn't fit in cleanly because we have to pass this information down.
1398    //
1399    // FIXME: This is a hack; find a cleaner way to integrate this into the
1400    // process.
1401    const char *LinkingOutput = 0;
1402    if (isa<LipoJobAction>(A)) {
1403      if (FinalOutput)
1404        LinkingOutput = FinalOutput->getValue();
1405      else
1406        LinkingOutput = DefaultImageName.c_str();
1407    }
1408
1409    InputInfo II;
1410    BuildJobsForAction(C, A, &C.getDefaultToolChain(),
1411                       /*BoundArch*/0,
1412                       /*AtTopLevel*/ true,
1413                       /*MultipleArchs*/ ArchNames.size() > 1,
1414                       /*LinkingOutput*/ LinkingOutput,
1415                       II);
1416  }
1417
1418  // If the user passed -Qunused-arguments or there were errors, don't warn
1419  // about any unused arguments.
1420  if (Diags.hasErrorOccurred() ||
1421      C.getArgs().hasArg(options::OPT_Qunused_arguments))
1422    return;
1423
1424  // Claim -### here.
1425  (void) C.getArgs().hasArg(options::OPT__HASH_HASH_HASH);
1426
1427  // Claim --driver-mode, it was handled earlier.
1428  (void) C.getArgs().hasArg(options::OPT_driver_mode);
1429
1430  for (ArgList::const_iterator it = C.getArgs().begin(), ie = C.getArgs().end();
1431       it != ie; ++it) {
1432    Arg *A = *it;
1433
1434    // FIXME: It would be nice to be able to send the argument to the
1435    // DiagnosticsEngine, so that extra values, position, and so on could be
1436    // printed.
1437    if (!A->isClaimed()) {
1438      if (A->getOption().hasFlag(options::NoArgumentUnused))
1439        continue;
1440
1441      // Suppress the warning automatically if this is just a flag, and it is an
1442      // instance of an argument we already claimed.
1443      const Option &Opt = A->getOption();
1444      if (Opt.getKind() == Option::FlagClass) {
1445        bool DuplicateClaimed = false;
1446
1447        for (arg_iterator it = C.getArgs().filtered_begin(&Opt),
1448               ie = C.getArgs().filtered_end(); it != ie; ++it) {
1449          if ((*it)->isClaimed()) {
1450            DuplicateClaimed = true;
1451            break;
1452          }
1453        }
1454
1455        if (DuplicateClaimed)
1456          continue;
1457      }
1458
1459      Diag(clang::diag::warn_drv_unused_argument)
1460        << A->getAsString(C.getArgs());
1461    }
1462  }
1463}
1464
1465static const Tool *SelectToolForJob(Compilation &C, const ToolChain *TC,
1466                                    const JobAction *JA,
1467                                    const ActionList *&Inputs) {
1468  const Tool *ToolForJob = 0;
1469
1470  // See if we should look for a compiler with an integrated assembler. We match
1471  // bottom up, so what we are actually looking for is an assembler job with a
1472  // compiler input.
1473
1474  if (TC->useIntegratedAs() &&
1475      !C.getArgs().hasArg(options::OPT_save_temps) &&
1476      isa<AssembleJobAction>(JA) &&
1477      Inputs->size() == 1 && isa<CompileJobAction>(*Inputs->begin())) {
1478    const Tool *Compiler =
1479      TC->SelectTool(cast<JobAction>(**Inputs->begin()));
1480    if (!Compiler)
1481      return NULL;
1482    if (Compiler->hasIntegratedAssembler()) {
1483      Inputs = &(*Inputs)[0]->getInputs();
1484      ToolForJob = Compiler;
1485    }
1486  }
1487
1488  // Otherwise use the tool for the current job.
1489  if (!ToolForJob)
1490    ToolForJob = TC->SelectTool(*JA);
1491
1492  // See if we should use an integrated preprocessor. We do so when we have
1493  // exactly one input, since this is the only use case we care about
1494  // (irrelevant since we don't support combine yet).
1495  if (Inputs->size() == 1 && isa<PreprocessJobAction>(*Inputs->begin()) &&
1496      !C.getArgs().hasArg(options::OPT_no_integrated_cpp) &&
1497      !C.getArgs().hasArg(options::OPT_traditional_cpp) &&
1498      !C.getArgs().hasArg(options::OPT_save_temps) &&
1499      !C.getArgs().hasArg(options::OPT_rewrite_objc) &&
1500      ToolForJob->hasIntegratedCPP())
1501    Inputs = &(*Inputs)[0]->getInputs();
1502
1503  return ToolForJob;
1504}
1505
1506void Driver::BuildJobsForAction(Compilation &C,
1507                                const Action *A,
1508                                const ToolChain *TC,
1509                                const char *BoundArch,
1510                                bool AtTopLevel,
1511                                bool MultipleArchs,
1512                                const char *LinkingOutput,
1513                                InputInfo &Result) const {
1514  llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
1515
1516  if (const InputAction *IA = dyn_cast<InputAction>(A)) {
1517    // FIXME: It would be nice to not claim this here; maybe the old scheme of
1518    // just using Args was better?
1519    const Arg &Input = IA->getInputArg();
1520    Input.claim();
1521    if (Input.getOption().matches(options::OPT_INPUT)) {
1522      const char *Name = Input.getValue();
1523      Result = InputInfo(Name, A->getType(), Name);
1524    } else
1525      Result = InputInfo(&Input, A->getType(), "");
1526    return;
1527  }
1528
1529  if (const BindArchAction *BAA = dyn_cast<BindArchAction>(A)) {
1530    const ToolChain *TC;
1531    const char *ArchName = BAA->getArchName();
1532
1533    if (ArchName)
1534      TC = &getToolChain(C.getArgs(), ArchName);
1535    else
1536      TC = &C.getDefaultToolChain();
1537
1538    BuildJobsForAction(C, *BAA->begin(), TC, BAA->getArchName(),
1539                       AtTopLevel, MultipleArchs, LinkingOutput, Result);
1540    return;
1541  }
1542
1543  const ActionList *Inputs = &A->getInputs();
1544
1545  const JobAction *JA = cast<JobAction>(A);
1546  const Tool *T = SelectToolForJob(C, TC, JA, Inputs);
1547  if (!T)
1548    return;
1549
1550  // Only use pipes when there is exactly one input.
1551  InputInfoList InputInfos;
1552  for (ActionList::const_iterator it = Inputs->begin(), ie = Inputs->end();
1553       it != ie; ++it) {
1554    // Treat dsymutil and verify sub-jobs as being at the top-level too, they
1555    // shouldn't get temporary output names.
1556    // FIXME: Clean this up.
1557    bool SubJobAtTopLevel = false;
1558    if (AtTopLevel && (isa<DsymutilJobAction>(A) || isa<VerifyJobAction>(A)))
1559      SubJobAtTopLevel = true;
1560
1561    InputInfo II;
1562    BuildJobsForAction(C, *it, TC, BoundArch, SubJobAtTopLevel, MultipleArchs,
1563                       LinkingOutput, II);
1564    InputInfos.push_back(II);
1565  }
1566
1567  // Always use the first input as the base input.
1568  const char *BaseInput = InputInfos[0].getBaseInput();
1569
1570  // ... except dsymutil actions, which use their actual input as the base
1571  // input.
1572  if (JA->getType() == types::TY_dSYM)
1573    BaseInput = InputInfos[0].getFilename();
1574
1575  // Determine the place to write output to, if any.
1576  if (JA->getType() == types::TY_Nothing)
1577    Result = InputInfo(A->getType(), BaseInput);
1578  else
1579    Result = InputInfo(GetNamedOutputPath(C, *JA, BaseInput, BoundArch,
1580                                          AtTopLevel, MultipleArchs),
1581                       A->getType(), BaseInput);
1582
1583  if (CCCPrintBindings && !CCGenDiagnostics) {
1584    llvm::errs() << "# \"" << T->getToolChain().getTripleString() << '"'
1585                 << " - \"" << T->getName() << "\", inputs: [";
1586    for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) {
1587      llvm::errs() << InputInfos[i].getAsString();
1588      if (i + 1 != e)
1589        llvm::errs() << ", ";
1590    }
1591    llvm::errs() << "], output: " << Result.getAsString() << "\n";
1592  } else {
1593    T->ConstructJob(C, *JA, Result, InputInfos,
1594                    C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
1595  }
1596}
1597
1598/// \brief Create output filename based on ArgValue, which could either be a
1599/// full filename, filename without extension, or a directory.
1600static const char *MakeCLOutputFilename(const ArgList &Args, StringRef ArgValue,
1601                                        StringRef BaseName, types::ID FileType) {
1602  SmallString<128> Filename = ArgValue;
1603  assert(!ArgValue.empty() && "Output filename argument must not be empty.");
1604
1605  if (llvm::sys::path::is_separator(Filename.back())) {
1606    // If the argument is a directory, output to BaseName in that dir.
1607    llvm::sys::path::append(Filename, BaseName);
1608  }
1609
1610  if (!llvm::sys::path::has_extension(ArgValue)) {
1611    // If the argument didn't provide an extension, then set it.
1612    const char *Extension = types::getTypeTempSuffix(FileType, true);
1613    llvm::sys::path::replace_extension(Filename, Extension);
1614  }
1615
1616  return Args.MakeArgString(Filename.c_str());
1617}
1618
1619const char *Driver::GetNamedOutputPath(Compilation &C,
1620                                       const JobAction &JA,
1621                                       const char *BaseInput,
1622                                       const char *BoundArch,
1623                                       bool AtTopLevel,
1624                                       bool MultipleArchs) const {
1625  llvm::PrettyStackTraceString CrashInfo("Computing output path");
1626  // Output to a user requested destination?
1627  if (AtTopLevel && !isa<DsymutilJobAction>(JA) &&
1628      !isa<VerifyJobAction>(JA)) {
1629    if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o))
1630      return C.addResultFile(FinalOutput->getValue(), &JA);
1631  }
1632
1633  // Default to writing to stdout?
1634  if (AtTopLevel && !CCGenDiagnostics &&
1635      (isa<PreprocessJobAction>(JA) || JA.getType() == types::TY_ModuleFile))
1636    return "-";
1637
1638  // Output to a temporary file?
1639  if ((!AtTopLevel && !C.getArgs().hasArg(options::OPT_save_temps) &&
1640        !C.getArgs().hasArg(options::OPT__SLASH_Fo)) ||
1641      CCGenDiagnostics) {
1642    StringRef Name = llvm::sys::path::filename(BaseInput);
1643    std::pair<StringRef, StringRef> Split = Name.split('.');
1644    std::string TmpName =
1645      GetTemporaryPath(Split.first,
1646          types::getTypeTempSuffix(JA.getType(), IsCLMode()));
1647    return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str()));
1648  }
1649
1650  SmallString<128> BasePath(BaseInput);
1651  StringRef BaseName;
1652
1653  // Dsymutil actions should use the full path.
1654  if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA))
1655    BaseName = BasePath;
1656  else
1657    BaseName = llvm::sys::path::filename(BasePath);
1658
1659  // Determine what the derived output name should be.
1660  const char *NamedOutput;
1661
1662  if (JA.getType() == types::TY_Object &&
1663      C.getArgs().hasArg(options::OPT__SLASH_Fo)) {
1664    // The /Fo flag decides the object filename.
1665    StringRef Val = C.getArgs().getLastArg(options::OPT__SLASH_Fo)->getValue();
1666    NamedOutput = MakeCLOutputFilename(C.getArgs(), Val, BaseName,
1667                                       types::TY_Object);
1668  } else if (JA.getType() == types::TY_Image &&
1669             C.getArgs().hasArg(options::OPT__SLASH_Fe)) {
1670    // The /Fe flag names the linked file.
1671    StringRef Val = C.getArgs().getLastArg(options::OPT__SLASH_Fe)->getValue();
1672    NamedOutput = MakeCLOutputFilename(C.getArgs(), Val, BaseName,
1673                                       types::TY_Image);
1674  } else if (JA.getType() == types::TY_Image) {
1675    if (IsCLMode()) {
1676      // clang-cl uses BaseName for the executable name.
1677      SmallString<128> Filename = BaseName;
1678      llvm::sys::path::replace_extension(Filename, "exe");
1679      NamedOutput = C.getArgs().MakeArgString(Filename.c_str());
1680    } else if (MultipleArchs && BoundArch) {
1681      SmallString<128> Output(DefaultImageName.c_str());
1682      Output += "-";
1683      Output.append(BoundArch);
1684      NamedOutput = C.getArgs().MakeArgString(Output.c_str());
1685    } else
1686      NamedOutput = DefaultImageName.c_str();
1687  } else {
1688    const char *Suffix = types::getTypeTempSuffix(JA.getType());
1689    assert(Suffix && "All types used for output should have a suffix.");
1690
1691    std::string::size_type End = std::string::npos;
1692    if (!types::appendSuffixForType(JA.getType()))
1693      End = BaseName.rfind('.');
1694    SmallString<128> Suffixed(BaseName.substr(0, End));
1695    if (MultipleArchs && BoundArch) {
1696      Suffixed += "-";
1697      Suffixed.append(BoundArch);
1698    }
1699    Suffixed += '.';
1700    Suffixed += Suffix;
1701    NamedOutput = C.getArgs().MakeArgString(Suffixed.c_str());
1702  }
1703
1704  // If we're saving temps and the temp file conflicts with the input file,
1705  // then avoid overwriting input file.
1706  if (!AtTopLevel && C.getArgs().hasArg(options::OPT_save_temps) &&
1707      NamedOutput == BaseName) {
1708
1709    bool SameFile = false;
1710    SmallString<256> Result;
1711    llvm::sys::fs::current_path(Result);
1712    llvm::sys::path::append(Result, BaseName);
1713    llvm::sys::fs::equivalent(BaseInput, Result.c_str(), SameFile);
1714    // Must share the same path to conflict.
1715    if (SameFile) {
1716      StringRef Name = llvm::sys::path::filename(BaseInput);
1717      std::pair<StringRef, StringRef> Split = Name.split('.');
1718      std::string TmpName =
1719        GetTemporaryPath(Split.first,
1720            types::getTypeTempSuffix(JA.getType(), IsCLMode()));
1721      return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str()));
1722    }
1723  }
1724
1725  // As an annoying special case, PCH generation doesn't strip the pathname.
1726  if (JA.getType() == types::TY_PCH) {
1727    llvm::sys::path::remove_filename(BasePath);
1728    if (BasePath.empty())
1729      BasePath = NamedOutput;
1730    else
1731      llvm::sys::path::append(BasePath, NamedOutput);
1732    return C.addResultFile(C.getArgs().MakeArgString(BasePath.c_str()), &JA);
1733  } else {
1734    return C.addResultFile(NamedOutput, &JA);
1735  }
1736}
1737
1738std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {
1739  // Respect a limited subset of the '-Bprefix' functionality in GCC by
1740  // attempting to use this prefix when looking for file paths.
1741  for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),
1742       ie = PrefixDirs.end(); it != ie; ++it) {
1743    std::string Dir(*it);
1744    if (Dir.empty())
1745      continue;
1746    if (Dir[0] == '=')
1747      Dir = SysRoot + Dir.substr(1);
1748    SmallString<128> P(Dir);
1749    llvm::sys::path::append(P, Name);
1750    if (llvm::sys::fs::exists(Twine(P)))
1751      return P.str();
1752  }
1753
1754  SmallString<128> P(ResourceDir);
1755  llvm::sys::path::append(P, Name);
1756  if (llvm::sys::fs::exists(Twine(P)))
1757    return P.str();
1758
1759  const ToolChain::path_list &List = TC.getFilePaths();
1760  for (ToolChain::path_list::const_iterator
1761         it = List.begin(), ie = List.end(); it != ie; ++it) {
1762    std::string Dir(*it);
1763    if (Dir.empty())
1764      continue;
1765    if (Dir[0] == '=')
1766      Dir = SysRoot + Dir.substr(1);
1767    SmallString<128> P(Dir);
1768    llvm::sys::path::append(P, Name);
1769    if (llvm::sys::fs::exists(Twine(P)))
1770      return P.str();
1771  }
1772
1773  return Name;
1774}
1775
1776std::string Driver::GetProgramPath(const char *Name,
1777                                   const ToolChain &TC) const {
1778  // FIXME: Needs a better variable than DefaultTargetTriple
1779  std::string TargetSpecificExecutable(DefaultTargetTriple + "-" + Name);
1780  // Respect a limited subset of the '-Bprefix' functionality in GCC by
1781  // attempting to use this prefix when looking for program paths.
1782  for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),
1783       ie = PrefixDirs.end(); it != ie; ++it) {
1784    if (llvm::sys::fs::is_directory(*it)) {
1785      SmallString<128> P(*it);
1786      llvm::sys::path::append(P, TargetSpecificExecutable);
1787      if (llvm::sys::fs::can_execute(Twine(P)))
1788        return P.str();
1789      llvm::sys::path::remove_filename(P);
1790      llvm::sys::path::append(P, Name);
1791      if (llvm::sys::fs::can_execute(Twine(P)))
1792        return P.str();
1793    } else {
1794      SmallString<128> P(*it + Name);
1795      if (llvm::sys::fs::can_execute(Twine(P)))
1796        return P.str();
1797    }
1798  }
1799
1800  const ToolChain::path_list &List = TC.getProgramPaths();
1801  for (ToolChain::path_list::const_iterator
1802         it = List.begin(), ie = List.end(); it != ie; ++it) {
1803    SmallString<128> P(*it);
1804    llvm::sys::path::append(P, TargetSpecificExecutable);
1805    if (llvm::sys::fs::can_execute(Twine(P)))
1806      return P.str();
1807    llvm::sys::path::remove_filename(P);
1808    llvm::sys::path::append(P, Name);
1809    if (llvm::sys::fs::can_execute(Twine(P)))
1810      return P.str();
1811  }
1812
1813  // If all else failed, search the path.
1814  std::string P(llvm::sys::FindProgramByName(TargetSpecificExecutable));
1815  if (!P.empty())
1816    return P;
1817
1818  P = llvm::sys::FindProgramByName(Name);
1819  if (!P.empty())
1820    return P;
1821
1822  return Name;
1823}
1824
1825std::string Driver::GetTemporaryPath(StringRef Prefix, const char *Suffix)
1826  const {
1827  SmallString<128> Path;
1828  llvm::error_code EC =
1829      llvm::sys::fs::createTemporaryFile(Prefix, Suffix, Path);
1830  if (EC) {
1831    Diag(clang::diag::err_unable_to_make_temp) << EC.message();
1832    return "";
1833  }
1834
1835  return Path.str();
1836}
1837
1838/// \brief Compute target triple from args.
1839///
1840/// This routine provides the logic to compute a target triple from various
1841/// args passed to the driver and the default triple string.
1842static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
1843                                        const ArgList &Args,
1844                                        StringRef DarwinArchName) {
1845  // FIXME: Already done in Compilation *Driver::BuildCompilation
1846  if (const Arg *A = Args.getLastArg(options::OPT_target))
1847    DefaultTargetTriple = A->getValue();
1848
1849  llvm::Triple Target(llvm::Triple::normalize(DefaultTargetTriple));
1850
1851  // Handle Darwin-specific options available here.
1852  if (Target.isOSDarwin()) {
1853    // If an explict Darwin arch name is given, that trumps all.
1854    if (!DarwinArchName.empty()) {
1855      Target.setArch(
1856        tools::darwin::getArchTypeForDarwinArchName(DarwinArchName));
1857      return Target;
1858    }
1859
1860    // Handle the Darwin '-arch' flag.
1861    if (Arg *A = Args.getLastArg(options::OPT_arch)) {
1862      llvm::Triple::ArchType DarwinArch
1863        = tools::darwin::getArchTypeForDarwinArchName(A->getValue());
1864      if (DarwinArch != llvm::Triple::UnknownArch)
1865        Target.setArch(DarwinArch);
1866    }
1867  }
1868
1869  // Handle pseudo-target flags '-EL' and '-EB'.
1870  if (Arg *A = Args.getLastArg(options::OPT_EL, options::OPT_EB)) {
1871    if (A->getOption().matches(options::OPT_EL)) {
1872      if (Target.getArch() == llvm::Triple::mips)
1873        Target.setArch(llvm::Triple::mipsel);
1874      else if (Target.getArch() == llvm::Triple::mips64)
1875        Target.setArch(llvm::Triple::mips64el);
1876    } else {
1877      if (Target.getArch() == llvm::Triple::mipsel)
1878        Target.setArch(llvm::Triple::mips);
1879      else if (Target.getArch() == llvm::Triple::mips64el)
1880        Target.setArch(llvm::Triple::mips64);
1881    }
1882  }
1883
1884  // Skip further flag support on OSes which don't support '-m32' or '-m64'.
1885  if (Target.getArchName() == "tce" ||
1886      Target.getOS() == llvm::Triple::AuroraUX ||
1887      Target.getOS() == llvm::Triple::Minix)
1888    return Target;
1889
1890  // Handle pseudo-target flags '-m32' and '-m64'.
1891  // FIXME: Should this information be in llvm::Triple?
1892  if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) {
1893    if (A->getOption().matches(options::OPT_m32)) {
1894      if (Target.getArch() == llvm::Triple::x86_64)
1895        Target.setArch(llvm::Triple::x86);
1896      if (Target.getArch() == llvm::Triple::ppc64)
1897        Target.setArch(llvm::Triple::ppc);
1898    } else {
1899      if (Target.getArch() == llvm::Triple::x86)
1900        Target.setArch(llvm::Triple::x86_64);
1901      if (Target.getArch() == llvm::Triple::ppc)
1902        Target.setArch(llvm::Triple::ppc64);
1903    }
1904  }
1905
1906  return Target;
1907}
1908
1909const ToolChain &Driver::getToolChain(const ArgList &Args,
1910                                      StringRef DarwinArchName) const {
1911  llvm::Triple Target = computeTargetTriple(DefaultTargetTriple, Args,
1912                                            DarwinArchName);
1913
1914  ToolChain *&TC = ToolChains[Target.str()];
1915  if (!TC) {
1916    switch (Target.getOS()) {
1917    case llvm::Triple::AuroraUX:
1918      TC = new toolchains::AuroraUX(*this, Target, Args);
1919      break;
1920    case llvm::Triple::Darwin:
1921    case llvm::Triple::MacOSX:
1922    case llvm::Triple::IOS:
1923      if (Target.getArch() == llvm::Triple::x86 ||
1924          Target.getArch() == llvm::Triple::x86_64 ||
1925          Target.getArch() == llvm::Triple::arm ||
1926          Target.getArch() == llvm::Triple::thumb)
1927        TC = new toolchains::DarwinClang(*this, Target, Args);
1928      else
1929        TC = new toolchains::Darwin_Generic_GCC(*this, Target, Args);
1930      break;
1931    case llvm::Triple::DragonFly:
1932      TC = new toolchains::DragonFly(*this, Target, Args);
1933      break;
1934    case llvm::Triple::OpenBSD:
1935      TC = new toolchains::OpenBSD(*this, Target, Args);
1936      break;
1937    case llvm::Triple::Bitrig:
1938      TC = new toolchains::Bitrig(*this, Target, Args);
1939      break;
1940    case llvm::Triple::NetBSD:
1941      TC = new toolchains::NetBSD(*this, Target, Args);
1942      break;
1943    case llvm::Triple::FreeBSD:
1944      TC = new toolchains::FreeBSD(*this, Target, Args);
1945      break;
1946    case llvm::Triple::Minix:
1947      TC = new toolchains::Minix(*this, Target, Args);
1948      break;
1949    case llvm::Triple::Linux:
1950      if (Target.getArch() == llvm::Triple::hexagon)
1951        TC = new toolchains::Hexagon_TC(*this, Target, Args);
1952      else
1953        TC = new toolchains::Linux(*this, Target, Args);
1954      break;
1955    case llvm::Triple::Solaris:
1956      TC = new toolchains::Solaris(*this, Target, Args);
1957      break;
1958    case llvm::Triple::Win32:
1959      TC = new toolchains::Windows(*this, Target, Args);
1960      break;
1961    case llvm::Triple::MinGW32:
1962      // FIXME: We need a MinGW toolchain. Fallthrough for now.
1963    default:
1964      // TCE is an OSless target
1965      if (Target.getArchName() == "tce") {
1966        TC = new toolchains::TCEToolChain(*this, Target, Args);
1967        break;
1968      }
1969      // If Hexagon is configured as an OSless target
1970      if (Target.getArch() == llvm::Triple::hexagon) {
1971        TC = new toolchains::Hexagon_TC(*this, Target, Args);
1972        break;
1973      }
1974      TC = new toolchains::Generic_GCC(*this, Target, Args);
1975      break;
1976    }
1977  }
1978  return *TC;
1979}
1980
1981bool Driver::ShouldUseClangCompiler(const JobAction &JA) const {
1982  // Check if user requested no clang, or clang doesn't understand this type (we
1983  // only handle single inputs for now).
1984  if (JA.size() != 1 ||
1985      !types::isAcceptedByClang((*JA.begin())->getType()))
1986    return false;
1987
1988  // Otherwise make sure this is an action clang understands.
1989  if (!isa<PreprocessJobAction>(JA) && !isa<PrecompileJobAction>(JA) &&
1990      !isa<CompileJobAction>(JA))
1991    return false;
1992
1993  return true;
1994}
1995
1996/// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and return the
1997/// grouped values as integers. Numbers which are not provided are set to 0.
1998///
1999/// \return True if the entire string was parsed (9.2), or all groups were
2000/// parsed (10.3.5extrastuff).
2001bool Driver::GetReleaseVersion(const char *Str, unsigned &Major,
2002                               unsigned &Minor, unsigned &Micro,
2003                               bool &HadExtra) {
2004  HadExtra = false;
2005
2006  Major = Minor = Micro = 0;
2007  if (*Str == '\0')
2008    return true;
2009
2010  char *End;
2011  Major = (unsigned) strtol(Str, &End, 10);
2012  if (*Str != '\0' && *End == '\0')
2013    return true;
2014  if (*End != '.')
2015    return false;
2016
2017  Str = End+1;
2018  Minor = (unsigned) strtol(Str, &End, 10);
2019  if (*Str != '\0' && *End == '\0')
2020    return true;
2021  if (*End != '.')
2022    return false;
2023
2024  Str = End+1;
2025  Micro = (unsigned) strtol(Str, &End, 10);
2026  if (*Str != '\0' && *End == '\0')
2027    return true;
2028  if (Str == End)
2029    return false;
2030  HadExtra = true;
2031  return true;
2032}
2033
2034std::pair<unsigned, unsigned> Driver::getIncludeExcludeOptionFlagMasks() const {
2035  unsigned IncludedFlagsBitmask = 0;
2036  unsigned ExcludedFlagsBitmask = 0;
2037
2038  if (Mode == CLMode) {
2039    // Include CL and Core options.
2040    IncludedFlagsBitmask |= options::CLOption;
2041    IncludedFlagsBitmask |= options::CoreOption;
2042  } else {
2043    ExcludedFlagsBitmask |= options::CLOption;
2044  }
2045
2046  return std::make_pair(IncludedFlagsBitmask, ExcludedFlagsBitmask);
2047}
2048