diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-18 20:48:54 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-18 20:48:54 +0000 |
commit | 260e28d65a702a304bd8d19eee123e0467b561ca (patch) | |
tree | e48ca29520978900717357ad946cfa0131545e7b /clang/lib/Driver/ToolChain.cpp | |
parent | 6457ad233504a2af01fd859f363539180e9c73c5 (diff) | |
download | bcm5719-llvm-260e28d65a702a304bd8d19eee123e0467b561ca.tar.gz bcm5719-llvm-260e28d65a702a304bd8d19eee123e0467b561ca.zip |
Centralize the recording of which tools have been constructed.
llvm-svn: 177319
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 83c16462e26..e5ddfd10d51 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "Tools.h" #include "clang/Driver/ToolChain.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Driver/Action.h" @@ -27,6 +28,10 @@ ToolChain::ToolChain(const Driver &D, const llvm::Triple &T, } ToolChain::~ToolChain() { + // Free tool implementations. + for (llvm::DenseMap<unsigned, Tool*>::iterator + it = Tools.begin(), ie = Tools.end(); it != ie; ++it) + delete it->second; } const Driver &ToolChain::getDriver() const { @@ -58,6 +63,25 @@ bool ToolChain::IsUnwindTablesDefault() const { return false; } +Tool &ToolChain::SelectTool(const JobAction &JA) const { + Action::ActionClass Key; + if (getDriver().ShouldUseClangCompiler(JA)) + Key = Action::AnalyzeJobClass; + else + Key = JA.getKind(); + + Tool *&T = Tools[Key]; + if (T) + return *T; + + if (getDriver().ShouldUseClangCompiler(JA)) + T = new tools::Clang(*this); + else + T = constructTool(Key); + + return *T; +} + std::string ToolChain::GetFilePath(const char *Name) const { return D.GetFilePath(Name, *this); |