summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling/Tooling.cpp
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2012-04-25 09:25:41 +0000
committerManuel Klimek <klimek@google.com>2012-04-25 09:25:41 +0000
commit3778a435d1cf6037fa12d634743ad61f4fd1ca17 (patch)
treeb1cc5bb361184272ad4089840494e4dfdc56913d /clang/lib/Tooling/Tooling.cpp
parent7786671b5a2715a3180586941419f41aeccd532c (diff)
downloadbcm5719-llvm-3778a435d1cf6037fa12d634743ad61f4fd1ca17.tar.gz
bcm5719-llvm-3778a435d1cf6037fa12d634743ad61f4fd1ca17.zip
Fixes the header search logic for tools:
The driver needs to get the correct path to the executable to deduce the header search path. llvm-svn: 155542
Diffstat (limited to 'clang/lib/Tooling/Tooling.cpp')
-rw-r--r--clang/lib/Tooling/Tooling.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp
index fa2374f5e30..646a22af877 100644
--- a/clang/lib/Tooling/Tooling.cpp
+++ b/clang/lib/Tooling/Tooling.cpp
@@ -29,6 +29,9 @@
namespace clang {
namespace tooling {
+// Exists solely for the purpose of lookup of the resource path.
+static int StaticSymbol;
+
FrontendActionFactory::~FrontendActionFactory() {}
// FIXME: This file contains structural duplication with other parts of the
@@ -39,9 +42,20 @@ FrontendActionFactory::~FrontendActionFactory() {}
static clang::driver::Driver *newDriver(clang::DiagnosticsEngine *Diagnostics,
const char *BinaryName) {
const std::string DefaultOutputName = "a.out";
+ // This just needs to be some symbol in the binary.
+ void *const SymbolAddr = &StaticSymbol;
+ // The driver detects the builtin header path based on the path of
+ // the executable.
+ // FIXME: On linux, GetMainExecutable is independent of the content
+ // of BinaryName, thus allowing ClangTool and runToolOnCode to just
+ // pass in made-up names here (in the case of ClangTool this being
+ // the original compiler invocation). Make sure this works on other
+ // platforms.
+ llvm::sys::Path MainExecutable =
+ llvm::sys::Path::GetMainExecutable(BinaryName, SymbolAddr);
clang::driver::Driver *CompilerDriver = new clang::driver::Driver(
- BinaryName, llvm::sys::getDefaultTargetTriple(),
- DefaultOutputName, false, *Diagnostics);
+ MainExecutable.str(), llvm::sys::getDefaultTargetTriple(),
+ DefaultOutputName, false, *Diagnostics);
CompilerDriver->setTitle("clang_based_tool");
return CompilerDriver;
}
@@ -171,9 +185,6 @@ bool ToolInvocation::run() {
Invocation.take(), *CC1Args, ToolAction.take());
}
-// Exists solely for the purpose of lookup of the resource path.
-static int StaticSymbol;
-
bool ToolInvocation::runInvocation(
const char *BinaryName,
clang::driver::Compilation *Compilation,
OpenPOWER on IntegriCloud