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