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