1 //===--- HostInfo.cpp - Host specific information -------------------------===// 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/HostInfo.h" 11 12 #include "clang/Driver/Arg.h" 13 #include "clang/Driver/ArgList.h" 14 #include "clang/Driver/Driver.h" 15 #include "clang/Driver/DriverDiagnostic.h" 16 #include "clang/Driver/Option.h" 17 #include "clang/Driver/Options.h" 18 19 #include "llvm/ADT/StringMap.h" 20 #include "llvm/Support/Compiler.h" 21 22 #include "ToolChains.h" 23 24 #include <cassert> 25 26 using namespace clang::driver; 27 28 HostInfo::HostInfo(const Driver &D, const llvm::Triple &_Triple) 29 : TheDriver(D), Triple(_Triple) { 30 } 31 32 HostInfo::~HostInfo() { 33 } 34 35 namespace { 36 37 // Darwin Host Info 38 39 /// DarwinHostInfo - Darwin host information implementation. 40 class DarwinHostInfo : public HostInfo { 41 /// Cache of tool chains we have created. 42 mutable llvm::DenseMap<unsigned, ToolChain*> ToolChains; 43 44 public: 45 DarwinHostInfo(const Driver &D, const llvm::Triple &Triple); 46 ~DarwinHostInfo(); 47 48 virtual bool useDriverDriver() const; 49 50 virtual ToolChain *CreateToolChain(const ArgList &Args, 51 const char *ArchName) const; 52 }; 53 54 DarwinHostInfo::DarwinHostInfo(const Driver &D, const llvm::Triple& Triple) 55 : HostInfo(D, Triple) { 56 } 57 58 DarwinHostInfo::~DarwinHostInfo() { 59 for (llvm::DenseMap<unsigned, ToolChain*>::iterator 60 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 61 delete it->second; 62 } 63 64 bool DarwinHostInfo::useDriverDriver() const { 65 return true; 66 } 67 68 ToolChain *DarwinHostInfo::CreateToolChain(const ArgList &Args, 69 const char *ArchName) const { 70 llvm::Triple::ArchType Arch; 71 72 if (!ArchName) { 73 // If we aren't looking for a specific arch, infer the default architecture 74 // based on -arch and -m32/-m64 command line options. 75 if (Arg *A = Args.getLastArg(options::OPT_arch)) { 76 // The gcc driver behavior with multiple -arch flags wasn't consistent for 77 // things which rely on a default architecture. We just use the last -arch 78 // to find the default tool chain (assuming it is valid). 79 Arch = llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args)); 80 81 // If it was invalid just use the host, we will reject this command line 82 // later. 83 if (Arch == llvm::Triple::UnknownArch) 84 Arch = getTriple().getArch(); 85 } else { 86 // Otherwise default to the arch of the host. 87 Arch = getTriple().getArch(); 88 } 89 90 // Honor -m32 and -m64 when finding the default tool chain. 91 // 92 // FIXME: Should this information be in llvm::Triple? 93 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 94 if (A->getOption().matches(options::OPT_m32)) { 95 if (Arch == llvm::Triple::x86_64) 96 Arch = llvm::Triple::x86; 97 if (Arch == llvm::Triple::ppc64) 98 Arch = llvm::Triple::ppc; 99 } else { 100 if (Arch == llvm::Triple::x86) 101 Arch = llvm::Triple::x86_64; 102 if (Arch == llvm::Triple::ppc) 103 Arch = llvm::Triple::ppc64; 104 } 105 } 106 } else 107 Arch = llvm::Triple::getArchTypeForDarwinArchName(ArchName); 108 109 assert(Arch != llvm::Triple::UnknownArch && "Unexpected arch!"); 110 ToolChain *&TC = ToolChains[Arch]; 111 if (!TC) { 112 llvm::Triple TCTriple(getTriple()); 113 TCTriple.setArch(Arch); 114 115 // If we recognized the arch, match it to the toolchains we support. 116 if (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64 || 117 Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb) { 118 TC = new toolchains::DarwinClang(*this, TCTriple); 119 } else 120 TC = new toolchains::Darwin_Generic_GCC(*this, TCTriple); 121 } 122 123 return TC; 124 } 125 126 // TCE Host Info 127 128 /// TCEHostInfo - TCE host information implementation (see http://tce.cs.tut.fi) 129 class TCEHostInfo : public HostInfo { 130 131 public: 132 TCEHostInfo(const Driver &D, const llvm::Triple &Triple); 133 ~TCEHostInfo() {} 134 135 virtual bool useDriverDriver() const; 136 137 virtual ToolChain *CreateToolChain(const ArgList &Args, 138 const char *ArchName) const; 139 }; 140 141 TCEHostInfo::TCEHostInfo(const Driver &D, const llvm::Triple& Triple) 142 : HostInfo(D, Triple) { 143 } 144 145 bool TCEHostInfo::useDriverDriver() const { 146 return false; 147 } 148 149 ToolChain *TCEHostInfo::CreateToolChain(const ArgList &Args, 150 const char *ArchName) const { 151 llvm::Triple TCTriple(getTriple()); 152 // TCTriple.setArchName(ArchName); 153 return new toolchains::TCEToolChain(*this, TCTriple); 154 } 155 156 157 // Unknown Host Info 158 159 /// UnknownHostInfo - Generic host information to use for unknown hosts. 160 class UnknownHostInfo : public HostInfo { 161 /// Cache of tool chains we have created. 162 mutable llvm::StringMap<ToolChain*> ToolChains; 163 164 public: 165 UnknownHostInfo(const Driver &D, const llvm::Triple& Triple); 166 ~UnknownHostInfo(); 167 168 virtual bool useDriverDriver() const; 169 170 virtual ToolChain *CreateToolChain(const ArgList &Args, 171 const char *ArchName) const; 172 }; 173 174 UnknownHostInfo::UnknownHostInfo(const Driver &D, const llvm::Triple& Triple) 175 : HostInfo(D, Triple) { 176 } 177 178 UnknownHostInfo::~UnknownHostInfo() { 179 for (llvm::StringMap<ToolChain*>::iterator 180 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 181 delete it->second; 182 } 183 184 bool UnknownHostInfo::useDriverDriver() const { 185 return false; 186 } 187 188 ToolChain *UnknownHostInfo::CreateToolChain(const ArgList &Args, 189 const char *ArchName) const { 190 assert(!ArchName && 191 "Unexpected arch name on platform without driver driver support."); 192 193 // Automatically handle some instances of -m32/-m64 we know about. 194 std::string Arch = getArchName(); 195 ArchName = Arch.c_str(); 196 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 197 if (Triple.getArch() == llvm::Triple::x86 || 198 Triple.getArch() == llvm::Triple::x86_64) { 199 ArchName = 200 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 201 } else if (Triple.getArch() == llvm::Triple::ppc || 202 Triple.getArch() == llvm::Triple::ppc64) { 203 ArchName = 204 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 205 } 206 } 207 208 ToolChain *&TC = ToolChains[ArchName]; 209 if (!TC) { 210 llvm::Triple TCTriple(getTriple()); 211 TCTriple.setArchName(ArchName); 212 213 TC = new toolchains::Generic_GCC(*this, TCTriple); 214 } 215 216 return TC; 217 } 218 219 // OpenBSD Host Info 220 221 /// OpenBSDHostInfo - OpenBSD host information implementation. 222 class OpenBSDHostInfo : public HostInfo { 223 /// Cache of tool chains we have created. 224 mutable llvm::StringMap<ToolChain*> ToolChains; 225 226 public: 227 OpenBSDHostInfo(const Driver &D, const llvm::Triple& Triple) 228 : HostInfo(D, Triple) {} 229 ~OpenBSDHostInfo(); 230 231 virtual bool useDriverDriver() const; 232 233 virtual ToolChain *CreateToolChain(const ArgList &Args, 234 const char *ArchName) const; 235 }; 236 237 OpenBSDHostInfo::~OpenBSDHostInfo() { 238 for (llvm::StringMap<ToolChain*>::iterator 239 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 240 delete it->second; 241 } 242 243 bool OpenBSDHostInfo::useDriverDriver() const { 244 return false; 245 } 246 247 ToolChain *OpenBSDHostInfo::CreateToolChain(const ArgList &Args, 248 const char *ArchName) const { 249 assert(!ArchName && 250 "Unexpected arch name on platform without driver driver support."); 251 252 std::string Arch = getArchName(); 253 ArchName = Arch.c_str(); 254 255 ToolChain *&TC = ToolChains[ArchName]; 256 if (!TC) { 257 llvm::Triple TCTriple(getTriple()); 258 TCTriple.setArchName(ArchName); 259 260 TC = new toolchains::OpenBSD(*this, TCTriple); 261 } 262 263 return TC; 264 } 265 266 // AuroraUX Host Info 267 268 /// AuroraUXHostInfo - AuroraUX host information implementation. 269 class AuroraUXHostInfo : public HostInfo { 270 /// Cache of tool chains we have created. 271 mutable llvm::StringMap<ToolChain*> ToolChains; 272 273 public: 274 AuroraUXHostInfo(const Driver &D, const llvm::Triple& Triple) 275 : HostInfo(D, Triple) {} 276 ~AuroraUXHostInfo(); 277 278 virtual bool useDriverDriver() const; 279 280 virtual ToolChain *CreateToolChain(const ArgList &Args, 281 const char *ArchName) const; 282 }; 283 284 AuroraUXHostInfo::~AuroraUXHostInfo() { 285 for (llvm::StringMap<ToolChain*>::iterator 286 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 287 delete it->second; 288 } 289 290 bool AuroraUXHostInfo::useDriverDriver() const { 291 return false; 292 } 293 294 ToolChain *AuroraUXHostInfo::CreateToolChain(const ArgList &Args, 295 const char *ArchName) const { 296 assert(!ArchName && 297 "Unexpected arch name on platform without driver driver support."); 298 299 ToolChain *&TC = ToolChains[getArchName()]; 300 301 if (!TC) { 302 llvm::Triple TCTriple(getTriple()); 303 TCTriple.setArchName(getArchName()); 304 305 TC = new toolchains::AuroraUX(*this, TCTriple); 306 } 307 308 return TC; 309 } 310 311 // FreeBSD Host Info 312 313 /// FreeBSDHostInfo - FreeBSD host information implementation. 314 class FreeBSDHostInfo : public HostInfo { 315 /// Cache of tool chains we have created. 316 mutable llvm::StringMap<ToolChain*> ToolChains; 317 318 public: 319 FreeBSDHostInfo(const Driver &D, const llvm::Triple& Triple) 320 : HostInfo(D, Triple) {} 321 ~FreeBSDHostInfo(); 322 323 virtual bool useDriverDriver() const; 324 325 virtual ToolChain *CreateToolChain(const ArgList &Args, 326 const char *ArchName) const; 327 }; 328 329 FreeBSDHostInfo::~FreeBSDHostInfo() { 330 for (llvm::StringMap<ToolChain*>::iterator 331 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 332 delete it->second; 333 } 334 335 bool FreeBSDHostInfo::useDriverDriver() const { 336 return false; 337 } 338 339 ToolChain *FreeBSDHostInfo::CreateToolChain(const ArgList &Args, 340 const char *ArchName) const { 341 assert(!ArchName && 342 "Unexpected arch name on platform without driver driver support."); 343 344 // Automatically handle some instances of -m32/-m64 we know about. 345 std::string Arch = getArchName(); 346 ArchName = Arch.c_str(); 347 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 348 if (Triple.getArch() == llvm::Triple::x86 || 349 Triple.getArch() == llvm::Triple::x86_64) { 350 ArchName = 351 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 352 } else if (Triple.getArch() == llvm::Triple::ppc || 353 Triple.getArch() == llvm::Triple::ppc64) { 354 ArchName = 355 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 356 } 357 } 358 359 ToolChain *&TC = ToolChains[ArchName]; 360 if (!TC) { 361 llvm::Triple TCTriple(getTriple()); 362 TCTriple.setArchName(ArchName); 363 364 TC = new toolchains::FreeBSD(*this, TCTriple); 365 } 366 367 return TC; 368 } 369 370 // NetBSD Host Info 371 372 /// NetBSDHostInfo - NetBSD host information implementation. 373 class NetBSDHostInfo : public HostInfo { 374 /// Cache of tool chains we have created. 375 mutable llvm::StringMap<ToolChain*> ToolChains; 376 377 public: 378 NetBSDHostInfo(const Driver &D, const llvm::Triple& Triple) 379 : HostInfo(D, Triple) {} 380 ~NetBSDHostInfo(); 381 382 virtual bool useDriverDriver() const; 383 384 virtual ToolChain *CreateToolChain(const ArgList &Args, 385 const char *ArchName) const; 386 }; 387 388 NetBSDHostInfo::~NetBSDHostInfo() { 389 for (llvm::StringMap<ToolChain*>::iterator 390 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 391 delete it->second; 392 } 393 394 bool NetBSDHostInfo::useDriverDriver() const { 395 return false; 396 } 397 398 ToolChain *NetBSDHostInfo::CreateToolChain(const ArgList &Args, 399 const char *ArchName) const { 400 assert(!ArchName && 401 "Unexpected arch name on platform without driver driver support."); 402 403 // Automatically handle some instances of -m32/-m64 we know about. 404 std::string Arch = getArchName(); 405 ArchName = Arch.c_str(); 406 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 407 if (Triple.getArch() == llvm::Triple::x86 || 408 Triple.getArch() == llvm::Triple::x86_64) { 409 ArchName = 410 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 411 } else if (Triple.getArch() == llvm::Triple::ppc || 412 Triple.getArch() == llvm::Triple::ppc64) { 413 ArchName = 414 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 415 } 416 } 417 llvm::Triple TargetTriple(getTriple()); 418 TargetTriple.setArchName(ArchName); 419 420 ToolChain *TC; 421 422 // XXX Cache toolchain even if -m32 is used 423 if (Arch == ArchName) { 424 TC = ToolChains[ArchName]; 425 if (TC) 426 return TC; 427 } 428 429 TC = new toolchains::NetBSD(*this, TargetTriple, getTriple()); 430 431 return TC; 432 } 433 434 // Minix Host Info 435 436 /// MinixHostInfo - Minix host information implementation. 437 class MinixHostInfo : public HostInfo { 438 /// Cache of tool chains we have created. 439 mutable llvm::StringMap<ToolChain*> ToolChains; 440 441 public: 442 MinixHostInfo(const Driver &D, const llvm::Triple& Triple) 443 : HostInfo(D, Triple) {} 444 ~MinixHostInfo(); 445 446 virtual bool useDriverDriver() const; 447 448 virtual ToolChain *CreateToolChain(const ArgList &Args, 449 const char *ArchName) const; 450 }; 451 452 MinixHostInfo::~MinixHostInfo() { 453 for (llvm::StringMap<ToolChain*>::iterator 454 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it){ 455 delete it->second; 456 } 457 } 458 459 bool MinixHostInfo::useDriverDriver() const { 460 return false; 461 } 462 463 ToolChain *MinixHostInfo::CreateToolChain(const ArgList &Args, 464 const char *ArchName) const { 465 assert(!ArchName && 466 "Unexpected arch name on platform without driver driver support."); 467 468 std::string Arch = getArchName(); 469 ArchName = Arch.c_str(); 470 471 ToolChain *&TC = ToolChains[ArchName]; 472 if (!TC) { 473 llvm::Triple TCTriple(getTriple()); 474 TCTriple.setArchName(ArchName); 475 476 TC = new toolchains::Minix(*this, TCTriple); 477 } 478 479 return TC; 480 } 481 482 // DragonFly Host Info 483 484 /// DragonFlyHostInfo - DragonFly host information implementation. 485 class DragonFlyHostInfo : public HostInfo { 486 /// Cache of tool chains we have created. 487 mutable llvm::StringMap<ToolChain*> ToolChains; 488 489 public: 490 DragonFlyHostInfo(const Driver &D, const llvm::Triple& Triple) 491 : HostInfo(D, Triple) {} 492 ~DragonFlyHostInfo(); 493 494 virtual bool useDriverDriver() const; 495 496 virtual ToolChain *CreateToolChain(const ArgList &Args, 497 const char *ArchName) const; 498 }; 499 500 DragonFlyHostInfo::~DragonFlyHostInfo() { 501 for (llvm::StringMap<ToolChain*>::iterator 502 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 503 delete it->second; 504 } 505 506 bool DragonFlyHostInfo::useDriverDriver() const { 507 return false; 508 } 509 510 ToolChain *DragonFlyHostInfo::CreateToolChain(const ArgList &Args, 511 const char *ArchName) const { 512 assert(!ArchName && 513 "Unexpected arch name on platform without driver driver support."); 514 515 ToolChain *&TC = ToolChains[getArchName()]; 516 517 if (!TC) { 518 llvm::Triple TCTriple(getTriple()); 519 TCTriple.setArchName(getArchName()); 520 521 TC = new toolchains::DragonFly(*this, TCTriple); 522 } 523 524 return TC; 525 } 526 527 // Linux Host Info 528 529 /// LinuxHostInfo - Linux host information implementation. 530 class LinuxHostInfo : public HostInfo { 531 /// Cache of tool chains we have created. 532 mutable llvm::StringMap<ToolChain*> ToolChains; 533 534 public: 535 LinuxHostInfo(const Driver &D, const llvm::Triple& Triple) 536 : HostInfo(D, Triple) {} 537 ~LinuxHostInfo(); 538 539 virtual bool useDriverDriver() const; 540 541 virtual ToolChain *CreateToolChain(const ArgList &Args, 542 const char *ArchName) const; 543 }; 544 545 LinuxHostInfo::~LinuxHostInfo() { 546 for (llvm::StringMap<ToolChain*>::iterator 547 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 548 delete it->second; 549 } 550 551 bool LinuxHostInfo::useDriverDriver() const { 552 return false; 553 } 554 555 ToolChain *LinuxHostInfo::CreateToolChain(const ArgList &Args, 556 const char *ArchName) const { 557 558 assert(!ArchName && 559 "Unexpected arch name on platform without driver driver support."); 560 561 // Automatically handle some instances of -m32/-m64 we know about. 562 std::string Arch = getArchName(); 563 ArchName = Arch.c_str(); 564 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 565 if (Triple.getArch() == llvm::Triple::x86 || 566 Triple.getArch() == llvm::Triple::x86_64) { 567 ArchName = 568 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 569 } else if (Triple.getArch() == llvm::Triple::ppc || 570 Triple.getArch() == llvm::Triple::ppc64) { 571 ArchName = 572 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 573 } 574 } 575 576 ToolChain *&TC = ToolChains[ArchName]; 577 578 if (!TC) { 579 llvm::Triple TCTriple(getTriple()); 580 TCTriple.setArchName(ArchName); 581 582 TC = new toolchains::Linux(*this, TCTriple); 583 } 584 585 return TC; 586 } 587 588 // Windows Host Info 589 590 /// WindowsHostInfo - Host information to use on Microsoft Windows. 591 class WindowsHostInfo : public HostInfo { 592 /// Cache of tool chains we have created. 593 mutable llvm::StringMap<ToolChain*> ToolChains; 594 595 public: 596 WindowsHostInfo(const Driver &D, const llvm::Triple& Triple); 597 ~WindowsHostInfo(); 598 599 virtual bool useDriverDriver() const; 600 601 virtual types::ID lookupTypeForExtension(const char *Ext) const { 602 return types::lookupTypeForExtension(Ext); 603 } 604 605 virtual ToolChain *CreateToolChain(const ArgList &Args, 606 const char *ArchName) const; 607 }; 608 609 WindowsHostInfo::WindowsHostInfo(const Driver &D, const llvm::Triple& Triple) 610 : HostInfo(D, Triple) { 611 } 612 613 WindowsHostInfo::~WindowsHostInfo() { 614 for (llvm::StringMap<ToolChain*>::iterator 615 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 616 delete it->second; 617 } 618 619 bool WindowsHostInfo::useDriverDriver() const { 620 return false; 621 } 622 623 ToolChain *WindowsHostInfo::CreateToolChain(const ArgList &Args, 624 const char *ArchName) const { 625 assert(!ArchName && 626 "Unexpected arch name on platform without driver driver support."); 627 628 // Automatically handle some instances of -m32/-m64 we know about. 629 std::string Arch = getArchName(); 630 ArchName = Arch.c_str(); 631 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 632 if (Triple.getArch() == llvm::Triple::x86 || 633 Triple.getArch() == llvm::Triple::x86_64) { 634 ArchName = 635 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 636 } 637 } 638 639 ToolChain *&TC = ToolChains[ArchName]; 640 if (!TC) { 641 llvm::Triple TCTriple(getTriple()); 642 TCTriple.setArchName(ArchName); 643 644 TC = new toolchains::Windows(*this, TCTriple); 645 } 646 647 return TC; 648 } 649 650 // FIXME: This is a placeholder. 651 class MinGWHostInfo : public UnknownHostInfo { 652 public: 653 MinGWHostInfo(const Driver &D, const llvm::Triple& Triple); 654 }; 655 656 MinGWHostInfo::MinGWHostInfo(const Driver &D, const llvm::Triple& Triple) 657 : UnknownHostInfo(D, Triple) {} 658 659 } // end anon namespace 660 661 const HostInfo * 662 clang::driver::createAuroraUXHostInfo(const Driver &D, 663 const llvm::Triple& Triple){ 664 return new AuroraUXHostInfo(D, Triple); 665 } 666 667 const HostInfo * 668 clang::driver::createDarwinHostInfo(const Driver &D, 669 const llvm::Triple& Triple){ 670 return new DarwinHostInfo(D, Triple); 671 } 672 673 const HostInfo * 674 clang::driver::createOpenBSDHostInfo(const Driver &D, 675 const llvm::Triple& Triple) { 676 return new OpenBSDHostInfo(D, Triple); 677 } 678 679 const HostInfo * 680 clang::driver::createFreeBSDHostInfo(const Driver &D, 681 const llvm::Triple& Triple) { 682 return new FreeBSDHostInfo(D, Triple); 683 } 684 685 const HostInfo * 686 clang::driver::createNetBSDHostInfo(const Driver &D, 687 const llvm::Triple& Triple) { 688 return new NetBSDHostInfo(D, Triple); 689 } 690 691 const HostInfo * 692 clang::driver::createMinixHostInfo(const Driver &D, 693 const llvm::Triple& Triple) { 694 return new MinixHostInfo(D, Triple); 695 } 696 697 const HostInfo * 698 clang::driver::createDragonFlyHostInfo(const Driver &D, 699 const llvm::Triple& Triple) { 700 return new DragonFlyHostInfo(D, Triple); 701 } 702 703 const HostInfo * 704 clang::driver::createLinuxHostInfo(const Driver &D, 705 const llvm::Triple& Triple) { 706 return new LinuxHostInfo(D, Triple); 707 } 708 709 const HostInfo * 710 clang::driver::createTCEHostInfo(const Driver &D, 711 const llvm::Triple& Triple) { 712 return new TCEHostInfo(D, Triple); 713 } 714 715 const HostInfo * 716 clang::driver::createWindowsHostInfo(const Driver &D, 717 const llvm::Triple& Triple) { 718 return new WindowsHostInfo(D, Triple); 719 } 720 721 const HostInfo * 722 clang::driver::createMinGWHostInfo(const Driver &D, 723 const llvm::Triple& Triple) { 724 return new MinGWHostInfo(D, Triple); 725 } 726 727 const HostInfo * 728 clang::driver::createUnknownHostInfo(const Driver &D, 729 const llvm::Triple& Triple) { 730 return new UnknownHostInfo(D, Triple); 731 } 732