diff options
author | Manuel Klimek <klimek@google.com> | 2012-04-25 09:25:41 +0000 |
---|---|---|
committer | Manuel Klimek <klimek@google.com> | 2012-04-25 09:25:41 +0000 |
commit | 3778a435d1cf6037fa12d634743ad61f4fd1ca17 (patch) | |
tree | b1cc5bb361184272ad4089840494e4dfdc56913d /clang/lib/Tooling/Tooling.cpp | |
parent | 7786671b5a2715a3180586941419f41aeccd532c (diff) | |
download | bcm5719-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.cpp | 21 |
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, |