summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChain.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-03-18 20:48:54 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-03-18 20:48:54 +0000
commit260e28d65a702a304bd8d19eee123e0467b561ca (patch)
treee48ca29520978900717357ad946cfa0131545e7b /clang/lib/Driver/ToolChain.cpp
parent6457ad233504a2af01fd859f363539180e9c73c5 (diff)
downloadbcm5719-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.cpp24
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);
OpenPOWER on IntegriCloud