ToolChains.h revision 2603137cb91e1d143b36fb71a72189884fbde5b5
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. 28985b825eea7387be10478de0430815ed6a673326Daniel Dunbarclass VISIBILITY_HIDDEN 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 360dcb9a3705743ec972af37f48ead81a0939e3958Daniel Dunbar virtual DerivedArgList *TranslateArgs(InputArgList &Args, 370dcb9a3705743ec972af37f48ead81a0939e3958Daniel Dunbar const char *BoundArch) const; 3883b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 393917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 40670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar 413917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual bool IsUnwindTablesDefault() const; 423917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual const char *GetDefaultRelocationModel() const; 433917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual const char *GetForcedPicModel() const; 4483b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar}; 4583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 461d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// Darwin - The base Darwin tool chain. 47f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbarclass VISIBILITY_HIDDEN Darwin : public ToolChain { 488eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar mutable llvm::DenseMap<unsigned, Tool*> Tools; 498eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 50c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar /// Darwin version of tool chain. 51c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar unsigned DarwinVersion[3]; 52c50b00dbd843cd929b5f220d4a8699852249f64cDaniel 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 602603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar /// Whether we are targetting iPhoneOS target. 612603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar mutable bool TargetIsIPhoneOS; 622603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 632603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar /// The OS version we are targetting. 642603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar mutable unsigned TargetVersion[3]; 652603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 661d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// Whether this is this an iPhoneOS toolchain. 671d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar // 681d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar // FIXME: This should go away, such differences should be completely 691d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar // determined by the target triple. 70816bc31ed45002de2547d6679b44f31eb85ec491Daniel Dunbar // 71816bc31ed45002de2547d6679b44f31eb85ec491Daniel Dunbar // FIXME: It is also broken, we need to distinguish the "default target" from 72816bc31ed45002de2547d6679b44f31eb85ec491Daniel Dunbar // the actual target. The -m...-version-min strings and deployment targets can 73816bc31ed45002de2547d6679b44f31eb85ec491Daniel Dunbar // change this. 741d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar bool IsIPhoneOS; 75c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar 7602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// The default macosx-version-min of this tool chain; empty until 7702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// initialized. 78816bc31ed45002de2547d6679b44f31eb85ec491Daniel Dunbar std::string MacosxVersionMin; 7902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 8030392de4681602f1aabc61b0184b1de53bc172f0Daniel Dunbar /// The default iphoneos-version-min of this tool chain. 8130392de4681602f1aabc61b0184b1de53bc172f0Daniel Dunbar std::string IPhoneOSVersionMin; 8230392de4681602f1aabc61b0184b1de53bc172f0Daniel Dunbar 838eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarpublic: 841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Darwin(const HostInfo &Host, const llvm::Triple& Triple, 851d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar const unsigned (&DarwinVersion)[3], bool IsIPhoneOS); 86f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar ~Darwin(); 878eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 886b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// @name Darwin Specific Toolchain API 896b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// { 906b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar 912603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // FIXME: Eliminate these ...Target functions and derive separate tool chains 922603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // for these targets and put version in constructor. 932603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar void setTarget(bool isIPhoneOS, unsigned Major, unsigned Minor, 942603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar unsigned Micro) const { 952603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // FIXME: For now, allow reinitialization as long as values don't 962603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar // change. This will go away when we move away from argument translation. 972603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar if (TargetInitialized && TargetIsIPhoneOS == isIPhoneOS && 982603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[0] == Major && TargetVersion[1] == Minor && 992603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[2] == Micro) 1002603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar return; 1012603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 1022603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar assert(!TargetInitialized && "Target already initialized!"); 1032603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetInitialized = true; 1042603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetIsIPhoneOS = isIPhoneOS; 1052603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[0] = Major; 1062603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[1] = Minor; 1072603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar TargetVersion[2] = Micro; 1082603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar } 1092603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 1102603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar bool isTargetIPhoneOS() const { 1112603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar assert(TargetInitialized && "Target not initialized!"); 1122603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar return TargetIsIPhoneOS; 1132603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar } 1142603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 1152603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar void getTargetVersion(unsigned (&Res)[3]) const { 1162603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar assert(TargetInitialized && "Target not initialized!"); 1172603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar Res[0] = TargetVersion[0]; 1182603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar Res[1] = TargetVersion[1]; 1192603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar Res[2] = TargetVersion[2]; 1202603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar } 1212603137cb91e1d143b36fb71a72189884fbde5b5Daniel Dunbar 12202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void getDarwinVersion(unsigned (&Res)[3]) const { 12302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Res[0] = DarwinVersion[0]; 12402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Res[1] = DarwinVersion[1]; 12502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Res[2] = DarwinVersion[2]; 12602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar } 12702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 12802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void getMacosxVersion(unsigned (&Res)[3]) const { 12902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Res[0] = 10; 13002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Res[1] = DarwinVersion[0] - 4; 13102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Res[2] = DarwinVersion[1]; 13202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar } 13302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 134eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar /// getDarwinArchName - Get the "Darwin" arch name for a particular compiler 135eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar /// invocation. For example, Darwin treats different ARM variations as 136eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar /// distinct architectures. 137eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar llvm::StringRef getDarwinArchName(const ArgList &Args) const; 138eeff406730f50afd973f005a8d501a19af4785e5Daniel Dunbar 13948d5aae4387f07aef99dbe03f4047d709e9f4d35Daniel Dunbar /// getMacosxVersionMin - Get the effective -mmacosx-version-min, which is 14048d5aae4387f07aef99dbe03f4047d709e9f4d35Daniel Dunbar /// either the -mmacosx-version-min, or the current version if unspecified. 14148d5aae4387f07aef99dbe03f4047d709e9f4d35Daniel Dunbar void getMacosxVersionMin(const ArgList &Args, unsigned (&Res)[3]) const; 14248d5aae4387f07aef99dbe03f4047d709e9f4d35Daniel Dunbar 143608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar static bool isMacosxVersionLT(unsigned (&A)[3], unsigned (&B)[3]) { 144608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar for (unsigned i=0; i < 3; ++i) { 145608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar if (A[i] > B[i]) return false; 146608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar if (A[i] < B[i]) return true; 147608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar } 148608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar return false; 149608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar } 150608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar 151608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar static bool isMacosxVersionLT(unsigned (&A)[3], 152608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar unsigned V0, unsigned V1=0, unsigned V2=0) { 153608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar unsigned B[3] = { V0, V1, V2 }; 154608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar return isMacosxVersionLT(A, B); 155608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar } 156608d04cb7bee2db28c8689f6626bf9e0b114c473Daniel Dunbar 1576b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// AddLinkSearchPathArgs - Add the linker search paths to \arg CmdArgs. 1586b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// 1596b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// \param Args - The input argument list. 1606b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// \param CmdArgs [out] - The command argument list to append the paths 1616b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// (prefixed by -L) to. 1621d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkSearchPathArgs(const ArgList &Args, 1631d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const = 0; 16402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 1656cd4154b9088fa18ae05d11c0f3140fafd76c734Daniel Dunbar /// AddLinkRuntimeLibArgs - Add the linker arguments to link the compiler 1666cd4154b9088fa18ae05d11c0f3140fafd76c734Daniel Dunbar /// runtime library. 1671d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkRuntimeLibArgs(const ArgList &Args, 1681d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const = 0; 1696cd4154b9088fa18ae05d11c0f3140fafd76c734Daniel Dunbar 1701d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar bool isIPhoneOS() const { return IsIPhoneOS; } 17130392de4681602f1aabc61b0184b1de53bc172f0Daniel Dunbar 1726b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// } 1736b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// @name ToolChain Implementation 1746b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// { 1756b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar 1760dcb9a3705743ec972af37f48ead81a0939e3958Daniel Dunbar virtual DerivedArgList *TranslateArgs(InputArgList &Args, 1770dcb9a3705743ec972af37f48ead81a0939e3958Daniel Dunbar const char *BoundArch) const; 1788eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 1798eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 1808eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 1819e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar virtual bool IsBlocksDefault() const { 1829e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar // Blocks default to on for 10.6 (darwin10) and beyond. 1839e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar return (DarwinVersion[0] > 9); 1849e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar } 1859e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar virtual bool IsObjCNonFragileABIDefault() const { 1869e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar // Non-fragile ABI default to on for 10.5 (darwin9) and beyond on x86-64. 1879e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar return (DarwinVersion[0] >= 9 && 1889e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar getTriple().getArch() == llvm::Triple::x86_64); 1899e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar } 1908eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual bool IsUnwindTablesDefault() const; 1919e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar virtual unsigned GetDefaultStackProtectorLevel() const { 1929e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar // Stack protectors default to on for 10.6 (darwin10) and beyond. 1939e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar return (DarwinVersion[0] > 9) ? 1 : 0; 1949e5cc6b703b2d0013f13800c2ffbeb3cf85fcfadDaniel Dunbar } 1958eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetDefaultRelocationModel() const; 1968eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetForcedPicModel() const; 1976b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar 198f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar virtual bool UseDwarfDebugFlags() const; 199f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar 2006b200b2b698b6ac9e310f2225c69c85d28ae4fb0Daniel Dunbar /// } 2018eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar}; 2028eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 2031d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// DarwinClang - The Darwin toolchain used by Clang. 2041d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbarclass VISIBILITY_HIDDEN DarwinClang : public Darwin { 2051d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbarpublic: 2061d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar DarwinClang(const HostInfo &Host, const llvm::Triple& Triple, 2071d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar const unsigned (&DarwinVersion)[3], bool IsIPhoneOS); 2081d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2091d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// @name Darwin ToolChain Implementation 2101d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// { 2111d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2121d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkSearchPathArgs(const ArgList &Args, 2131d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const; 2141d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2151d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkRuntimeLibArgs(const ArgList &Args, 2161d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const; 2171d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2181d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// } 2191d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar}; 2201d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2211d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// DarwinGCC - The Darwin toolchain used by GCC. 2221d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbarclass VISIBILITY_HIDDEN DarwinGCC : public Darwin { 2231d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// GCC version to use. 22455bac5339154cedc7541b5648f9c3486e547b45cTed Kremenek unsigned GCCVersion[3]; 2251d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2261d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// The directory suffix for this tool chain. 2271d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar std::string ToolChainDir; 2281d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2291d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbarpublic: 2301d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar DarwinGCC(const HostInfo &Host, const llvm::Triple& Triple, 23155bac5339154cedc7541b5648f9c3486e547b45cTed Kremenek const unsigned (&DarwinVersion)[3], const unsigned (&GCCVersion)[3], 2321d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar bool IsIPhoneOS); 2331d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2341d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// @name Darwin ToolChain Implementation 2351d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// { 2361d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2371d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkSearchPathArgs(const ArgList &Args, 2381d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const; 2391d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2401d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar virtual void AddLinkRuntimeLibArgs(const ArgList &Args, 2411d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar ArgStringList &CmdArgs) const; 2421d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2431d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar /// } 2441d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar}; 2451d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar 2461d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar/// Darwin_Generic_GCC - Generic Darwin tool chain using gcc. 2471d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbarclass VISIBILITY_HIDDEN Darwin_Generic_GCC : public Generic_GCC { 2488eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarpublic: 2491d4612b829500cbe04a2eafca74afac703e34934Daniel Dunbar Darwin_Generic_GCC(const HostInfo &Host, const llvm::Triple& Triple) 250cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar : Generic_GCC(Host, Triple) {} 2518eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 2528eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetDefaultRelocationModel() const { return "pic"; } 2538eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar}; 2548eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 255e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghanclass VISIBILITY_HIDDEN AuroraUX : public Generic_GCC { 256e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghanpublic: 257e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan AuroraUX(const HostInfo &Host, const llvm::Triple& Triple); 258e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 259e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 260e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan}; 261e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 262f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarclass VISIBILITY_HIDDEN OpenBSD : public Generic_GCC { 263f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarpublic: 264f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar OpenBSD(const HostInfo &Host, const llvm::Triple& Triple); 265f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 266f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 267f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}; 268f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 26975358d267256022475371416654b056ad8531cb3Daniel Dunbarclass VISIBILITY_HIDDEN FreeBSD : public Generic_GCC { 27075358d267256022475371416654b056ad8531cb3Daniel Dunbarpublic: 271cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar FreeBSD(const HostInfo &Host, const llvm::Triple& Triple, bool Lib32); 27275358d267256022475371416654b056ad8531cb3Daniel Dunbar 27375358d267256022475371416654b056ad8531cb3Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 27475358d267256022475371416654b056ad8531cb3Daniel Dunbar}; 27575358d267256022475371416654b056ad8531cb3Daniel Dunbar 27611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarclass VISIBILITY_HIDDEN DragonFly : public Generic_GCC { 27711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarpublic: 278cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar DragonFly(const HostInfo &Host, const llvm::Triple& Triple); 27911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 28011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 28111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar}; 28211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 2836b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedmanclass VISIBILITY_HIDDEN Linux : public Generic_GCC { 2846b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedmanpublic: 2856b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman Linux(const HostInfo &Host, const llvm::Triple& Triple); 2866b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman}; 2876b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman 2886b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman 28983b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace toolchains 29083b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace driver 29183b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace clang 29283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 29383b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#endif 294