ivanmurashko created this revision. ivanmurashko added reviewers: sammccall, kadircet, ilya-biryukov. Herald added a subscriber: arphaman. Herald added a project: All. ivanmurashko requested review of this revision. Herald added subscribers: cfe-commits, MaskRay. Herald added a project: clang-tools-extra.
The diff adds a library for clangd main function. That change allows to create custom builds for clangd outside the main LLVM repo. The main reason for such builds is an ability to use custom clang-tidy modules (created outside LLVM repo). Note: The possibility for the custom clang-tidy modules was added recently at https://reviews.llvm.org/D73300. The header installation for clangd was also added as a separate diff: https://reviews.llvm.org/D145228 Test Plan: ninja clangd also check that necessary libs are installed aka ninja install ... ls <install folder>/lib/libclangdMain.a Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D145302 Files: clang-tools-extra/clangd/tool/CMakeLists.txt clang-tools-extra/clangd/tool/ClangdMain.cpp clang-tools-extra/clangd/tool/ClangdMain.h clang-tools-extra/clangd/tool/ClangdToolMain.cpp
Index: clang-tools-extra/clangd/tool/ClangdToolMain.cpp =================================================================== --- /dev/null +++ clang-tools-extra/clangd/tool/ClangdToolMain.cpp @@ -0,0 +1,13 @@ +//===--- ClangdToolMain.cpp - clangd main function ------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "ClangdMain.h" + +int main(int argc, char **argv) { + return clang::clangd::clangdMain(argc, argv); +} Index: clang-tools-extra/clangd/tool/ClangdMain.h =================================================================== --- /dev/null +++ clang-tools-extra/clangd/tool/ClangdMain.h @@ -0,0 +1,27 @@ +//===--- ClangdMain.h - clangd main function ------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_TOOL_CLANGDMAIN_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_TOOL_CLANGDMAIN_H + +#include "ClangdLSPServer.h" + +namespace clang { +namespace clangd { +// Check functon that simulates opening a file +// (determining compile command, parsing, indexing) +// and then running features at many locations. +bool check(llvm::StringRef File, const ThreadsafeFS &TFS, + const ClangdLSPServer::Options &Opts); + +// clangd main function (clangd server loop) +int clangdMain(int argc, char *argv[]); +} // namespace clangd +} // namespace clang + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_TOOL_CLANGDMAIN_H Index: clang-tools-extra/clangd/tool/ClangdMain.cpp =================================================================== --- clang-tools-extra/clangd/tool/ClangdMain.cpp +++ clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -6,6 +6,7 @@ // //===----------------------------------------------------------------------===// +#include "ClangdMain.h" #include "ClangdLSPServer.h" #include "CodeComplete.h" #include "Compiler.h" @@ -60,10 +61,6 @@ namespace clang { namespace clangd { -// Implemented in Check.cpp. -bool check(const llvm::StringRef File, const ThreadsafeFS &TFS, - const ClangdLSPServer::Options &Opts); - namespace { using llvm::cl::cat; @@ -710,8 +707,6 @@ } }; } // namespace -} // namespace clangd -} // namespace clang enum class ErrorResultCode : int { NoShutdownRequest = 1, @@ -719,10 +714,7 @@ CheckFailed = 3 }; -int main(int argc, char *argv[]) { - using namespace clang; - using namespace clang::clangd; - +int clangdMain(int argc, char *argv[]) { llvm::InitializeAllTargetInfos(); llvm::sys::PrintStackTraceOnErrorSignal(argv[0]); llvm::sys::AddSignalHandler( @@ -1041,3 +1033,6 @@ return ExitCode; } + +} // namespace clangd +} // namespace clang Index: clang-tools-extra/clangd/tool/CMakeLists.txt =================================================================== --- clang-tools-extra/clangd/tool/CMakeLists.txt +++ clang-tools-extra/clangd/tool/CMakeLists.txt @@ -1,6 +1,13 @@ -add_clang_tool(clangd +# Needed by LLVM's CMake checks because this file defines multiple targets. +set(LLVM_OPTIONAL_SOURCES ClangdMain.cpp ClangdToolMain.cpp Check.cpp) + +add_clang_library(clangdMain ClangdMain.cpp Check.cpp + ) + +add_clang_tool(clangd + ClangdToolMain.cpp $<TARGET_OBJECTS:obj.clangDaemonTweaks> ) @@ -13,8 +20,32 @@ list(APPEND CLANGD_XPC_LIBS "clangdXpcJsonConversions" "clangdXpcTransport") endif() +clang_target_link_libraries(clangdMain + PRIVATE + clangAST + clangBasic + clangFormat + clangFrontend + clangLex + clangSema + clangTooling + clangToolingCore + clangToolingRefactoring + clangToolingSyntax + ) + +target_link_libraries(clangdMain + PRIVATE + clangTidy + clangDaemon + clangdRemoteIndex + clangdSupport + ${CLANGD_XPC_LIBS} + ) + clang_target_link_libraries(clangd PRIVATE + clangdMain clangAST clangBasic clangFormat
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits