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