Work around relative --sysroot=

This commit is contained in:
Fangrui Song 2018-11-08 11:32:27 -08:00
parent ceeae84662
commit 3e39b86981
2 changed files with 16 additions and 1 deletions

View File

@ -257,7 +257,9 @@ void Initialize(MessageHandler *m, InitializeParam &param, ReplyOnce &reply) {
LOG_S(INFO) << "initializationOptions: " << output.GetString();
if (g_config->cacheDirectory.size()) {
g_config->cacheDirectory = NormalizePath(g_config->cacheDirectory);
SmallString<256> Path(g_config->cacheDirectory);
sys::fs::make_absolute(Path);
g_config->cacheDirectory = Path.str();
EnsureEndsInSlash(g_config->cacheDirectory);
}
}

View File

@ -3,6 +3,7 @@
#include "project.hh"
#include "clang_tu.hh" // llvm::vfs
#include "filesystem.hh"
#include "log.hh"
#include "match.hh"
@ -316,6 +317,7 @@ LoadEntriesFromDirectory(ProjectConfig *project,
std::vector<Project::Entry> result;
ProjectProcessor proc(project);
for (tooling::CompileCommand &Cmd : CDB->getAllCompileCommands()) {
static bool once;
Project::Entry entry;
entry.root = project->root;
DoPathMapping(entry.root);
@ -330,7 +332,18 @@ LoadEntriesFromDirectory(ProjectConfig *project,
DoPathMapping(arg);
entry.args.push_back(Intern(arg));
}
// Work around relative --sysroot= as it isn't affected by
// -working-directory=. chdir is thread hostile but this function runs
// before indexers do actual work and it works when there is only one
// workspace folder.
if (!once) {
once = true;
llvm::vfs::getRealFileSystem()->setCurrentWorkingDirectory(
entry.directory);
}
proc.Process(entry);
if (Seen.insert(entry.filename).second)
result.push_back(entry);
}