ToolChains.h revision 163b151809beef8f917fd16c546016e83ae3e361
183b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar//===--- ToolChains.h - ToolChain Implementations ---------------*- C++ -*-===// 283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar// 383b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar// The LLVM Compiler Infrastructure 483b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar// 583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar// This file is distributed under the University of Illinois Open Source 683b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar// License. See LICENSE.TXT for details. 783b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar// 883b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar//===----------------------------------------------------------------------===// 983b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 1083b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#ifndef CLANG_LIB_DRIVER_TOOLCHAINS_H_ 1183b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#define CLANG_LIB_DRIVER_TOOLCHAINS_H_ 1283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 13670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar#include "clang/Driver/Action.h" 1483b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#include "clang/Driver/ToolChain.h" 1583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 16670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar#include "llvm/ADT/DenseMap.h" 1783b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#include "llvm/Support/Compiler.h" 1883b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 19670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar#include "Tools.h" 20670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar 2183b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbarnamespace clang { 2283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbarnamespace driver { 23985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace toolchains { 2483b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 251d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// Generic_GCC - A tool chain using the 'gcc' command to perform 261d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// all subcommands; this relies on gcc translating the majority of 271d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// command line options. 2892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sandsclass LLVM_LIBRARY_VISIBILITY Generic_GCC : public ToolChain { 2975358d267256022475371416654b056ad8531cb3Daniel Dunbarprotected: 30670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar mutable llvm::DenseMap<unsigned, Tool*> Tools; 31670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar 3283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbarpublic: 33cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar Generic_GCC(const HostInfo &Host, const llvm::Triple& Triple); 343917608370583fa30c466b6c3893448229aea9adDaniel Dunbar ~Generic_GCC(); 3583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 36ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 37ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 38670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar 393917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual bool IsUnwindTablesDefault() const; 403917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual const char *GetDefaultRelocationModel() const; 413917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual const char *GetForcedPicModel() const; 4283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar}; 4383b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 441d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// Darwin - The base Darwin tool chain. 4592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sandsclass LLVM_LIBRARY_VISIBILITY Darwin : public ToolChain { 4625b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbarpublic: 4725b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbar /// The host version. 4825b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbar unsigned DarwinVersion[3]; 4925b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbar 5025b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbarprivate: 518eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar mutable llvm::DenseMap<unsigned, Tool*> Tools; 528eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 532603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar /// Whether the information on the target has been initialized. 542603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // 552603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // FIXME: This should be eliminated. What we want to do is make this part of 562603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // the "default target for arguments" selection process, once we get out of 572603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // the argument translation business. 582603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar mutable bool TargetInitialized; 592603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 60f85e193739c953358c865005855253af4f68a497John McCall // FIXME: Remove this once there is a proper way to detect an ARC runtime 61f85e193739c953358c865005855253af4f68a497John McCall // for the simulator. 62f85e193739c953358c865005855253af4f68a497John McCall public: 63f85e193739c953358c865005855253af4f68a497John McCall mutable enum { 64f85e193739c953358c865005855253af4f68a497John McCall ARCSimulator_None, 65f85e193739c953358c865005855253af4f68a497John McCall ARCSimulator_HasARCRuntime, 66f85e193739c953358c865005855253af4f68a497John McCall ARCSimulator_NoARCRuntime 67f85e193739c953358c865005855253af4f68a497John McCall } ARCRuntimeForSimulator; 68f85e193739c953358c865005855253af4f68a497John McCall 69163b151809beef8f917fd16c546016e83ae3e361Bob Wilson mutable enum { 70163b151809beef8f917fd16c546016e83ae3e361Bob Wilson LibCXXSimulator_None, 71163b151809beef8f917fd16c546016e83ae3e361Bob Wilson LibCXXSimulator_NotAvailable, 72163b151809beef8f917fd16c546016e83ae3e361Bob Wilson LibCXXSimulator_Available 73163b151809beef8f917fd16c546016e83ae3e361Bob Wilson } LibCXXForSimulator; 74163b151809beef8f917fd16c546016e83ae3e361Bob Wilson 75f85e193739c953358c865005855253af4f68a497John McCallprivate: 76fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner /// Whether we are targeting iPhoneOS target. 772603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar mutable bool TargetIsIPhoneOS; 78eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar 795f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar /// Whether we are targeting the iPhoneOS simulator target. 805f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar mutable bool TargetIsIPhoneOSSimulator; 815f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar 82fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner /// The OS version we are targeting. 832603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar mutable unsigned TargetVersion[3]; 842603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 8502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// The default macosx-version-min of this tool chain; empty until 8602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// initialized. 87816bc31ed45002de2547d6679b44f31eb85ec491Daniel Dunbar std::string MacosxVersionMin; 8802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 899f084a3166b684573ba49df28fc5792bc37d92e1John McCall bool hasARCRuntime() const; 909f084a3166b684573ba49df28fc5792bc37d92e1John McCall 91c0e665eb705762f95cd4f722ad7ecbdcde3f4527Daniel Dunbarprivate: 9260baf0f6d54376805168d49fa68628f801f95ef9Daniel Dunbar void AddDeploymentTarget(DerivedArgList &Args) const; 93c0e665eb705762f95cd4f722ad7ecbdcde3f4527Daniel Dunbar 948eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarpublic: 9525b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbar Darwin(const HostInfo &Host, const llvm::Triple& Triple); 96f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar ~Darwin(); 978eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 9861ab80a8b35e6fe9363e8ef1b3d27209b0e89349Chad Rosier std::string ComputeEffectiveClangTriple(const ArgList &Args, 9961ab80a8b35e6fe9363e8ef1b3d27209b0e89349Chad Rosier types::ID InputType) const; 10000577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 1016b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// @name Darwin Specific Toolchain API 1026b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// { 1036b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar 1042603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // FIXME: Eliminate these ...Target functions and derive separate tool chains 1052603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // for these targets and put version in constructor. 1065f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar void setTarget(bool IsIPhoneOS, unsigned Major, unsigned Minor, 1075f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar unsigned Micro, bool IsIOSSim) const { 1085f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar assert((!IsIOSSim || IsIPhoneOS) && "Unexpected deployment target!"); 1095f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar 1102603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // FIXME: For now, allow reinitialization as long as values don't 1112603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // change. This will go away when we move away from argument translation. 1125f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar if (TargetInitialized && TargetIsIPhoneOS == IsIPhoneOS && 1135f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar TargetIsIPhoneOSSimulator == IsIOSSim && 1142603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[0] == Major && TargetVersion[1] == Minor && 1152603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[2] == Micro) 1162603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar return; 1172603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 1182603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar assert(!TargetInitialized && "Target already initialized!"); 1192603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetInitialized = true; 1205f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar TargetIsIPhoneOS = IsIPhoneOS; 1215f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar TargetIsIPhoneOSSimulator = IsIOSSim; 1222603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[0] = Major; 1232603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[1] = Minor; 1242603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[2] = Micro; 1252603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar } 1262603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 1272603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar bool isTargetIPhoneOS() const { 1282603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar assert(TargetInitialized && "Target not initialized!"); 1292603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar return TargetIsIPhoneOS; 1302603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar } 1312603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 1324035580e3475db9013f335ce2b8a49dd1988a79aDaniel Dunbar bool isTargetIOSSimulator() const { 1335f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar assert(TargetInitialized && "Target not initialized!"); 1345f5c37b1234e6ebb6c17e084bc4e2cce92e31585Daniel Dunbar return TargetIsIPhoneOSSimulator; 1354035580e3475db9013f335ce2b8a49dd1988a79aDaniel Dunbar } 1364035580e3475db9013f335ce2b8a49dd1988a79aDaniel Dunbar 13703d87ee556f9e11ab83f6d2f80c9ee92e3667301Daniel Dunbar bool isTargetInitialized() const { return TargetInitialized; } 13803d87ee556f9e11ab83f6d2f80c9ee92e3667301Daniel Dunbar 1392603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar void getTargetVersion(unsigned (&Res)[3]) const { 1402603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar assert(TargetInitialized && "Target not initialized!"); 1412603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar Res[0] = TargetVersion[0]; 1422603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar Res[1] = TargetVersion[1]; 1432603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar Res[2] = TargetVersion[2]; 1442603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar } 1452603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 146eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar /// getDarwinArchName - Get the "Darwin" arch name for a particular compiler 147eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar /// invocation. For example, Darwin treats different ARM variations as 148eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar /// distinct architectures. 149686775deca8b8685eb90801495880e3abdd844c2Chris Lattner StringRef getDarwinArchName(const ArgList &Args) const; 150eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar 151ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar static bool isVersionLT(unsigned (&A)[3], unsigned (&B)[3]) { 152608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar for (unsigned i=0; i < 3; ++i) { 153608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar if (A[i] > B[i]) return false; 154608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar if (A[i] < B[i]) return true; 155608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar } 156608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar return false; 157608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar } 158608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar 159ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar bool isIPhoneOSVersionLT(unsigned V0, unsigned V1=0, unsigned V2=0) const { 160ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar assert(isTargetIPhoneOS() && "Unexpected call for OS X target!"); 161608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar unsigned B[3] = { V0, V1, V2 }; 162ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar return isVersionLT(TargetVersion, B); 163608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar } 164608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar 165ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar bool isMacosxVersionLT(unsigned V0, unsigned V1=0, unsigned V2=0) const { 166ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar assert(!isTargetIPhoneOS() && "Unexpected call for iPhoneOS target!"); 167cacb0f007001f7463d44ebd5dde7bfaecf876a71Daniel Dunbar unsigned B[3] = { V0, V1, V2 }; 168ce3fdf233353b10f20d74dceda3d77a82285de17Daniel Dunbar return isVersionLT(TargetVersion, B); 169cacb0f007001f7463d44ebd5dde7bfaecf876a71Daniel Dunbar } 170cacb0f007001f7463d44ebd5dde7bfaecf876a71Daniel Dunbar 1716b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// AddLinkSearchPathArgs - Add the linker search paths to \arg CmdArgs. 1726b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// 1736b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// \param Args - The input argument list. 1746b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// \param CmdArgs [out] - The command argument list to append the paths 1756b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// (prefixed by -L) to. 1761d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkSearchPathArgs(const ArgList &Args, 1771d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const = 0; 17802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 179f85e193739c953358c865005855253af4f68a497John McCall /// AddLinkARCArgs - Add the linker arguments to link the ARC runtime library. 180f85e193739c953358c865005855253af4f68a497John McCall virtual void AddLinkARCArgs(const ArgList &Args, 181f85e193739c953358c865005855253af4f68a497John McCall ArgStringList &CmdArgs) const = 0; 182f85e193739c953358c865005855253af4f68a497John McCall 1836cd4154b9088fa18ae05d11c0f3140fafd76c734Daniel Dunbar /// AddLinkRuntimeLibArgs - Add the linker arguments to link the compiler 1846cd4154b9088fa18ae05d11c0f3140fafd76c734Daniel Dunbar /// runtime library. 1851d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkRuntimeLibArgs(const ArgList &Args, 1861d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const = 0; 1873404fe7105ecc3baa58b7ea725773de4112259d6Eric Christopher 1886b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// } 1896b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// @name ToolChain Implementation 1906b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// { 1916b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar 1924180011fb8cef06adec04d30486b1bf3b99aa8b8Daniel Dunbar virtual types::ID LookupTypeForExtension(const char *Ext) const; 1934180011fb8cef06adec04d30486b1bf3b99aa8b8Daniel Dunbar 194b993f5d93b994b9b0aac6aebae669621744bbed7Daniel Dunbar virtual bool HasNativeLLVMSupport() const; 195b993f5d93b994b9b0aac6aebae669621744bbed7Daniel Dunbar 1969f084a3166b684573ba49df28fc5792bc37d92e1John McCall virtual void configureObjCRuntime(ObjCRuntime &runtime) const; 19713db5cfc4e5f03eb70efe0d227b53b8280f16161John McCall virtual bool hasBlocksRuntime() const; 198f85e193739c953358c865005855253af4f68a497John McCall 199279c1dbebf37cd128f3c73c70741a6b8c35ad025Daniel Dunbar virtual DerivedArgList *TranslateArgs(const DerivedArgList &Args, 2000dcb9a3705743ec972af37f48ead81a0939e3958Daniel Dunbar const char *BoundArch) const; 2018eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 202ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 203ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 2048eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 2059e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar virtual bool IsBlocksDefault() const { 206ef44a5d65c48b92802aac02126d36c03d818e847Daniel Dunbar // Always allow blocks on Darwin; users interested in versioning are 207ef44a5d65c48b92802aac02126d36c03d818e847Daniel Dunbar // expected to use /usr/include/Blocks.h. 208ef44a5d65c48b92802aac02126d36c03d818e847Daniel Dunbar return true; 2099e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar } 210eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar virtual bool IsIntegratedAssemblerDefault() const { 21171a6cbc5a101899f54e0a76aece82c01b48ad089Daniel Dunbar#ifdef DISABLE_DEFAULT_INTEGRATED_ASSEMBLER 21271a6cbc5a101899f54e0a76aece82c01b48ad089Daniel Dunbar return false; 21371a6cbc5a101899f54e0a76aece82c01b48ad089Daniel Dunbar#else 214eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar // Default integrated assembler to on for x86. 215eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar return (getTriple().getArch() == llvm::Triple::x86 || 216eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar getTriple().getArch() == llvm::Triple::x86_64); 21771a6cbc5a101899f54e0a76aece82c01b48ad089Daniel Dunbar#endif 218eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar } 219398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar virtual bool IsStrictAliasingDefault() const { 220398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar#ifdef DISABLE_DEFAULT_STRICT_ALIASING 221398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar return false; 222398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar#else 223398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar return ToolChain::IsStrictAliasingDefault(); 224398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar#endif 225398c610b16728b4398214367dd0effd9d2e61340Daniel Dunbar } 226c32647d111e516593b9ba242cad7b8ff4016c155Ted Kremenek 227c32647d111e516593b9ba242cad7b8ff4016c155Ted Kremenek virtual bool IsObjCDefaultSynthPropertiesDefault() const { 228e3685fd4c2546cfd450de6484ed4125adc1476c0Fariborz Jahanian return false; 229c32647d111e516593b9ba242cad7b8ff4016c155Ted Kremenek } 230c32647d111e516593b9ba242cad7b8ff4016c155Ted Kremenek 2319e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar virtual bool IsObjCNonFragileABIDefault() const { 232f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar // Non-fragile ABI is default for everything but i386. 233f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar return getTriple().getArch() != llvm::Triple::x86; 2349e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar } 235609508ce95732e7e7010f79c5207613eced7c9cbDaniel Dunbar virtual bool IsObjCLegacyDispatchDefault() const { 236609508ce95732e7e7010f79c5207613eced7c9cbDaniel Dunbar // This is only used with the non-fragile ABI. 237f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar 238f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar // Legacy dispatch is used everywhere except on x86_64. 239f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar return getTriple().getArch() != llvm::Triple::x86_64; 240609508ce95732e7e7010f79c5207613eced7c9cbDaniel Dunbar } 241f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar virtual bool UseObjCMixedDispatch() const { 242f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar // This is only used with the non-fragile ABI and non-legacy dispatch. 243f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar 244f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar // Mixed dispatch is used everywhere except OS X before 10.6. 245f645aaaf274c2f32c9ace457b9e69f041b565c17Daniel Dunbar return !(!isTargetIPhoneOS() && isMacosxVersionLT(10, 6)); 246f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar } 2478eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual bool IsUnwindTablesDefault() const; 2482fef11164cbe804f7b808c07757c6f900c08d765Nico Weber virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const { 2492fef11164cbe804f7b808c07757c6f900c08d765Nico Weber // Stack protectors default to on for user code on 10.5, 2502fef11164cbe804f7b808c07757c6f900c08d765Nico Weber // and for everything in 10.6 and beyond 2512fef11164cbe804f7b808c07757c6f900c08d765Nico Weber return !isTargetIPhoneOS() && 2522fef11164cbe804f7b808c07757c6f900c08d765Nico Weber (!isMacosxVersionLT(10, 6) || 2532fef11164cbe804f7b808c07757c6f900c08d765Nico Weber (!isMacosxVersionLT(10, 5) && !KernelOrKext)); 2549e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar } 2558eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetDefaultRelocationModel() const; 2568eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetForcedPicModel() const; 2576b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar 258bbe8e3eff56ac1d79f3668d706536e3cebe28c18Daniel Dunbar virtual bool SupportsProfiling() const; 259bbe8e3eff56ac1d79f3668d706536e3cebe28c18Daniel Dunbar 26043a9b3263cb0bcb050cc75c15b3e6a8951e6b97aDaniel Dunbar virtual bool SupportsObjCGC() const; 26143a9b3263cb0bcb050cc75c15b3e6a8951e6b97aDaniel Dunbar 262f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar virtual bool UseDwarfDebugFlags() const; 263f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar 264b2987d159a88ab0ee2e40c884eb4d77b42ab89b6Daniel Dunbar virtual bool UseSjLjExceptions() const; 265b2987d159a88ab0ee2e40c884eb4d77b42ab89b6Daniel Dunbar 2666b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// } 2678eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar}; 2688eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 2691d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// DarwinClang - The Darwin toolchain used by Clang. 27092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sandsclass LLVM_LIBRARY_VISIBILITY DarwinClang : public Darwin { 2718aa76ea4472349e081d046f7b21dc1e54014f335Bob Wilsonprivate: 2728aa76ea4472349e081d046f7b21dc1e54014f335Bob Wilson void AddGCCLibexecPath(unsigned darwinVersion); 2738aa76ea4472349e081d046f7b21dc1e54014f335Bob Wilson 2741d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbarpublic: 27525b58eb7998ed947bc1c07e70de0b5d8f6aff857Daniel Dunbar DarwinClang(const HostInfo &Host, const llvm::Triple& Triple); 2761d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2771d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// @name Darwin ToolChain Implementation 2781d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// { 2791d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2801d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkSearchPathArgs(const ArgList &Args, 2811d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const; 2821d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2831d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkRuntimeLibArgs(const ArgList &Args, 2841d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const; 2853404fe7105ecc3baa58b7ea725773de4112259d6Eric Christopher void AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, 2863404fe7105ecc3baa58b7ea725773de4112259d6Eric Christopher const char *DarwinStaticLib) const; 2873404fe7105ecc3baa58b7ea725773de4112259d6Eric Christopher 288132e35d2f87895d20e7ea146c8c00404b80221a1Daniel Dunbar virtual void AddCXXStdlibLibArgs(const ArgList &Args, 289132e35d2f87895d20e7ea146c8c00404b80221a1Daniel Dunbar ArgStringList &CmdArgs) const; 290efe91ea6bb6f45aaf663a43a1960998bc1eb9378Daniel Dunbar 2917433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen virtual void AddCCKextLibArgs(const ArgList &Args, 2927433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen ArgStringList &CmdArgs) const; 2937433fedce98a58341d0f30c2e12e8d53f3bba575Shantonu Sen 294f85e193739c953358c865005855253af4f68a497John McCall virtual void AddLinkARCArgs(const ArgList &Args, 295f85e193739c953358c865005855253af4f68a497John McCall ArgStringList &CmdArgs) const; 2961d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// } 2971d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar}; 2981d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2991d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// Darwin_Generic_GCC - Generic Darwin tool chain using gcc. 30092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sandsclass LLVM_LIBRARY_VISIBILITY Darwin_Generic_GCC : public Generic_GCC { 3018eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarpublic: 3021d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar Darwin_Generic_GCC(const HostInfo &Host, const llvm::Triple& Triple) 303cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar : Generic_GCC(Host, Triple) {} 3048eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 30561ab80a8b35e6fe9363e8ef1b3d27209b0e89349Chad Rosier std::string ComputeEffectiveClangTriple(const ArgList &Args, 30661ab80a8b35e6fe9363e8ef1b3d27209b0e89349Chad Rosier types::ID InputType) const; 30700577ada44c889fbe311d61c51a8da89e65c7c9aDaniel Dunbar 3088eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetDefaultRelocationModel() const { return "pic"; } 3098eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar}; 3108eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 311e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindolaclass LLVM_LIBRARY_VISIBILITY Generic_ELF : public Generic_GCC { 312e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola public: 313e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola Generic_ELF(const HostInfo &Host, const llvm::Triple& Triple) 314e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola : Generic_GCC(Host, Triple) {} 315e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola 316e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola virtual bool IsIntegratedAssemblerDefault() const { 317e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola // Default integrated assembler to on for x86. 318e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola return (getTriple().getArch() == llvm::Triple::x86 || 319e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola getTriple().getArch() == llvm::Triple::x86_64); 320e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola } 321e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola}; 322e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindola 32392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sandsclass LLVM_LIBRARY_VISIBILITY AuroraUX : public Generic_GCC { 324e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghanpublic: 325e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan AuroraUX(const HostInfo &Host, const llvm::Triple& Triple); 326e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 327ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 328ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 329e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan}; 330e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 331e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindolaclass LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { 332f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarpublic: 333f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar OpenBSD(const HostInfo &Host, const llvm::Triple& Triple); 334f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 335ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 336ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 337f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}; 338f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 339e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindolaclass LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF { 34075358d267256022475371416654b056ad8531cb3Daniel Dunbarpublic: 341214afe96b4210ca36d99621dd930225e6bf5b9b3Daniel Dunbar FreeBSD(const HostInfo &Host, const llvm::Triple& Triple); 34275358d267256022475371416654b056ad8531cb3Daniel Dunbar 343ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 344ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 34575358d267256022475371416654b056ad8531cb3Daniel Dunbar}; 34675358d267256022475371416654b056ad8531cb3Daniel Dunbar 3478e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramerclass LLVM_LIBRARY_VISIBILITY NetBSD : public Generic_ELF { 348182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 349182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 3508e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramerpublic: 351182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger NetBSD(const HostInfo &Host, const llvm::Triple& Triple, 352182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple& ToolTriple); 3538e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 354ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 355ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 3568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer}; 3578e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 35838e317d6dce161b249508686cc67eb7176958762Chris Lattnerclass LLVM_LIBRARY_VISIBILITY Minix : public Generic_GCC { 35938e317d6dce161b249508686cc67eb7176958762Chris Lattnerpublic: 36038e317d6dce161b249508686cc67eb7176958762Chris Lattner Minix(const HostInfo &Host, const llvm::Triple& Triple); 36138e317d6dce161b249508686cc67eb7176958762Chris Lattner 362ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 363ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 36438e317d6dce161b249508686cc67eb7176958762Chris Lattner}; 36538e317d6dce161b249508686cc67eb7176958762Chris Lattner 366e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindolaclass LLVM_LIBRARY_VISIBILITY DragonFly : public Generic_ELF { 36711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarpublic: 368cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar DragonFly(const HostInfo &Host, const llvm::Triple& Triple); 36911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 370ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 371ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 37211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar}; 37311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 374e43cfa1fdbf5b404a76e31f31b1505c7852a1967Rafael Espindolaclass LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF { 3756b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedmanpublic: 3766b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman Linux(const HostInfo &Host, const llvm::Triple& Triple); 377ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 378c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool HasNativeLLVMSupport() const; 379c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 380ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 381ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 382c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 383c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola std::string Linker; 384c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola std::vector<std::string> ExtraOpts; 3856b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman}; 3866b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman 3876b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman 3883a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner/// TCEToolChain - A tool chain using the llvm bitcode tools to perform 3893a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner/// all subcommands. See http://tce.cs.tut.fi for our peculiar target. 39092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sandsclass LLVM_LIBRARY_VISIBILITY TCEToolChain : public ToolChain { 3913a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattnerpublic: 3923a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple); 3933a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner ~TCEToolChain(); 3943a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner 395ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 396ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 3973a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner bool IsMathErrnoDefault() const; 3983a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner bool IsUnwindTablesDefault() const; 3993a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner const char* GetDefaultRelocationModel() const; 4003a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner const char* GetForcedPicModel() const; 4013a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner 4023a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattnerprivate: 4033a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner mutable llvm::DenseMap<unsigned, Tool*> Tools; 4043a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner 4053a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner}; 4063a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner 407ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencerclass LLVM_LIBRARY_VISIBILITY Windows : public ToolChain { 408ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer mutable llvm::DenseMap<unsigned, Tool*> Tools; 409ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 410ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencerpublic: 411ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Windows(const HostInfo &Host, const llvm::Triple& Triple); 412ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 413ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, 414ac0659ae4124156915eddf70e78065df224d34c8Daniel Dunbar const ActionList &Inputs) const; 415ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 416ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool IsIntegratedAssemblerDefault() const; 417ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool IsUnwindTablesDefault() const; 418ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual const char *GetDefaultRelocationModel() const; 419ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual const char *GetForcedPicModel() const; 420ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer}; 421ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 42283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace toolchains 42383b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace driver 42483b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace clang 42583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 42683b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#endif 427