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