diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp --- a/clang-tools-extra/clangd/ClangdLSPServer.cpp +++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp @@ -619,9 +619,10 @@ llvm::json::Object Result{ {{"serverInfo", - llvm::json::Object{{"name", "clangd"}, - {"version", llvm::formatv("{0} {1}", versionString(), - featureString())}}}, + llvm::json::Object{ + {"name", "clangd"}, + {"version", llvm::formatv("{0} {1} {2}", versionString(), + featureString(), platformString())}}}, {"capabilities", std::move(ServerCaps)}}}; if (Opts.Encoding) Result["offsetEncoding"] = *Opts.Encoding; diff --git a/clang-tools-extra/clangd/Features.h b/clang-tools-extra/clangd/Features.h --- a/clang-tools-extra/clangd/Features.h +++ b/clang-tools-extra/clangd/Features.h @@ -19,6 +19,10 @@ // Returns a version string for clangd, e.g. "clangd 10.0.0" std::string versionString(); +// Returns the platform triple for clangd, e.g. "x86_64-pc-linux-gnu" +// May include both the host and target triple if they differ. +std::string platformString(); + // Returns a string describing the compile-time configuration. // e.g. mac+debug+asan+grpc std::string featureString(); diff --git a/clang-tools-extra/clangd/Features.cpp b/clang-tools-extra/clangd/Features.cpp --- a/clang-tools-extra/clangd/Features.cpp +++ b/clang-tools-extra/clangd/Features.cpp @@ -9,12 +9,26 @@ #include "Features.h" #include "clang/Basic/Version.h" #include "llvm/Support/Compiler.h" +#include "llvm/Support/Host.h" namespace clang { namespace clangd { std::string versionString() { return clang::getClangToolFullVersion("clangd"); } +std::string platformString() { + static std::string PlatformString = []() { + std::string Host = llvm::sys::getProcessTriple(); + std::string Target = llvm::sys::getDefaultTargetTriple(); + if (Host != Target) { + Host += "; target="; + Host += Target; + } + return Host; + }(); + return PlatformString; +} + std::string featureString() { return #if defined(_WIN32) diff --git a/clang-tools-extra/clangd/index/remote/Client.cpp b/clang-tools-extra/clangd/index/remote/Client.cpp --- a/clang-tools-extra/clangd/index/remote/Client.cpp +++ b/clang-tools-extra/clangd/index/remote/Client.cpp @@ -74,6 +74,7 @@ grpc::ClientContext Context; Context.AddMetadata("version", versionString()); Context.AddMetadata("features", featureString()); + Context.AddMetadata("platform", platformString()); std::chrono::system_clock::time_point StartTime = std::chrono::system_clock::now(); auto Deadline = StartTime + DeadlineWaitingTime; diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp --- a/clang-tools-extra/clangd/tool/ClangdMain.cpp +++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -679,7 +679,8 @@ llvm::sys::SetInterruptFunction(&requestShutdown); llvm::cl::SetVersionPrinter([](llvm::raw_ostream &OS) { OS << versionString() << "\n" - << "Features: " << featureString() << "\n"; + << "Features: " << featureString() << "\n" + << "Platform: " << platformString() << "\n"; }); const char *FlagsEnvVar = "CLANGD_FLAGS"; const char *Overview =