[clangd] Fix remote index build without shared libs mode
authorKirill Bobyrev <kbobyrev@google.com>
Tue, 28 Apr 2020 17:15:49 +0000 (19:15 +0200)
committerKirill Bobyrev <kbobyrev@google.com>
Tue, 28 Apr 2020 17:16:37 +0000 (19:16 +0200)
Summary:
Generated Protobuf library has to be in CLANG_EXPORTS and should also be
installed appropriately. The easiest way to do that is via CMake's
add_clang_library. That unfortunately applies "one directory - one
clang_(library|tool)" policy so .proto files should be in a separate directory
and complicates the layout.

This setup works both in shared and static libs mode.

Resolves: https://github.com/clangd/clangd/issues/351

Reviewers: sammccall

Reviewed By: sammccall

Subscribers: mgorny, ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D78885

clang-tools-extra/clangd/index/remote/server/CMakeLists.txt
llvm/cmake/modules/FindGRPC.cmake
llvm/cmake/modules/LLVMProcessSources.cmake

index 378ea29..019b77e 100644 (file)
@@ -5,14 +5,12 @@ set(LLVM_LINK_COMPONENTS
 add_clang_executable(clangd-index-server
   Server.cpp
   )
-target_compile_definitions(clangd-index-server PRIVATE -D GOOGLE_PROTOBUF_NO_RTTI=1)
-clang_target_link_libraries(clangd-index-server
-  PRIVATE
-  clangDaemon
-  )
 target_link_libraries(clangd-index-server
   PRIVATE
-  RemoteIndexProtos
+  clangDaemon
 
+  RemoteIndexProtos
   clangdRemoteMarshalling
+
+  grpc++
   )
index b703566..a5f4b5b 100644 (file)
@@ -45,6 +45,7 @@ function(generate_grpc_protos LibraryName ProtoFile)
           "${ProtoSourceAbsolutePath}"
           DEPENDS "${ProtoSourceAbsolutePath}")
 
-  add_library(${LibraryName} ${GeneratedProtoSource} ${GeneratedGRPCSource})
-  target_link_libraries(${LibraryName} grpc++ protobuf)
+  add_clang_library(${LibraryName} ${GeneratedProtoSource} ${GeneratedGRPCSource}
+    PARTIAL_SOURCES_INTENDED
+    LINK_LIBS grpc++ protobuf)
 endfunction()
index d0be0e8..ba8dca3 100644 (file)
@@ -57,10 +57,12 @@ endfunction(find_all_header_files)
 
 
 function(llvm_process_sources OUT_VAR)
-  cmake_parse_arguments(ARG "" "" "ADDITIONAL_HEADERS;ADDITIONAL_HEADER_DIRS" ${ARGN})
+  cmake_parse_arguments(ARG "PARTIAL_SOURCES_INTENDED" "" "ADDITIONAL_HEADERS;ADDITIONAL_HEADER_DIRS" ${ARGN})
   set(sources ${ARG_UNPARSED_ARGUMENTS})
-  llvm_check_source_file_list( ${sources} )
-  
+  if (NOT ARG_PARTIAL_SOURCES_INTENDED)
+    llvm_check_source_file_list(${sources})
+  endif()
+
   # This adds .td and .h files to the Visual Studio solution:
   add_td_sources(sources)
   find_all_header_files(hdrs "${ARG_ADDITIONAL_HEADER_DIRS}")