ToolChains.h revision f3cad36e59a41b5767fe662b5ac8911ee174b801
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 25670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar /// Generic_GCC - A tool chain using the 'gcc' command to perform 26670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar /// all subcommands; this relies on gcc translating the majority of 27670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar /// command line options. 28985b825eea7387be10478de0430815ed6a673326Daniel Dunbarclass VISIBILITY_HIDDEN Generic_GCC : public ToolChain { 29670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar mutable llvm::DenseMap<unsigned, Tool*> Tools; 30670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar 3183b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbarpublic: 3283b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar Generic_GCC(const HostInfo &Host, const char *Arch, const char *Platform, 33c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar const char *OS); 343917608370583fa30c466b6c3893448229aea9adDaniel Dunbar ~Generic_GCC(); 3583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 36f3cad36e59a41b5767fe662b5ac8911ee174b801Daniel Dunbar virtual DerivedArgList *TranslateArgs(InputArgList &Args) const; 3783b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 383917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 39670b7f4fe6720e91520ec5a993b33c00058ed77aDaniel Dunbar 403917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual bool IsMathErrnoDefault() const; 413917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual bool IsUnwindTablesDefault() const; 423917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual const char *GetDefaultRelocationModel() const; 433917608370583fa30c466b6c3893448229aea9adDaniel Dunbar virtual const char *GetForcedPicModel() const; 4483b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar}; 4583b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 468eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar /// Darwin_X86 - Darwin tool chain for i386 an x86_64. 478eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarclass VISIBILITY_HIDDEN Darwin_X86 : 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 53c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar /// GCC version to use. 54c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar unsigned GCCVersion[3]; 55c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar 56c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar /// The directory suffix for this tool chain. 57c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar std::string ToolChainDir; 58c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar 598eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarpublic: 608eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar Darwin_X86(const HostInfo &Host, const char *Arch, const char *Platform, 61c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar const char *OS, const unsigned (&DarwinVersion)[3], 62c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar const unsigned (&GCCVersion)[3]); 638eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar ~Darwin_X86(); 648eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 65f3cad36e59a41b5767fe662b5ac8911ee174b801Daniel Dunbar virtual DerivedArgList *TranslateArgs(InputArgList &Args) const; 668eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 678eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 688eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 698eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual bool IsMathErrnoDefault() const; 708eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual bool IsUnwindTablesDefault() const; 718eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetDefaultRelocationModel() const; 728eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetForcedPicModel() const; 73c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar 74c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbarprivate: 75c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar const std::string &getToolChainDir() const { return ToolChainDir; } 768eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar}; 778eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 788eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar /// Darwin_GCC - Generic Darwin tool chain using gcc. 798eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarclass VISIBILITY_HIDDEN Darwin_GCC : public Generic_GCC { 808eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbarpublic: 818eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar Darwin_GCC(const HostInfo &Host, const char *Arch, const char *Platform, 828eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar const char *OS) : Generic_GCC(Host, Arch, Platform, OS) {} 838eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 848eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar virtual const char *GetDefaultRelocationModel() const { return "pic"; } 858eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar}; 868eddb3fb6ff3dd20e3920380e1ce56df105b8a98Daniel Dunbar 8783b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace toolchains 8883b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace driver 8983b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar} // end namespace clang 9083b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar 9183b08eb6d2a7f71328db51baa79c654bb9dcc55dDaniel Dunbar#endif 92