aboutsummaryrefslogtreecommitdiff
path: root/lib/Driver/ToolChain.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-16 05:25:36 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-16 05:25:36 +0000
commit2ba38ba9a18b8ec88e2509fad622eeec01562769 (patch)
tree203af0486f9379b954257556f576bc49dd6dd795 /lib/Driver/ToolChain.cpp
parenta1ead48a4e9961c7eb22592310c7e9c30cb56794 (diff)
Driver: Sketch Tool and ToolChain classes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67036 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/ToolChain.cpp')
-rw-r--r--lib/Driver/ToolChain.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp
new file mode 100644
index 0000000000..ff4e97b1d4
--- /dev/null
+++ b/lib/Driver/ToolChain.cpp
@@ -0,0 +1,62 @@
+//===--- ToolChain.cpp - Collections of tools for one platform ----------*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Driver/ToolChain.h"
+
+#include "clang/Driver/Action.h"
+#include "clang/Driver/Driver.h"
+
+using namespace clang::driver;
+
+ToolChain::ToolChain(Driver &_TheDriver, const char *_Arch,
+ const char *_Platform, const char *_OS)
+ : TheDriver(_TheDriver), Arch(_Arch), Platform(_Platform), OS(_OS) {
+}
+
+ToolChain::~ToolChain() {
+}
+
+llvm::sys::Path ToolChain::GetFilePath(const Compilation &C,
+ const char *Name) const {
+ return TheDriver.GetFilePath(Name, this);
+
+}
+
+llvm::sys::Path ToolChain::GetProgramPath(const Compilation &C,
+ const char *Name) const {
+ return TheDriver.GetProgramPath(Name, this);
+}
+
+bool ToolChain::ShouldUseClangCompiler(const Compilation &C,
+ const JobAction &JA) const {
+ // Check if user requested no clang, or clang doesn't understand
+ // this type (we only handle single inputs for now).
+ if (TheDriver.CCCNoClang || JA.size() != 1 ||
+ !types::isAcceptedByClang((*JA.begin())->getType()))
+ return false;
+
+ // Otherwise make sure this is an action clang undertands.
+ if (isa<PreprocessJobAction>(JA)) {
+ if (TheDriver.CCCNoClangCPP)
+ return false;
+ } else if (!isa<PrecompileJobAction>(JA) && !isa<CompileJobAction>(JA))
+ return false;
+
+ // Avoid CXX if the user requested.
+ if (TheDriver.CCCNoClangCXX && types::isCXX((*JA.begin())->getType()))
+ return false;
+
+ // Finally, don't use clang if this isn't one of the user specified
+ // archs to build.
+ if (!TheDriver.CCCClangArchs.empty() &&
+ TheDriver.CCCClangArchs.count(getArchName()))
+ return false;
+
+ return true;
+}