Work around relative --sysroot=

This commit is contained in:
Fangrui Song 2018-11-08 11:32:27 -08:00
parent 02a6f39559
commit 444f0db1f2
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(); LOG_S(INFO) << "initializationOptions: " << output.GetString();
if (g_config->cacheDirectory.size()) { 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); EnsureEndsInSlash(g_config->cacheDirectory);
} }
} }

View File

@ -3,6 +3,7 @@
#include "project.hh" #include "project.hh"
#include "clang_tu.hh" // llvm::vfs
#include "filesystem.hh" #include "filesystem.hh"
#include "log.hh" #include "log.hh"
#include "match.hh" #include "match.hh"
@ -316,6 +317,7 @@ LoadEntriesFromDirectory(ProjectConfig *project,
std::vector<Project::Entry> result; std::vector<Project::Entry> result;
ProjectProcessor proc(project); ProjectProcessor proc(project);
for (tooling::CompileCommand &Cmd : CDB->getAllCompileCommands()) { for (tooling::CompileCommand &Cmd : CDB->getAllCompileCommands()) {
static bool once;
Project::Entry entry; Project::Entry entry;
entry.root = project->root; entry.root = project->root;
DoPathMapping(entry.root); DoPathMapping(entry.root);
@ -330,7 +332,18 @@ LoadEntriesFromDirectory(ProjectConfig *project,
DoPathMapping(arg); DoPathMapping(arg);
entry.args.push_back(Intern(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); proc.Process(entry);
if (Seen.insert(entry.filename).second) if (Seen.insert(entry.filename).second)
result.push_back(entry); result.push_back(entry);
} }