diff --git a/clang-tools-extra/clangd/index/remote/server/CMakeLists.txt b/clang-tools-extra/clangd/index/remote/server/CMakeLists.txt --- a/clang-tools-extra/clangd/index/remote/server/CMakeLists.txt +++ b/clang-tools-extra/clangd/index/remote/server/CMakeLists.txt @@ -15,5 +15,8 @@ RemoteIndexProtos clangdRemoteMarshalling - grpc++ + /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgrpc++.a + /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgrpc.a + /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgrpc++_unsecure.a + /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgrpc_unsecure.a ) diff --git a/llvm/cmake/modules/FindGRPC.cmake b/llvm/cmake/modules/FindGRPC.cmake --- a/llvm/cmake/modules/FindGRPC.cmake +++ b/llvm/cmake/modules/FindGRPC.cmake @@ -26,9 +26,9 @@ if (GRPC_CPP_PLUGIN-NOTFOUND OR PROTOC-NOTFOUND) message(FATAL_ERROR "gRPC C++ Plugin and Protoc must be on $PATH for Clangd remote index build") endif() - # On macOS the libraries are typically installed via Homebrew and are not on - # the system path. if (${APPLE}) + # On macOS the libraries are typically installed via Homebrew and are not on + # the system path. find_program(HOMEBREW brew) # If Homebrew is not found, the user might have installed libraries # manually. Fall back to the system path. @@ -66,6 +66,51 @@ IMPORTED_LOCATION ${PROTOBUF_LIBRARY}) endif() endif() + elseif(${UNIX} AND NOT BUILD_SHARED_LIBS) + # Use dpkg on Debian-like Linux distributions to find static libraries. + find_program(DPKG dpkg) + if (NOT DPKG-NOTFOUND) + execute_process(COMMAND ${DPKG} -L libgrpc++-dev + OUTPUT_VARIABLE GRPC_DPKG_PATHS + RESULT_VARIABLE GRPC_DPKG_RETURN_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (GRPC_DPKG_RETURN_CODE EQUAL "0") + # Split the output into CMake list. + string(REPLACE "\n" ";" GRPC_DPKG_LINES ${GRPC_DPKG_PATHS}) + foreach(GRPC_PATH ${GRPC_DPKG_LINES}) + string(FIND ${GRPC_PATH} "libgrpc++.a" LIBGRPCPP_SUBSTR_IDX) + if (NOT LIBGRPCPP_SUBSTR_IDX EQUAL "-1") + add_library(grpc++ STATIC IMPORTED GLOBAL) + set_target_properties(grpc++ PROPERTIES + IMPORTED_LOCATION ${GRPC_PATH}) + message("grpc++ lib ${GRPC_PATH}") + endif() + string(FIND ${GRPC_PATH} "libgrpc++_unsecure.a" LIBGRRPC_UNSECURE_SUBSTR_IDX) + if (NOT LIBGRRPC_UNSECURE_SUBSTR_IDX EQUAL "-1") + add_library(libgrpc++_unsecure STATIC IMPORTED GLOBAL) + set_target_properties(libgrpc++_unsecure PROPERTIES + IMPORTED_LOCATION ${GRPC_PATH}) + message("grpc+++_unsecure lib ${GRPC_PATH}") + endif() + endforeach() + endif() + execute_process(COMMAND ${DPKG} -L libprotobuf-dev + OUTPUT_VARIABLE PROTOBUF_DPKG_PATHS + RESULT_VARIABLE PROTOBUF_DPKG_RETURN_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (PROTOBUF_DPKG_RETURN_CODE EQUAL "0") + # Split the output into CMake list. + string(REPLACE "\n" ";" PROTOBUF_DPKG_LINES ${PROTOBUF_DPKG_PATHS}) + foreach(PROTOBUF_PATH ${PROTOBUF_DPKG_LINES}) + string(FIND ${PROTOBUF_PATH} "libprotobuf.a" LIBPROTOBUF_SUBSTR_IDX) + if (NOT LIBPROTOBUF_SUBSTR_IDX EQUAL "-1") + add_library(protobuf STATIC IMPORTED GLOBAL) + set_target_properties(protobuf PROPERTIES + IMPORTED_LOCATION ${PROTOBUF_PATH}) + endif() + endforeach() + endif() + endif() endif() endif()