[PATCH] D157990: [clangd] Add --query-driver flag to clangd-indexer
Alex Cameron via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 15 08:43:04 PDT 2023
tetsuo-cpp created this revision.
tetsuo-cpp added reviewers: sammccall, nridge.
tetsuo-cpp added projects: clang-tools-extra, All.
Herald added subscribers: kadircet, arphaman.
tetsuo-cpp requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.
When using `clangd` for cross-compiled projects, it's necessary to use the `--query-driver` flag so that `clangd` can extract the compiler's built-in header paths. However, there's no such flag for `clangd-indexer` so we're unable to build a working static index for these projects.
This patch adds a `--query-driver` flag to `clangd-indexer` for this scenario.
I saw some tests under `clang-tools-extra/clangd/test/` but I think the cross-compilation case is a bit more complex to test. Let me know if you'd like me to look into this further.
Resolves: https://github.com/clangd/clangd/issues/1717
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D157990
Files:
clang-tools-extra/clangd/indexer/IndexerMain.cpp
Index: clang-tools-extra/clangd/indexer/IndexerMain.cpp
===================================================================
--- clang-tools-extra/clangd/indexer/IndexerMain.cpp
+++ clang-tools-extra/clangd/indexer/IndexerMain.cpp
@@ -38,6 +38,16 @@
"binary RIFF format")),
llvm::cl::init(IndexFileFormat::RIFF));
+static llvm::cl::list<std::string> QueryDriverGlobs{
+ "query-driver",
+ llvm::cl::desc(
+ "Comma separated list of globs for white-listing gcc-compatible "
+ "drivers that are safe to execute. Drivers matching any of these globs "
+ "will be used to extract system includes. e.g. "
+ "/usr/bin/**/clang-*,/path/to/repo/**/g++-*"),
+ llvm::cl::CommaSeparated,
+};
+
class IndexActionFactory : public tooling::FrontendActionFactory {
public:
IndexActionFactory(IndexFileIn &Result) : Result(Result) {}
@@ -144,12 +154,16 @@
// Collect symbols found in each translation unit, merging as we go.
clang::clangd::IndexFileIn Data;
+ auto Mangler = std::make_shared<clang::clangd::CommandMangler>(
+ clang::clangd::CommandMangler::detect());
+ Mangler->SystemIncludeExtractor = clang::clangd::getSystemIncludeExtractor(
+ static_cast<llvm::ArrayRef<std::string>>(
+ clang::clangd::QueryDriverGlobs));
auto Err = Executor->get()->execute(
std::make_unique<clang::clangd::IndexActionFactory>(Data),
clang::tooling::ArgumentsAdjuster(
- [Mangler = std::make_shared<clang::clangd::CommandMangler>(
- clang::clangd::CommandMangler::detect())](
- const std::vector<std::string> &Args, llvm::StringRef File) {
+ [Mangler = std::move(Mangler)](const std::vector<std::string> &Args,
+ llvm::StringRef File) {
clang::tooling::CompileCommand Cmd;
Cmd.CommandLine = Args;
Mangler->operator()(Cmd, File);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D157990.550346.patch
Type: text/x-patch
Size: 1965 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230815/11df964f/attachment.bin>
More information about the cfe-commits
mailing list