diff options
author | Jan Korous <jkorous@apple.com> | 2019-01-16 00:24:22 +0000 |
---|---|---|
committer | Jan Korous <jkorous@apple.com> | 2019-01-16 00:24:22 +0000 |
commit | de3bade227c6caf680cebb3fa995d017ad99a771 (patch) | |
tree | feb25812c37ed5e408643d851fe177f5710160fc /clang-tools-extra/clangd/tool/ClangdMain.cpp | |
parent | d6ecaee1815084cc81ec145677f085d1fa591afc (diff) |
[clangd] XPC transport layer
- New transport layer for macOS.
- XPC Framework
- Test client
Framework and client were written by Alex Lorenz.
Differential Revision: https://reviews.llvm.org/D54428
Diffstat (limited to 'clang-tools-extra/clangd/tool/ClangdMain.cpp')
-rw-r--r-- | clang-tools-extra/clangd/tool/ClangdMain.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp index 3d338aec8f0..0a7d561ea0a 100644 --- a/clang-tools-extra/clangd/tool/ClangdMain.cpp +++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "Features.inc" #include "ClangdLSPServer.h" #include "Path.h" #include "Trace.h" @@ -255,6 +256,11 @@ const char TestScheme::TestDir[] = "/clangd-test"; } // namespace clangd } // namespace clang +enum class ErrorResultCode : int { + NoShutdownRequest = 1, + CantRunAsXPCService = 2 +}; + int main(int argc, char *argv[]) { using namespace clang; using namespace clang::clangd; @@ -408,14 +414,26 @@ int main(int argc, char *argv[]) { // Initialize and run ClangdLSPServer. // Change stdin to binary to not lose \r\n on windows. llvm::sys::ChangeStdinToBinary(); - auto Transport = newJSONTransport( - stdin, llvm::outs(), - InputMirrorStream ? InputMirrorStream.getPointer() : nullptr, PrettyPrint, - InputStyle); + + std::unique_ptr<Transport> TransportLayer; + if (getenv("CLANGD_AS_XPC_SERVICE")) { +#ifdef CLANGD_BUILD_XPC + TransportLayer = newXPCTransport(); +#else + errs() << "This clangd binary wasn't built with XPC support.\n"; + return ErrorResultCode::CantRunAsXPCService; +#endif + } else { + TransportLayer = newJSONTransport( + stdin, llvm::outs(), + InputMirrorStream ? InputMirrorStream.getPointer() : nullptr, + PrettyPrint, InputStyle); + } + ClangdLSPServer LSPServer( - *Transport, CCOpts, CompileCommandsDirPath, + *TransportLayer, CCOpts, CompileCommandsDirPath, /*UseDirBasedCDB=*/CompileArgsFrom == FilesystemCompileArgs, Opts); - constexpr int NoShutdownRequestErrorCode = 1; llvm::set_thread_name("clangd.main"); - return LSPServer.run() ? 0 : NoShutdownRequestErrorCode; + return LSPServer.run() ? 0 + : static_cast<int>(ErrorResultCode::NoShutdownRequest); } |