Tools.h revision c8ba0a0acd30f0b56d08a3a0947f68ac01a40730
1//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===// 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#ifndef CLANG_LIB_DRIVER_TOOLS_H_ 11#define CLANG_LIB_DRIVER_TOOLS_H_ 12 13#include "clang/Driver/Tool.h" 14#include "clang/Driver/Types.h" 15#include "clang/Driver/Util.h" 16#include "llvm/ADT/Triple.h" 17#include "llvm/Option/Option.h" 18#include "llvm/Support/Compiler.h" 19 20namespace clang { 21 class ObjCRuntime; 22 23namespace driver { 24 class Command; 25 class Driver; 26 27namespace toolchains { 28 class Darwin; 29} 30 31namespace tools { 32using llvm::opt::ArgStringList; 33 34 /// \brief Clang compiler tool. 35 class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 36 public: 37 static const char *getBaseInputName(const llvm::opt::ArgList &Args, 38 const InputInfoList &Inputs); 39 static const char *getBaseInputStem(const llvm::opt::ArgList &Args, 40 const InputInfoList &Inputs); 41 static const char *getDependencyFileName(const llvm::opt::ArgList &Args, 42 const InputInfoList &Inputs); 43 44 private: 45 void AddPreprocessingOptions(Compilation &C, const JobAction &JA, 46 const Driver &D, 47 const llvm::opt::ArgList &Args, 48 llvm::opt::ArgStringList &CmdArgs, 49 const InputInfo &Output, 50 const InputInfoList &Inputs) const; 51 52 void AddARMTargetArgs(const llvm::opt::ArgList &Args, 53 llvm::opt::ArgStringList &CmdArgs, 54 bool KernelOrKext) const; 55 void AddMIPSTargetArgs(const llvm::opt::ArgList &Args, 56 llvm::opt::ArgStringList &CmdArgs) const; 57 void AddR600TargetArgs(const llvm::opt::ArgList &Args, 58 llvm::opt::ArgStringList &CmdArgs) const; 59 void AddSparcTargetArgs(const llvm::opt::ArgList &Args, 60 llvm::opt::ArgStringList &CmdArgs) const; 61 void AddSystemZTargetArgs(const llvm::opt::ArgList &Args, 62 llvm::opt::ArgStringList &CmdArgs) const; 63 void AddX86TargetArgs(const llvm::opt::ArgList &Args, 64 llvm::opt::ArgStringList &CmdArgs) const; 65 void AddHexagonTargetArgs(const llvm::opt::ArgList &Args, 66 llvm::opt::ArgStringList &CmdArgs) const; 67 68 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; 69 70 ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args, 71 llvm::opt::ArgStringList &cmdArgs, 72 RewriteKind rewrite) const; 73 74 void AddClangCLArgs(const llvm::opt::ArgList &Args, 75 llvm::opt::ArgStringList &CmdArgs) const; 76 77 public: 78 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 79 80 virtual bool hasGoodDiagnostics() const { return true; } 81 virtual bool hasIntegratedAssembler() const { return true; } 82 virtual bool hasIntegratedCPP() const { return true; } 83 84 virtual void ConstructJob(Compilation &C, const JobAction &JA, 85 const InputInfo &Output, 86 const InputInfoList &Inputs, 87 const llvm::opt::ArgList &TCArgs, 88 const char *LinkingOutput) const; 89 }; 90 91 /// \brief Clang integrated assembler tool. 92 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 93 public: 94 ClangAs(const ToolChain &TC) : Tool("clang::as", 95 "clang integrated assembler", TC) {} 96 97 virtual bool hasGoodDiagnostics() const { return true; } 98 virtual bool hasIntegratedAssembler() const { return false; } 99 virtual bool hasIntegratedCPP() const { return false; } 100 101 virtual void ConstructJob(Compilation &C, const JobAction &JA, 102 const InputInfo &Output, 103 const InputInfoList &Inputs, 104 const llvm::opt::ArgList &TCArgs, 105 const char *LinkingOutput) const; 106 }; 107 108 /// gcc - Generic GCC tool implementations. 109namespace gcc { 110 class LLVM_LIBRARY_VISIBILITY Common : public Tool { 111 public: 112 Common(const char *Name, const char *ShortName, 113 const ToolChain &TC) : Tool(Name, ShortName, TC) {} 114 115 virtual void ConstructJob(Compilation &C, const JobAction &JA, 116 const InputInfo &Output, 117 const InputInfoList &Inputs, 118 const llvm::opt::ArgList &TCArgs, 119 const char *LinkingOutput) const; 120 121 /// RenderExtraToolArgs - Render any arguments necessary to force 122 /// the particular tool mode. 123 virtual void 124 RenderExtraToolArgs(const JobAction &JA, 125 llvm::opt::ArgStringList &CmdArgs) const = 0; 126 }; 127 128 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 129 public: 130 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 131 "gcc preprocessor", TC) {} 132 133 virtual bool hasGoodDiagnostics() const { return true; } 134 virtual bool hasIntegratedCPP() const { return false; } 135 136 virtual void RenderExtraToolArgs(const JobAction &JA, 137 llvm::opt::ArgStringList &CmdArgs) const; 138 }; 139 140 class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 141 public: 142 Precompile(const ToolChain &TC) : Common("gcc::Precompile", 143 "gcc precompile", TC) {} 144 145 virtual bool hasGoodDiagnostics() const { return true; } 146 virtual bool hasIntegratedCPP() const { return true; } 147 148 virtual void RenderExtraToolArgs(const JobAction &JA, 149 llvm::opt::ArgStringList &CmdArgs) const; 150 }; 151 152 class LLVM_LIBRARY_VISIBILITY Compile : public Common { 153 public: 154 Compile(const ToolChain &TC) : Common("gcc::Compile", 155 "gcc frontend", TC) {} 156 157 virtual bool hasGoodDiagnostics() const { return true; } 158 virtual bool hasIntegratedCPP() const { return true; } 159 160 virtual void RenderExtraToolArgs(const JobAction &JA, 161 llvm::opt::ArgStringList &CmdArgs) const; 162 }; 163 164 class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 165 public: 166 Assemble(const ToolChain &TC) : Common("gcc::Assemble", 167 "assembler (via gcc)", TC) {} 168 169 virtual bool hasIntegratedCPP() const { return false; } 170 171 virtual void RenderExtraToolArgs(const JobAction &JA, 172 llvm::opt::ArgStringList &CmdArgs) const; 173 }; 174 175 class LLVM_LIBRARY_VISIBILITY Link : public Common { 176 public: 177 Link(const ToolChain &TC) : Common("gcc::Link", 178 "linker (via gcc)", TC) {} 179 180 virtual bool hasIntegratedCPP() const { return false; } 181 virtual bool isLinkJob() const { return true; } 182 183 virtual void RenderExtraToolArgs(const JobAction &JA, 184 llvm::opt::ArgStringList &CmdArgs) const; 185 }; 186} // end namespace gcc 187 188namespace hexagon { 189 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 190 // We simply use "clang -cc1" for those actions. 191 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 192 public: 193 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 194 "hexagon-as", TC) {} 195 196 virtual bool hasIntegratedCPP() const { return false; } 197 198 virtual void RenderExtraToolArgs(const JobAction &JA, 199 llvm::opt::ArgStringList &CmdArgs) const; 200 virtual void ConstructJob(Compilation &C, const JobAction &JA, 201 const InputInfo &Output, 202 const InputInfoList &Inputs, 203 const llvm::opt::ArgList &TCArgs, 204 const char *LinkingOutput) const; 205 }; 206 207 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 208 public: 209 Link(const ToolChain &TC) : Tool("hexagon::Link", 210 "hexagon-ld", TC) {} 211 212 virtual bool hasIntegratedCPP() const { return false; } 213 virtual bool isLinkJob() const { return true; } 214 215 virtual void RenderExtraToolArgs(const JobAction &JA, 216 llvm::opt::ArgStringList &CmdArgs) const; 217 virtual void ConstructJob(Compilation &C, const JobAction &JA, 218 const InputInfo &Output, 219 const InputInfoList &Inputs, 220 const llvm::opt::ArgList &TCArgs, 221 const char *LinkingOutput) const; 222 }; 223} // end namespace hexagon. 224 225 226namespace darwin { 227 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str); 228 229 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 230 virtual void anchor(); 231 protected: 232 void AddDarwinArch(const llvm::opt::ArgList &Args, 233 llvm::opt::ArgStringList &CmdArgs) const; 234 235 const toolchains::Darwin &getDarwinToolChain() const { 236 return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 237 } 238 239 public: 240 DarwinTool(const char *Name, const char *ShortName, 241 const ToolChain &TC) : Tool(Name, ShortName, TC) {} 242 }; 243 244 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 245 public: 246 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 247 "assembler", TC) {} 248 249 virtual bool hasIntegratedCPP() const { return false; } 250 251 virtual void ConstructJob(Compilation &C, const JobAction &JA, 252 const InputInfo &Output, 253 const InputInfoList &Inputs, 254 const llvm::opt::ArgList &TCArgs, 255 const char *LinkingOutput) const; 256 }; 257 258 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 259 bool NeedsTempPath(const InputInfoList &Inputs) const; 260 void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args, 261 llvm::opt::ArgStringList &CmdArgs, 262 const InputInfoList &Inputs) const; 263 264 public: 265 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 266 267 virtual bool hasIntegratedCPP() const { return false; } 268 virtual bool isLinkJob() const { return true; } 269 270 virtual void ConstructJob(Compilation &C, const JobAction &JA, 271 const InputInfo &Output, 272 const InputInfoList &Inputs, 273 const llvm::opt::ArgList &TCArgs, 274 const char *LinkingOutput) const; 275 }; 276 277 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 278 public: 279 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 280 281 virtual bool hasIntegratedCPP() const { return false; } 282 283 virtual void ConstructJob(Compilation &C, const JobAction &JA, 284 const InputInfo &Output, 285 const InputInfoList &Inputs, 286 const llvm::opt::ArgList &TCArgs, 287 const char *LinkingOutput) const; 288 }; 289 290 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 291 public: 292 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 293 "dsymutil", TC) {} 294 295 virtual bool hasIntegratedCPP() const { return false; } 296 virtual bool isDsymutilJob() const { return true; } 297 298 virtual void ConstructJob(Compilation &C, const JobAction &JA, 299 const InputInfo &Output, 300 const InputInfoList &Inputs, 301 const llvm::opt::ArgList &TCArgs, 302 const char *LinkingOutput) const; 303 }; 304 305 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 306 public: 307 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 308 "dwarfdump", TC) {} 309 310 virtual bool hasIntegratedCPP() const { return false; } 311 312 virtual void ConstructJob(Compilation &C, const JobAction &JA, 313 const InputInfo &Output, 314 const InputInfoList &Inputs, 315 const llvm::opt::ArgList &TCArgs, 316 const char *LinkingOutput) const; 317 }; 318 319} 320 321 /// openbsd -- Directly call GNU Binutils assembler and linker 322namespace openbsd { 323 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 324 public: 325 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 326 TC) {} 327 328 virtual bool hasIntegratedCPP() const { return false; } 329 330 virtual void ConstructJob(Compilation &C, const JobAction &JA, 331 const InputInfo &Output, 332 const InputInfoList &Inputs, 333 const llvm::opt::ArgList &TCArgs, 334 const char *LinkingOutput) const; 335 }; 336 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 337 public: 338 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 339 340 virtual bool hasIntegratedCPP() const { return false; } 341 virtual bool isLinkJob() const { return true; } 342 343 virtual void ConstructJob(Compilation &C, const JobAction &JA, 344 const InputInfo &Output, 345 const InputInfoList &Inputs, 346 const llvm::opt::ArgList &TCArgs, 347 const char *LinkingOutput) const; 348 }; 349} // end namespace openbsd 350 351 /// bitrig -- Directly call GNU Binutils assembler and linker 352namespace bitrig { 353 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 354 public: 355 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler", 356 TC) {} 357 358 virtual bool hasIntegratedCPP() const { return false; } 359 360 virtual void ConstructJob(Compilation &C, const JobAction &JA, 361 const InputInfo &Output, 362 const InputInfoList &Inputs, 363 const llvm::opt::ArgList &TCArgs, 364 const char *LinkingOutput) const; 365 }; 366 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 367 public: 368 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {} 369 370 virtual bool hasIntegratedCPP() const { return false; } 371 virtual bool isLinkJob() const { return true; } 372 373 virtual void ConstructJob(Compilation &C, const JobAction &JA, 374 const InputInfo &Output, 375 const InputInfoList &Inputs, 376 const llvm::opt::ArgList &TCArgs, 377 const char *LinkingOutput) const; 378 }; 379} // end namespace bitrig 380 381 /// freebsd -- Directly call GNU Binutils assembler and linker 382namespace freebsd { 383 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 384 public: 385 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 386 TC) {} 387 388 virtual bool hasIntegratedCPP() const { return false; } 389 390 virtual void ConstructJob(Compilation &C, const JobAction &JA, 391 const InputInfo &Output, 392 const InputInfoList &Inputs, 393 const llvm::opt::ArgList &TCArgs, 394 const char *LinkingOutput) const; 395 }; 396 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 397 public: 398 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 399 400 virtual bool hasIntegratedCPP() const { return false; } 401 virtual bool isLinkJob() const { return true; } 402 403 virtual void ConstructJob(Compilation &C, const JobAction &JA, 404 const InputInfo &Output, 405 const InputInfoList &Inputs, 406 const llvm::opt::ArgList &TCArgs, 407 const char *LinkingOutput) const; 408 }; 409} // end namespace freebsd 410 411 /// netbsd -- Directly call GNU Binutils assembler and linker 412namespace netbsd { 413 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 414 415 public: 416 Assemble(const ToolChain &TC) 417 : Tool("netbsd::Assemble", "assembler", TC) {} 418 419 virtual bool hasIntegratedCPP() const { return false; } 420 421 virtual void ConstructJob(Compilation &C, const JobAction &JA, 422 const InputInfo &Output, 423 const InputInfoList &Inputs, 424 const llvm::opt::ArgList &TCArgs, 425 const char *LinkingOutput) const; 426 }; 427 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 428 429 public: 430 Link(const ToolChain &TC) 431 : Tool("netbsd::Link", "linker", TC) {} 432 433 virtual bool hasIntegratedCPP() const { return false; } 434 virtual bool isLinkJob() const { return true; } 435 436 virtual void ConstructJob(Compilation &C, const JobAction &JA, 437 const InputInfo &Output, 438 const InputInfoList &Inputs, 439 const llvm::opt::ArgList &TCArgs, 440 const char *LinkingOutput) const; 441 }; 442} // end namespace netbsd 443 444 /// Directly call GNU Binutils' assembler and linker. 445namespace gnutools { 446 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 447 public: 448 Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {} 449 450 virtual bool hasIntegratedCPP() const { return false; } 451 452 virtual void ConstructJob(Compilation &C, const JobAction &JA, 453 const InputInfo &Output, 454 const InputInfoList &Inputs, 455 const llvm::opt::ArgList &TCArgs, 456 const char *LinkingOutput) const; 457 }; 458 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 459 public: 460 Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {} 461 462 virtual bool hasIntegratedCPP() const { return false; } 463 virtual bool isLinkJob() const { return true; } 464 465 virtual void ConstructJob(Compilation &C, const JobAction &JA, 466 const InputInfo &Output, 467 const InputInfoList &Inputs, 468 const llvm::opt::ArgList &TCArgs, 469 const char *LinkingOutput) const; 470 }; 471} 472 /// minix -- Directly call GNU Binutils assembler and linker 473namespace minix { 474 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 475 public: 476 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 477 TC) {} 478 479 virtual bool hasIntegratedCPP() const { return false; } 480 481 virtual void ConstructJob(Compilation &C, const JobAction &JA, 482 const InputInfo &Output, 483 const InputInfoList &Inputs, 484 const llvm::opt::ArgList &TCArgs, 485 const char *LinkingOutput) const; 486 }; 487 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 488 public: 489 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 490 491 virtual bool hasIntegratedCPP() const { return false; } 492 virtual bool isLinkJob() const { return true; } 493 494 virtual void ConstructJob(Compilation &C, const JobAction &JA, 495 const InputInfo &Output, 496 const InputInfoList &Inputs, 497 const llvm::opt::ArgList &TCArgs, 498 const char *LinkingOutput) const; 499 }; 500} // end namespace minix 501 502 /// solaris -- Directly call Solaris assembler and linker 503namespace solaris { 504 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 505 public: 506 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", 507 TC) {} 508 509 virtual bool hasIntegratedCPP() const { return false; } 510 511 virtual void ConstructJob(Compilation &C, const JobAction &JA, 512 const InputInfo &Output, 513 const InputInfoList &Inputs, 514 const llvm::opt::ArgList &TCArgs, 515 const char *LinkingOutput) const; 516 }; 517 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 518 public: 519 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} 520 521 virtual bool hasIntegratedCPP() const { return false; } 522 virtual bool isLinkJob() const { return true; } 523 524 virtual void ConstructJob(Compilation &C, const JobAction &JA, 525 const InputInfo &Output, 526 const InputInfoList &Inputs, 527 const llvm::opt::ArgList &TCArgs, 528 const char *LinkingOutput) const; 529 }; 530} // end namespace solaris 531 532 /// auroraux -- Directly call GNU Binutils assembler and linker 533namespace auroraux { 534 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 535 public: 536 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 537 TC) {} 538 539 virtual bool hasIntegratedCPP() const { return false; } 540 541 virtual void ConstructJob(Compilation &C, const JobAction &JA, 542 const InputInfo &Output, 543 const InputInfoList &Inputs, 544 const llvm::opt::ArgList &TCArgs, 545 const char *LinkingOutput) const; 546 }; 547 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 548 public: 549 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 550 551 virtual bool hasIntegratedCPP() const { return false; } 552 virtual bool isLinkJob() const { return true; } 553 554 virtual void ConstructJob(Compilation &C, const JobAction &JA, 555 const InputInfo &Output, 556 const InputInfoList &Inputs, 557 const llvm::opt::ArgList &TCArgs, 558 const char *LinkingOutput) const; 559 }; 560} // end namespace auroraux 561 562 /// dragonfly -- Directly call GNU Binutils assembler and linker 563namespace dragonfly { 564 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 565 public: 566 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 567 TC) {} 568 569 virtual bool hasIntegratedCPP() const { return false; } 570 571 virtual void ConstructJob(Compilation &C, const JobAction &JA, 572 const InputInfo &Output, 573 const InputInfoList &Inputs, 574 const llvm::opt::ArgList &TCArgs, 575 const char *LinkingOutput) const; 576 }; 577 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 578 public: 579 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 580 581 virtual bool hasIntegratedCPP() const { return false; } 582 virtual bool isLinkJob() const { return true; } 583 584 virtual void ConstructJob(Compilation &C, const JobAction &JA, 585 const InputInfo &Output, 586 const InputInfoList &Inputs, 587 const llvm::opt::ArgList &TCArgs, 588 const char *LinkingOutput) const; 589 }; 590} // end namespace dragonfly 591 592 /// Visual studio tools. 593namespace visualstudio { 594 class LLVM_LIBRARY_VISIBILITY Link : public Tool { 595 public: 596 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 597 598 virtual bool hasIntegratedCPP() const { return false; } 599 virtual bool isLinkJob() const { return true; } 600 601 virtual void ConstructJob(Compilation &C, const JobAction &JA, 602 const InputInfo &Output, 603 const InputInfoList &Inputs, 604 const llvm::opt::ArgList &TCArgs, 605 const char *LinkingOutput) const; 606 }; 607 608 class LLVM_LIBRARY_VISIBILITY Compile : public Tool { 609 public: 610 Compile(const ToolChain &TC) : Tool("visualstudio::Compile", "compiler", TC) {} 611 612 virtual bool hasIntegratedAssembler() const { return true; } 613 virtual bool hasIntegratedCPP() const { return true; } 614 virtual bool isLinkJob() const { return false; } 615 616 virtual void ConstructJob(Compilation &C, const JobAction &JA, 617 const InputInfo &Output, 618 const InputInfoList &Inputs, 619 const llvm::opt::ArgList &TCArgs, 620 const char *LinkingOutput) const; 621 622 Command *GetCommand(Compilation &C, const JobAction &JA, 623 const InputInfo &Output, 624 const InputInfoList &Inputs, 625 const llvm::opt::ArgList &TCArgs, 626 const char *LinkingOutput) const; 627 }; 628} // end namespace visualstudio 629 630} // end namespace toolchains 631} // end namespace driver 632} // end namespace clang 633 634#endif // CLANG_LIB_DRIVER_TOOLS_H_ 635