diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-03-20 00:20:03 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-20 00:20:03 +0000 |
| commit | 59e5e880f3f7fdb7d2af06f5025eaacbbdf96623 (patch) | |
| tree | 136e9a1384417d0e2eb928cccf525b934e23f0e3 /clang/lib | |
| parent | 6d6647c7b3d89f81f0b7ac2f5b277d92919d4c0e (diff) | |
| download | bcm5719-llvm-59e5e880f3f7fdb7d2af06f5025eaacbbdf96623.tar.gz bcm5719-llvm-59e5e880f3f7fdb7d2af06f5025eaacbbdf96623.zip | |
Driver: Move tool chain implementations into ToolChains.cpp.
llvm-svn: 67350
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 75 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.h | 56 |
2 files changed, 81 insertions, 50 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp new file mode 100644 index 00000000000..8e1c7d55626 --- /dev/null +++ b/clang/lib/Driver/ToolChains.cpp @@ -0,0 +1,75 @@ +//===--- ToolChains.cpp - ToolChain Implementations ---------------------*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "ToolChains.h" + +using namespace clang::driver; +using namespace clang::driver::toolchains; + +/// Generic_GCC - A tool chain using the 'gcc' command to perform +/// all subcommands; this relies on gcc translating the majority of +/// command line options. + +Generic_GCC::~Generic_GCC() { + // Free tool implementations. + for (llvm::DenseMap<unsigned, Tool*>::iterator + it = Tools.begin(), ie = Tools.end(); it != ie; ++it) + delete it->second; +} + +Tool &Generic_GCC::SelectTool(const Compilation &C, + const JobAction &JA) const { + Action::ActionClass Key; + if (ShouldUseClangCompiler(C, JA)) + Key = Action::AnalyzeJobClass; + else + Key = JA.getKind(); + + Tool *&T = Tools[Key]; + if (!T) { + switch (Key) { + default: + assert(0 && "Invalid tool kind."); + case Action::PreprocessJobClass: + T = new tools::gcc::Preprocess(*this); break; + case Action::PrecompileJobClass: + T = new tools::gcc::Precompile(*this); break; + case Action::AnalyzeJobClass: + T = new tools::Clang(*this); break; + case Action::CompileJobClass: + T = new tools::gcc::Compile(*this); break; + case Action::AssembleJobClass: + T = new tools::gcc::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::gcc::Link(*this); break; + } + } + + return *T; +} + +bool Generic_GCC::IsMathErrnoDefault() const { + return true; +} + +bool Generic_GCC::IsUnwindTablesDefault() const { + // FIXME: Gross; we should probably have some separate target definition, + // possibly even reusing the one in clang. + return getArchName() == "x86_64"; +} + +const char *Generic_GCC::GetDefaultRelocationModel() const { + return "static"; +} + +const char *Generic_GCC::GetForcedPicModel() const { + return 0; +} + + diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index b879c18c3f9..e3347cbd28c 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -31,60 +31,16 @@ class VISIBILITY_HIDDEN Generic_GCC : public ToolChain { public: Generic_GCC(const HostInfo &Host, const char *Arch, const char *Platform, const char *OS) : ToolChain(Host, Arch, Platform, OS) {} - ~Generic_GCC() { - // Free tool implementations. - for (llvm::DenseMap<unsigned, Tool*>::iterator - it = Tools.begin(), ie = Tools.end(); it != ie; ++it) - delete it->second; - } + ~Generic_GCC(); virtual ArgList *TranslateArgs(ArgList &Args) const { return &Args; } - virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const { - Action::ActionClass Key; - if (ShouldUseClangCompiler(C, JA)) - Key = Action::AnalyzeJobClass; - else - Key = JA.getKind(); + virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const; - Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - default: - assert(0 && "Invalid tool kind."); - case Action::PreprocessJobClass: - T = new tools::gcc::Preprocess(*this); break; - case Action::PrecompileJobClass: - T = new tools::gcc::Precompile(*this); break; - case Action::AnalyzeJobClass: - T = new tools::Clang(*this); break; - case Action::CompileJobClass: - T = new tools::gcc::Compile(*this); break; - case Action::AssembleJobClass: - T = new tools::gcc::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::gcc::Link(*this); break; - } - } - - return *T; - } - - virtual bool IsMathErrnoDefault() const { return true; } - - virtual bool IsUnwindTablesDefault() const { - // FIXME: Gross; we should probably have some separate target definition, - // possibly even reusing the one in clang. - return getArchName() == "x86_64"; - } - - virtual const char *GetDefaultRelocationModel() const { - return "static"; - } - - virtual const char *GetForcedPicModel() const { - return 0; - } + virtual bool IsMathErrnoDefault() const; + virtual bool IsUnwindTablesDefault() const; + virtual const char *GetDefaultRelocationModel() const; + virtual const char *GetForcedPicModel() const; }; } // end namespace toolchains |

