clang API Documentation
00001 //===--- HostInfo.cpp - Host specific information -------------------------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 00010 #include "clang/Driver/HostInfo.h" 00011 00012 #include "clang/Driver/Arg.h" 00013 #include "clang/Driver/ArgList.h" 00014 #include "clang/Driver/Driver.h" 00015 #include "clang/Driver/DriverDiagnostic.h" 00016 #include "clang/Driver/Option.h" 00017 #include "clang/Driver/Options.h" 00018 00019 #include "llvm/ADT/StringMap.h" 00020 #include "llvm/Support/Compiler.h" 00021 00022 #include "ToolChains.h" 00023 00024 #include <cassert> 00025 00026 using namespace clang::driver; 00027 00028 HostInfo::HostInfo(const Driver &D, const llvm::Triple &_Triple) 00029 : TheDriver(D), Triple(_Triple) { 00030 } 00031 00032 HostInfo::~HostInfo() { 00033 } 00034 00035 namespace { 00036 00037 // Darwin Host Info 00038 00039 /// DarwinHostInfo - Darwin host information implementation. 00040 class DarwinHostInfo : public HostInfo { 00041 /// Cache of tool chains we have created. 00042 mutable llvm::DenseMap<unsigned, ToolChain*> ToolChains; 00043 00044 public: 00045 DarwinHostInfo(const Driver &D, const llvm::Triple &Triple); 00046 ~DarwinHostInfo(); 00047 00048 virtual ToolChain *CreateToolChain(const ArgList &Args, 00049 const char *ArchName) const; 00050 }; 00051 00052 DarwinHostInfo::DarwinHostInfo(const Driver &D, const llvm::Triple& Triple) 00053 : HostInfo(D, Triple) { 00054 } 00055 00056 DarwinHostInfo::~DarwinHostInfo() { 00057 for (llvm::DenseMap<unsigned, ToolChain*>::iterator 00058 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00059 delete it->second; 00060 } 00061 00062 ToolChain *DarwinHostInfo::CreateToolChain(const ArgList &Args, 00063 const char *ArchName) const { 00064 llvm::Triple::ArchType Arch; 00065 00066 if (!ArchName) { 00067 // If we aren't looking for a specific arch, infer the default architecture 00068 // based on -arch and -m32/-m64 command line options. 00069 if (Arg *A = Args.getLastArg(options::OPT_arch)) { 00070 // The gcc driver behavior with multiple -arch flags wasn't consistent for 00071 // things which rely on a default architecture. We just use the last -arch 00072 // to find the default tool chain (assuming it is valid). 00073 Arch = llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args)); 00074 00075 // If it was invalid just use the host, we will reject this command line 00076 // later. 00077 if (Arch == llvm::Triple::UnknownArch) 00078 Arch = getTriple().getArch(); 00079 } else { 00080 // Otherwise default to the arch of the host. 00081 Arch = getTriple().getArch(); 00082 } 00083 00084 // Honor -m32 and -m64 when finding the default tool chain. 00085 // 00086 // FIXME: Should this information be in llvm::Triple? 00087 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 00088 if (A->getOption().matches(options::OPT_m32)) { 00089 if (Arch == llvm::Triple::x86_64) 00090 Arch = llvm::Triple::x86; 00091 if (Arch == llvm::Triple::ppc64) 00092 Arch = llvm::Triple::ppc; 00093 } else { 00094 if (Arch == llvm::Triple::x86) 00095 Arch = llvm::Triple::x86_64; 00096 if (Arch == llvm::Triple::ppc) 00097 Arch = llvm::Triple::ppc64; 00098 } 00099 } 00100 } else 00101 Arch = llvm::Triple::getArchTypeForDarwinArchName(ArchName); 00102 00103 assert(Arch != llvm::Triple::UnknownArch && "Unexpected arch!"); 00104 ToolChain *&TC = ToolChains[Arch]; 00105 if (!TC) { 00106 llvm::Triple TCTriple(getTriple()); 00107 TCTriple.setArch(Arch); 00108 00109 // If we recognized the arch, match it to the toolchains we support. 00110 if (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64 || 00111 Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb) { 00112 TC = new toolchains::DarwinClang(*this, TCTriple); 00113 } else 00114 TC = new toolchains::Darwin_Generic_GCC(*this, TCTriple); 00115 } 00116 00117 return TC; 00118 } 00119 00120 // TCE Host Info 00121 00122 /// TCEHostInfo - TCE host information implementation (see http://tce.cs.tut.fi) 00123 class TCEHostInfo : public HostInfo { 00124 00125 public: 00126 TCEHostInfo(const Driver &D, const llvm::Triple &Triple); 00127 ~TCEHostInfo() {} 00128 00129 virtual ToolChain *CreateToolChain(const ArgList &Args, 00130 const char *ArchName) const; 00131 }; 00132 00133 TCEHostInfo::TCEHostInfo(const Driver &D, const llvm::Triple& Triple) 00134 : HostInfo(D, Triple) { 00135 } 00136 00137 ToolChain *TCEHostInfo::CreateToolChain(const ArgList &Args, 00138 const char *ArchName) const { 00139 llvm::Triple TCTriple(getTriple()); 00140 // TCTriple.setArchName(ArchName); 00141 return new toolchains::TCEToolChain(*this, TCTriple); 00142 } 00143 00144 00145 // Unknown Host Info 00146 00147 /// UnknownHostInfo - Generic host information to use for unknown hosts. 00148 class UnknownHostInfo : public HostInfo { 00149 /// Cache of tool chains we have created. 00150 mutable llvm::StringMap<ToolChain*> ToolChains; 00151 00152 public: 00153 UnknownHostInfo(const Driver &D, const llvm::Triple& Triple); 00154 ~UnknownHostInfo(); 00155 00156 virtual ToolChain *CreateToolChain(const ArgList &Args, 00157 const char *ArchName) const; 00158 }; 00159 00160 UnknownHostInfo::UnknownHostInfo(const Driver &D, const llvm::Triple& Triple) 00161 : HostInfo(D, Triple) { 00162 } 00163 00164 UnknownHostInfo::~UnknownHostInfo() { 00165 for (llvm::StringMap<ToolChain*>::iterator 00166 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00167 delete it->second; 00168 } 00169 00170 ToolChain *UnknownHostInfo::CreateToolChain(const ArgList &Args, 00171 const char *ArchName) const { 00172 assert(!ArchName && 00173 "Unexpected arch name on platform without driver support."); 00174 00175 // Automatically handle some instances of -m32/-m64 we know about. 00176 std::string Arch = getArchName(); 00177 ArchName = Arch.c_str(); 00178 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 00179 if (Triple.getArch() == llvm::Triple::x86 || 00180 Triple.getArch() == llvm::Triple::x86_64) { 00181 ArchName = 00182 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 00183 } else if (Triple.getArch() == llvm::Triple::ppc || 00184 Triple.getArch() == llvm::Triple::ppc64) { 00185 ArchName = 00186 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 00187 } 00188 } 00189 00190 ToolChain *&TC = ToolChains[ArchName]; 00191 if (!TC) { 00192 llvm::Triple TCTriple(getTriple()); 00193 TCTriple.setArchName(ArchName); 00194 00195 TC = new toolchains::Generic_GCC(*this, TCTriple); 00196 } 00197 00198 return TC; 00199 } 00200 00201 // OpenBSD Host Info 00202 00203 /// OpenBSDHostInfo - OpenBSD host information implementation. 00204 class OpenBSDHostInfo : public HostInfo { 00205 /// Cache of tool chains we have created. 00206 mutable llvm::StringMap<ToolChain*> ToolChains; 00207 00208 public: 00209 OpenBSDHostInfo(const Driver &D, const llvm::Triple& Triple) 00210 : HostInfo(D, Triple) {} 00211 ~OpenBSDHostInfo(); 00212 00213 virtual ToolChain *CreateToolChain(const ArgList &Args, 00214 const char *ArchName) const; 00215 }; 00216 00217 OpenBSDHostInfo::~OpenBSDHostInfo() { 00218 for (llvm::StringMap<ToolChain*>::iterator 00219 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00220 delete it->second; 00221 } 00222 00223 ToolChain *OpenBSDHostInfo::CreateToolChain(const ArgList &Args, 00224 const char *ArchName) const { 00225 assert(!ArchName && 00226 "Unexpected arch name on platform without driver driver support."); 00227 00228 std::string Arch = getArchName(); 00229 ArchName = Arch.c_str(); 00230 00231 ToolChain *&TC = ToolChains[ArchName]; 00232 if (!TC) { 00233 llvm::Triple TCTriple(getTriple()); 00234 TCTriple.setArchName(ArchName); 00235 00236 TC = new toolchains::OpenBSD(*this, TCTriple); 00237 } 00238 00239 return TC; 00240 } 00241 00242 // AuroraUX Host Info 00243 00244 /// AuroraUXHostInfo - AuroraUX host information implementation. 00245 class AuroraUXHostInfo : public HostInfo { 00246 /// Cache of tool chains we have created. 00247 mutable llvm::StringMap<ToolChain*> ToolChains; 00248 00249 public: 00250 AuroraUXHostInfo(const Driver &D, const llvm::Triple& Triple) 00251 : HostInfo(D, Triple) {} 00252 ~AuroraUXHostInfo(); 00253 00254 virtual ToolChain *CreateToolChain(const ArgList &Args, 00255 const char *ArchName) const; 00256 }; 00257 00258 AuroraUXHostInfo::~AuroraUXHostInfo() { 00259 for (llvm::StringMap<ToolChain*>::iterator 00260 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00261 delete it->second; 00262 } 00263 00264 ToolChain *AuroraUXHostInfo::CreateToolChain(const ArgList &Args, 00265 const char *ArchName) const { 00266 assert(!ArchName && 00267 "Unexpected arch name on platform without driver driver support."); 00268 00269 ToolChain *&TC = ToolChains[getArchName()]; 00270 00271 if (!TC) { 00272 llvm::Triple TCTriple(getTriple()); 00273 TCTriple.setArchName(getArchName()); 00274 00275 TC = new toolchains::AuroraUX(*this, TCTriple); 00276 } 00277 00278 return TC; 00279 } 00280 00281 // FreeBSD Host Info 00282 00283 /// FreeBSDHostInfo - FreeBSD host information implementation. 00284 class FreeBSDHostInfo : public HostInfo { 00285 /// Cache of tool chains we have created. 00286 mutable llvm::StringMap<ToolChain*> ToolChains; 00287 00288 public: 00289 FreeBSDHostInfo(const Driver &D, const llvm::Triple& Triple) 00290 : HostInfo(D, Triple) {} 00291 ~FreeBSDHostInfo(); 00292 00293 virtual ToolChain *CreateToolChain(const ArgList &Args, 00294 const char *ArchName) const; 00295 }; 00296 00297 FreeBSDHostInfo::~FreeBSDHostInfo() { 00298 for (llvm::StringMap<ToolChain*>::iterator 00299 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00300 delete it->second; 00301 } 00302 00303 ToolChain *FreeBSDHostInfo::CreateToolChain(const ArgList &Args, 00304 const char *ArchName) const { 00305 assert(!ArchName && 00306 "Unexpected arch name on platform without driver driver support."); 00307 00308 // Automatically handle some instances of -m32/-m64 we know about. 00309 std::string Arch = getArchName(); 00310 ArchName = Arch.c_str(); 00311 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 00312 if (Triple.getArch() == llvm::Triple::x86 || 00313 Triple.getArch() == llvm::Triple::x86_64) { 00314 ArchName = 00315 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 00316 } else if (Triple.getArch() == llvm::Triple::ppc || 00317 Triple.getArch() == llvm::Triple::ppc64) { 00318 ArchName = 00319 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 00320 } 00321 } 00322 00323 ToolChain *&TC = ToolChains[ArchName]; 00324 if (!TC) { 00325 llvm::Triple TCTriple(getTriple()); 00326 TCTriple.setArchName(ArchName); 00327 00328 TC = new toolchains::FreeBSD(*this, TCTriple); 00329 } 00330 00331 return TC; 00332 } 00333 00334 // NetBSD Host Info 00335 00336 /// NetBSDHostInfo - NetBSD host information implementation. 00337 class NetBSDHostInfo : public HostInfo { 00338 /// Cache of tool chains we have created. 00339 mutable llvm::StringMap<ToolChain*> ToolChains; 00340 00341 public: 00342 NetBSDHostInfo(const Driver &D, const llvm::Triple& Triple) 00343 : HostInfo(D, Triple) {} 00344 ~NetBSDHostInfo(); 00345 00346 virtual ToolChain *CreateToolChain(const ArgList &Args, 00347 const char *ArchName) const; 00348 }; 00349 00350 NetBSDHostInfo::~NetBSDHostInfo() { 00351 for (llvm::StringMap<ToolChain*>::iterator 00352 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00353 delete it->second; 00354 } 00355 00356 ToolChain *NetBSDHostInfo::CreateToolChain(const ArgList &Args, 00357 const char *ArchName) const { 00358 assert(!ArchName && 00359 "Unexpected arch name on platform without driver driver support."); 00360 00361 // Automatically handle some instances of -m32/-m64 we know about. 00362 std::string Arch = getArchName(); 00363 ArchName = Arch.c_str(); 00364 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 00365 if (Triple.getArch() == llvm::Triple::x86 || 00366 Triple.getArch() == llvm::Triple::x86_64) { 00367 ArchName = 00368 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 00369 } else if (Triple.getArch() == llvm::Triple::ppc || 00370 Triple.getArch() == llvm::Triple::ppc64) { 00371 ArchName = 00372 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 00373 } 00374 } 00375 llvm::Triple TargetTriple(getTriple()); 00376 TargetTriple.setArchName(ArchName); 00377 00378 ToolChain *TC; 00379 00380 // XXX Cache toolchain even if -m32 is used 00381 if (Arch == ArchName) { 00382 TC = ToolChains[ArchName]; 00383 if (TC) 00384 return TC; 00385 } 00386 00387 TC = new toolchains::NetBSD(*this, TargetTriple, getTriple()); 00388 00389 return TC; 00390 } 00391 00392 // Minix Host Info 00393 00394 /// MinixHostInfo - Minix host information implementation. 00395 class MinixHostInfo : public HostInfo { 00396 /// Cache of tool chains we have created. 00397 mutable llvm::StringMap<ToolChain*> ToolChains; 00398 00399 public: 00400 MinixHostInfo(const Driver &D, const llvm::Triple& Triple) 00401 : HostInfo(D, Triple) {} 00402 ~MinixHostInfo(); 00403 00404 virtual ToolChain *CreateToolChain(const ArgList &Args, 00405 const char *ArchName) const; 00406 }; 00407 00408 MinixHostInfo::~MinixHostInfo() { 00409 for (llvm::StringMap<ToolChain*>::iterator 00410 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it){ 00411 delete it->second; 00412 } 00413 } 00414 00415 ToolChain *MinixHostInfo::CreateToolChain(const ArgList &Args, 00416 const char *ArchName) const { 00417 assert(!ArchName && 00418 "Unexpected arch name on platform without driver driver support."); 00419 00420 std::string Arch = getArchName(); 00421 ArchName = Arch.c_str(); 00422 00423 ToolChain *&TC = ToolChains[ArchName]; 00424 if (!TC) { 00425 llvm::Triple TCTriple(getTriple()); 00426 TCTriple.setArchName(ArchName); 00427 00428 TC = new toolchains::Minix(*this, TCTriple); 00429 } 00430 00431 return TC; 00432 } 00433 00434 // DragonFly Host Info 00435 00436 /// DragonFlyHostInfo - DragonFly host information implementation. 00437 class DragonFlyHostInfo : public HostInfo { 00438 /// Cache of tool chains we have created. 00439 mutable llvm::StringMap<ToolChain*> ToolChains; 00440 00441 public: 00442 DragonFlyHostInfo(const Driver &D, const llvm::Triple& Triple) 00443 : HostInfo(D, Triple) {} 00444 ~DragonFlyHostInfo(); 00445 00446 virtual ToolChain *CreateToolChain(const ArgList &Args, 00447 const char *ArchName) const; 00448 }; 00449 00450 DragonFlyHostInfo::~DragonFlyHostInfo() { 00451 for (llvm::StringMap<ToolChain*>::iterator 00452 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00453 delete it->second; 00454 } 00455 00456 ToolChain *DragonFlyHostInfo::CreateToolChain(const ArgList &Args, 00457 const char *ArchName) const { 00458 assert(!ArchName && 00459 "Unexpected arch name on platform without driver driver support."); 00460 00461 ToolChain *&TC = ToolChains[getArchName()]; 00462 00463 if (!TC) { 00464 llvm::Triple TCTriple(getTriple()); 00465 TCTriple.setArchName(getArchName()); 00466 00467 TC = new toolchains::DragonFly(*this, TCTriple); 00468 } 00469 00470 return TC; 00471 } 00472 00473 // Linux Host Info 00474 00475 /// LinuxHostInfo - Linux host information implementation. 00476 class LinuxHostInfo : public HostInfo { 00477 /// Cache of tool chains we have created. 00478 mutable llvm::StringMap<ToolChain*> ToolChains; 00479 00480 public: 00481 LinuxHostInfo(const Driver &D, const llvm::Triple& Triple) 00482 : HostInfo(D, Triple) {} 00483 ~LinuxHostInfo(); 00484 00485 virtual ToolChain *CreateToolChain(const ArgList &Args, 00486 const char *ArchName) const; 00487 }; 00488 00489 LinuxHostInfo::~LinuxHostInfo() { 00490 for (llvm::StringMap<ToolChain*>::iterator 00491 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00492 delete it->second; 00493 } 00494 00495 ToolChain *LinuxHostInfo::CreateToolChain(const ArgList &Args, 00496 const char *ArchName) const { 00497 00498 assert(!ArchName && 00499 "Unexpected arch name on platform without driver driver support."); 00500 00501 // Automatically handle some instances of -m32/-m64 we know about. 00502 std::string Arch = getArchName(); 00503 ArchName = Arch.c_str(); 00504 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 00505 if (Triple.getArch() == llvm::Triple::x86 || 00506 Triple.getArch() == llvm::Triple::x86_64) { 00507 ArchName = 00508 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 00509 } else if (Triple.getArch() == llvm::Triple::ppc || 00510 Triple.getArch() == llvm::Triple::ppc64) { 00511 ArchName = 00512 (A->getOption().matches(options::OPT_m32)) ? "powerpc" : "powerpc64"; 00513 } 00514 } 00515 00516 ToolChain *&TC = ToolChains[ArchName]; 00517 00518 if (!TC && !Arch.compare ("hexagon")) { 00519 llvm::Triple TCTriple (getTriple()); 00520 TC = new toolchains::Hexagon_TC (*this, TCTriple); 00521 } 00522 00523 if (!TC) { 00524 llvm::Triple TCTriple(getTriple()); 00525 TCTriple.setArchName(ArchName); 00526 00527 TC = new toolchains::Linux(*this, TCTriple); 00528 } 00529 00530 return TC; 00531 } 00532 00533 // Windows Host Info 00534 00535 /// WindowsHostInfo - Host information to use on Microsoft Windows. 00536 class WindowsHostInfo : public HostInfo { 00537 /// Cache of tool chains we have created. 00538 mutable llvm::StringMap<ToolChain*> ToolChains; 00539 00540 public: 00541 WindowsHostInfo(const Driver &D, const llvm::Triple& Triple); 00542 ~WindowsHostInfo(); 00543 00544 virtual types::ID lookupTypeForExtension(const char *Ext) const { 00545 return types::lookupTypeForExtension(Ext); 00546 } 00547 00548 virtual ToolChain *CreateToolChain(const ArgList &Args, 00549 const char *ArchName) const; 00550 }; 00551 00552 WindowsHostInfo::WindowsHostInfo(const Driver &D, const llvm::Triple& Triple) 00553 : HostInfo(D, Triple) { 00554 } 00555 00556 WindowsHostInfo::~WindowsHostInfo() { 00557 for (llvm::StringMap<ToolChain*>::iterator 00558 it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it) 00559 delete it->second; 00560 } 00561 00562 ToolChain *WindowsHostInfo::CreateToolChain(const ArgList &Args, 00563 const char *ArchName) const { 00564 assert(!ArchName && 00565 "Unexpected arch name on platform without driver driver support."); 00566 00567 // Automatically handle some instances of -m32/-m64 we know about. 00568 std::string Arch = getArchName(); 00569 ArchName = Arch.c_str(); 00570 if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { 00571 if (Triple.getArch() == llvm::Triple::x86 || 00572 Triple.getArch() == llvm::Triple::x86_64) { 00573 ArchName = 00574 (A->getOption().matches(options::OPT_m32)) ? "i386" : "x86_64"; 00575 } 00576 } 00577 00578 ToolChain *&TC = ToolChains[ArchName]; 00579 if (!TC) { 00580 llvm::Triple TCTriple(getTriple()); 00581 TCTriple.setArchName(ArchName); 00582 00583 TC = new toolchains::Windows(*this, TCTriple); 00584 } 00585 00586 return TC; 00587 } 00588 00589 // FIXME: This is a placeholder. 00590 class MinGWHostInfo : public UnknownHostInfo { 00591 public: 00592 MinGWHostInfo(const Driver &D, const llvm::Triple& Triple); 00593 }; 00594 00595 MinGWHostInfo::MinGWHostInfo(const Driver &D, const llvm::Triple& Triple) 00596 : UnknownHostInfo(D, Triple) {} 00597 00598 } // end anon namespace 00599 00600 const HostInfo * 00601 clang::driver::createAuroraUXHostInfo(const Driver &D, 00602 const llvm::Triple& Triple){ 00603 return new AuroraUXHostInfo(D, Triple); 00604 } 00605 00606 const HostInfo * 00607 clang::driver::createDarwinHostInfo(const Driver &D, 00608 const llvm::Triple& Triple){ 00609 return new DarwinHostInfo(D, Triple); 00610 } 00611 00612 const HostInfo * 00613 clang::driver::createOpenBSDHostInfo(const Driver &D, 00614 const llvm::Triple& Triple) { 00615 return new OpenBSDHostInfo(D, Triple); 00616 } 00617 00618 const HostInfo * 00619 clang::driver::createFreeBSDHostInfo(const Driver &D, 00620 const llvm::Triple& Triple) { 00621 return new FreeBSDHostInfo(D, Triple); 00622 } 00623 00624 const HostInfo * 00625 clang::driver::createNetBSDHostInfo(const Driver &D, 00626 const llvm::Triple& Triple) { 00627 return new NetBSDHostInfo(D, Triple); 00628 } 00629 00630 const HostInfo * 00631 clang::driver::createMinixHostInfo(const Driver &D, 00632 const llvm::Triple& Triple) { 00633 return new MinixHostInfo(D, Triple); 00634 } 00635 00636 const HostInfo * 00637 clang::driver::createDragonFlyHostInfo(const Driver &D, 00638 const llvm::Triple& Triple) { 00639 return new DragonFlyHostInfo(D, Triple); 00640 } 00641 00642 const HostInfo * 00643 clang::driver::createLinuxHostInfo(const Driver &D, 00644 const llvm::Triple& Triple) { 00645 return new LinuxHostInfo(D, Triple); 00646 } 00647 00648 const HostInfo * 00649 clang::driver::createTCEHostInfo(const Driver &D, 00650 const llvm::Triple& Triple) { 00651 return new TCEHostInfo(D, Triple); 00652 } 00653 00654 const HostInfo * 00655 clang::driver::createWindowsHostInfo(const Driver &D, 00656 const llvm::Triple& Triple) { 00657 return new WindowsHostInfo(D, Triple); 00658 } 00659 00660 const HostInfo * 00661 clang::driver::createMinGWHostInfo(const Driver &D, 00662 const llvm::Triple& Triple) { 00663 return new MinGWHostInfo(D, Triple); 00664 } 00665 00666 const HostInfo * 00667 clang::driver::createUnknownHostInfo(const Driver &D, 00668 const llvm::Triple& Triple) { 00669 return new UnknownHostInfo(D, Triple); 00670 }