diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 8cf8fe15122..a124eb16383 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -11,10 +11,10 @@ #include "clangdlocatorfilters.h" #include "clangdmemoryusagewidget.h" #include "clangdquickfixes.h" +#include "clangdsemantichighlighting.h" #include "clangdswitchdecldef.h" #include "clangtextmark.h" #include "clangutils.h" -#include "clangdsemantichighlighting.h" #include "tasktimers.h" #include @@ -40,9 +40,13 @@ #include #include #include +#include +#include +#include #include #include #include +#include #include #include #include @@ -66,6 +70,7 @@ #include #include +#include #include #include #include @@ -138,6 +143,23 @@ void setupClangdConfigFile() } } +std::optional clangdExecutableFromBuildDevice(Project *project) +{ + if (!project) + return std::nullopt; + + if (ProjectExplorer::Target *target = project->activeTarget()) { + if (ProjectExplorer::BuildConfiguration *bc = target->activeBuildConfiguration()) { + if (const ProjectExplorer::IDeviceConstPtr buildDevice = BuildDeviceKitAspect::device( + target->kit())) { + return buildDevice->clangdExecutable(); + } + } + } + + return std::nullopt; +} + static BaseClientInterface *clientInterface(Project *project, const Utils::FilePath &jsonDbDir) { using CppEditor::ClangdSettings; @@ -150,7 +172,9 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP const QString headerInsertionOption = QString("--header-insertion=") + (settings.autoIncludeHeaders() ? "iwyu" : "never"); const QString limitResults = QString("--limit-results=%1").arg(settings.completionResults()); - Utils::CommandLine cmd{settings.clangdFilePath(), + const Utils::FilePath clangdExePath = clangdExecutableFromBuildDevice(project).value_or( + settings.clangdFilePath()); + Utils::CommandLine cmd{clangdExePath, {indexingOption, headerInsertionOption, limitResults,