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