ToolChains.h revision ec069ed8a6647d84cc3a58d46d5b2a3c9f000704
1//===--- ToolChains.h - ToolChain Implementations ---------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef CLANG_LIB_DRIVER_TOOLCHAINS_H_ 11#define CLANG_LIB_DRIVER_TOOLCHAINS_H_ 12 13#include "clang/Driver/Action.h" 14#include "clang/Driver/ToolChain.h" 15 16#include "llvm/ADT/DenseMap.h" 17#include "llvm/Support/Compiler.h" 18 19#include "Tools.h" 20 21namespace clang { 22namespace driver { 23namespace toolchains { 24 25 /// Generic_GCC - A tool chain using the 'gcc' command to perform 26 /// all subcommands; this relies on gcc translating the majority of 27 /// command line options. 28class VISIBILITY_HIDDEN Generic_GCC : public ToolChain { 29 mutable llvm::DenseMap<unsigned, Tool*> Tools; 30 31public: 32 Generic_GCC(const HostInfo &Host, const char *Arch, const char *Platform, 33 const char *OS); 34 ~Generic_GCC(); 35 36 virtual DerivedArgList *TranslateArgs(InputArgList &Args) const; 37 38 virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 39 40 virtual bool IsMathErrnoDefault() const; 41 virtual bool IsUnwindTablesDefault() const; 42 virtual const char *GetDefaultRelocationModel() const; 43 virtual const char *GetForcedPicModel() const; 44}; 45 46 /// Darwin_X86 - Darwin tool chain for i386 an x86_64. 47class VISIBILITY_HIDDEN Darwin_X86 : public ToolChain { 48 mutable llvm::DenseMap<unsigned, Tool*> Tools; 49 50 /// Darwin version of tool chain. 51 unsigned DarwinVersion[3]; 52 53 /// GCC version to use. 54 unsigned GCCVersion[3]; 55 56 /// The directory suffix for this tool chain. 57 std::string ToolChainDir; 58 59 std::string getMacosxVersionMin() const; 60 61public: 62 Darwin_X86(const HostInfo &Host, const char *Arch, const char *Platform, 63 const char *OS, const unsigned (&DarwinVersion)[3], 64 const unsigned (&GCCVersion)[3]); 65 ~Darwin_X86(); 66 67 virtual DerivedArgList *TranslateArgs(InputArgList &Args) const; 68 69 virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; 70 71 virtual bool IsMathErrnoDefault() const; 72 virtual bool IsUnwindTablesDefault() const; 73 virtual const char *GetDefaultRelocationModel() const; 74 virtual const char *GetForcedPicModel() const; 75 76private: 77 const std::string &getToolChainDir() const { return ToolChainDir; } 78}; 79 80 /// Darwin_GCC - Generic Darwin tool chain using gcc. 81class VISIBILITY_HIDDEN Darwin_GCC : public Generic_GCC { 82public: 83 Darwin_GCC(const HostInfo &Host, const char *Arch, const char *Platform, 84 const char *OS) : Generic_GCC(Host, Arch, Platform, OS) {} 85 86 virtual const char *GetDefaultRelocationModel() const { return "pic"; } 87}; 88 89} // end namespace toolchains 90} // end namespace driver 91} // end namespace clang 92 93#endif 94