ToolChain.cpp revision 9d609f2b0dd604879f8b284ded1f14ba300e8070
13fdcc6fb12d7cf38d2a3111736f80f0dd55447b4Nick Lewycky//===--- ToolChain.cpp - Collections of tools for one platform ------------===// 22ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar// 32ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar// The LLVM Compiler Infrastructure 42ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar// 52ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar// This file is distributed under the University of Illinois Open Source 62ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar// License. See LICENSE.TXT for details. 72ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar// 82ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar//===----------------------------------------------------------------------===// 92ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 102ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar#include "clang/Driver/ToolChain.h" 112ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 122ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar#include "clang/Driver/Action.h" 1300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar#include "clang/Driver/Arg.h" 1400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar#include "clang/Driver/ArgList.h" 152ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar#include "clang/Driver/Driver.h" 1600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar#include "clang/Driver/DriverDiagnostic.h" 17fa0cda430f7324404ddd74f41a3b8f5f749d7ec1Daniel Dunbar#include "clang/Driver/HostInfo.h" 1800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar#include "clang/Driver/Options.h" 192ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 202ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbarusing namespace clang::driver; 212ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 22cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel DunbarToolChain::ToolChain(const HostInfo &_Host, const llvm::Triple &_Triple) 23cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar : Host(_Host), Triple(_Triple) { 242ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar} 252ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 262ba38ba9a18b8ec88e2509fad622eeec01562769Daniel DunbarToolChain::~ToolChain() { 272ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar} 282ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 29ee788e70fcd0adf76103b17c78ac658d4ea30c9bDaniel Dunbarconst Driver &ToolChain::getDriver() const { 30ee788e70fcd0adf76103b17c78ac658d4ea30c9bDaniel Dunbar return Host.getDriver(); 31ee788e70fcd0adf76103b17c78ac658d4ea30c9bDaniel Dunbar} 32ee788e70fcd0adf76103b17c78ac658d4ea30c9bDaniel Dunbar 334a7e88978cf646ad10d654020cb00b3877069210Daniel Dunbarstd::string ToolChain::GetFilePath(const char *Name) const { 3421549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar return Host.getDriver().GetFilePath(Name, *this); 351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 362ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar} 372ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar 384a7e88978cf646ad10d654020cb00b3877069210Daniel Dunbarstd::string ToolChain::GetProgramPath(const char *Name, bool WantFile) const { 39950bedd8a9f00caabd2f1fc6812d70e08103f847Mike Stump return Host.getDriver().GetProgramPath(Name, *this, WantFile); 402ba38ba9a18b8ec88e2509fad622eeec01562769Daniel Dunbar} 414180011fb8cef06adec04d30486b1bf3b99aa8b8Daniel Dunbar 424180011fb8cef06adec04d30486b1bf3b99aa8b8Daniel Dunbartypes::ID ToolChain::LookupTypeForExtension(const char *Ext) const { 434180011fb8cef06adec04d30486b1bf3b99aa8b8Daniel Dunbar return types::lookupTypeForExtension(Ext); 444180011fb8cef06adec04d30486b1bf3b99aa8b8Daniel Dunbar} 4500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 46b993f5d93b994b9b0aac6aebae669621744bbed7Daniel Dunbarbool ToolChain::HasNativeLLVMSupport() const { 47b993f5d93b994b9b0aac6aebae669621744bbed7Daniel Dunbar return false; 48b993f5d93b994b9b0aac6aebae669621744bbed7Daniel Dunbar} 49b993f5d93b994b9b0aac6aebae669621744bbed7Daniel Dunbar 50fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner/// getARMTargetCPU - Get the (LLVM) name of the ARM cpu we are targeting. 5100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar// 5200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar// FIXME: tblgen this. 5300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbarstatic const char *getARMTargetCPU(const ArgList &Args, 5400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar const llvm::Triple &Triple) { 5500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // FIXME: Warn on inconsistent use of -mcpu and -march. 5600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 5700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // If we have -mcpu=, use that. 5800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) 5900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return A->getValue(Args); 6000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 6100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar llvm::StringRef MArch; 6200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (Arg *A = Args.getLastArg(options::OPT_march_EQ)) { 6300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // Otherwise, if we have -march= choose the base CPU for that arch. 6400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar MArch = A->getValue(Args); 6500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar } else { 6600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // Otherwise, use the Arch from the triple. 6700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar MArch = Triple.getArchName(); 6800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar } 6900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 7000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv2" || MArch == "armv2a") 7100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm2"; 7200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv3") 7300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm6"; 7400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv3m") 7500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm7m"; 7600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv4" || MArch == "armv4t") 7700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm7tdmi"; 7800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv5" || MArch == "armv5t") 7900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm10tdmi"; 8000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv5e" || MArch == "armv5te") 8100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm1026ejs"; 8200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv5tej") 8300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm926ej-s"; 8400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv6" || MArch == "armv6k") 8500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm1136jf-s"; 8600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv6j") 8700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm1136j-s"; 8800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv6z" || MArch == "armv6zk") 8900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm1176jzf-s"; 9000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv6t2") 9100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm1156t2-s"; 9200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv7" || MArch == "armv7a" || MArch == "armv7-a") 9300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "cortex-a8"; 9400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv7r" || MArch == "armv7-r") 9500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "cortex-r4"; 9600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "armv7m" || MArch == "armv7-m") 9700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "cortex-m3"; 9800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "ep9312") 9900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "ep9312"; 10000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "iwmmxt") 10100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "iwmmxt"; 10200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (MArch == "xscale") 10300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "xscale"; 1041ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson if (MArch == "armv6m" || MArch == "armv6-m") 1051ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson return "cortex-m0"; 10600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 10700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // If all else failed, return the most base CPU LLVM supports. 10800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "arm7tdmi"; 10900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar} 11000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 11100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar/// getLLVMArchSuffixForARM - Get the LLVM arch name to use for a particular 11200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar/// CPU. 11300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar// 11400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar// FIXME: This is redundant with -mcpu, why does LLVM use this. 11500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar// FIXME: tblgen this, or kill it! 11600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbarstatic const char *getLLVMArchSuffixForARM(llvm::StringRef CPU) { 11700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (CPU == "arm7tdmi" || CPU == "arm7tdmi-s" || CPU == "arm710t" || 11800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "arm720t" || CPU == "arm9" || CPU == "arm9tdmi" || 11900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "arm920" || CPU == "arm920t" || CPU == "arm922t" || 12000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "arm940t" || CPU == "ep9312") 12100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "v4t"; 12200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 12300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (CPU == "arm10tdmi" || CPU == "arm1020t") 12400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "v5"; 12500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 12600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (CPU == "arm9e" || CPU == "arm926ej-s" || CPU == "arm946e-s" || 12700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "arm966e-s" || CPU == "arm968e-s" || CPU == "arm10e" || 12800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "arm1020e" || CPU == "arm1022e" || CPU == "xscale" || 12900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "iwmmxt") 13000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "v5e"; 13100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 13200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (CPU == "arm1136j-s" || CPU == "arm1136jf-s" || CPU == "arm1176jz-s" || 13300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar CPU == "arm1176jzf-s" || CPU == "mpcorenovfp" || CPU == "mpcore") 13400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "v6"; 13500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 13600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (CPU == "arm1156t2-s" || CPU == "arm1156t2f-s") 13700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "v6t2"; 13800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 13900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (CPU == "cortex-a8" || CPU == "cortex-a9") 14000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return "v7"; 14100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 1421ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson if (CPU == "cortex-m3") 1431ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson return "v7m"; 1441ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson 1451ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson if (CPU == "cortex-m0") 1461ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson return "v6m"; 1471ec0ade3bb7d1468c3dfa6ba7ce7a48b2b95d9d3Bob Wilson 14800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return ""; 14900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar} 15000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 15100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbarstd::string ToolChain::ComputeLLVMTriple(const ArgList &Args) const { 15200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar switch (getTriple().getArch()) { 15300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar default: 15400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return getTripleString(); 15500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 15600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar case llvm::Triple::arm: 15700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar case llvm::Triple::thumb: { 15800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // FIXME: Factor into subclasses. 15900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar llvm::Triple Triple = getTriple(); 16000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 16100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // Thumb2 is the default for V7 on Darwin. 16200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // 16300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar // FIXME: Thumb should just be another -target-feaure, not in the triple. 16400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar llvm::StringRef Suffix = 16500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar getLLVMArchSuffixForARM(getARMTargetCPU(Args, Triple)); 16600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar bool ThumbDefault = 16700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar (Suffix == "v7" && getTriple().getOS() == llvm::Triple::Darwin); 16800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar std::string ArchName = "arm"; 16900577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (Args.hasFlag(options::OPT_mthumb, options::OPT_mno_thumb, ThumbDefault)) 17000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar ArchName = "thumb"; 17100577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar Triple.setArchName(ArchName + Suffix.str()); 17200577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 17300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return Triple.getTriple(); 17400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar } 17500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar } 17600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar} 17700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 17800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbarstd::string ToolChain::ComputeEffectiveClangTriple(const ArgList &Args) const { 1799d609f2b0dd604879f8b284ded1f14ba300e8070Daniel Dunbar // Diagnose use of Darwin OS deployment target arguments on non-Darwin. 18000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar if (Arg *A = Args.getLastArg(options::OPT_mmacosx_version_min_EQ, 1819d609f2b0dd604879f8b284ded1f14ba300e8070Daniel Dunbar options::OPT_miphoneos_version_min_EQ, 1829d609f2b0dd604879f8b284ded1f14ba300e8070Daniel Dunbar options::OPT_mios_simulator_version_min_EQ)) 18300577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar getDriver().Diag(clang::diag::err_drv_clang_unsupported) 18400577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar << A->getAsString(Args); 18500577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 18600577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar return ComputeLLVMTriple(Args); 18700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar} 18800577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 189641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel DunbarToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{ 1903f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) { 1913f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar llvm::StringRef Value = A->getValue(Args); 1923f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar if (Value == "libc++") 1933f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar return ToolChain::CST_Libcxx; 1943f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar if (Value == "libstdc++") 1953f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar return ToolChain::CST_Libstdcxx; 1963f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar getDriver().Diag(clang::diag::err_drv_invalid_stdlib_name) 1973f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar << A->getAsString(Args); 1983f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar } 1993f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar 200641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar return ToolChain::CST_Libstdcxx; 201641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar} 202641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar 203641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbarvoid ToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &Args, 204641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar ArgStringList &CmdArgs) const { 205641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar CXXStdlibType Type = GetCXXStdlibType(Args); 206641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar 207641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar switch (Type) { 2083f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar case ToolChain::CST_Libcxx: 2090bb208c91e91e2fe91e0f487b00ff4b5b30c8cc2Joerg Sonnenberger CmdArgs.push_back("-nostdinc++"); 2100bb208c91e91e2fe91e0f487b00ff4b5b30c8cc2Joerg Sonnenberger CmdArgs.push_back("-cxx-isystem"); 2113f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar CmdArgs.push_back("/usr/include/c++/v1"); 2123f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar break; 2133f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar 214641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar case ToolChain::CST_Libstdcxx: 215641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar // Currently handled by the mass of goop in InitHeaderSearch. 216641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar break; 217641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar } 218641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar} 219641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar 220132e35d2f87895d20e7ea146c8c00404b80221a1Daniel Dunbarvoid ToolChain::AddCXXStdlibLibArgs(const ArgList &Args, 221132e35d2f87895d20e7ea146c8c00404b80221a1Daniel Dunbar ArgStringList &CmdArgs) const { 222641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar CXXStdlibType Type = GetCXXStdlibType(Args); 223641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar 224641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar switch (Type) { 2253f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar case ToolChain::CST_Libcxx: 2263f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar CmdArgs.push_back("-lc++"); 2273f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar break; 2283f16c959e30b7e7ba8e4b8d597c313fbe457206dDaniel Dunbar 229641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar case ToolChain::CST_Libstdcxx: 230641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar CmdArgs.push_back("-lstdc++"); 231641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar break; 232641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar } 233641b98b7b52e0067beaf3978f2a8721e5d16c111Daniel Dunbar} 2347433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen 2357433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Senvoid ToolChain::AddCCKextLibArgs(const ArgList &Args, 2367433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen ArgStringList &CmdArgs) const { 2377433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen CmdArgs.push_back("-lcc_kext"); 2387433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen} 239