[PATCH] D85715: [clangd] Attempt to allow gRPC & Proobuf static linking

Kirill Bobyrev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 07:29:05 PDT 2020


kbobyrev added a comment.

This is a full reproducer of what would work with grpc++ built from source. Seems like the dependencies are pulled by CMake and this way it actually links correctly.

  ~/playground/grpc-static-linking/build kbobyrev at kbobyrev-workstation.muc.corp.google.com
  λ cat ../CMakeLists.txt
  project(HelloGRPC)
  cmake_minimum_required(VERSION 3.16)
  
  add_executable(HelloGRPC HelloGRPC.cpp)
  
  set(protobuf_MODULE_COMPATIBLE TRUE)
  find_package(Protobuf CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH})
  message(STATUS "Using protobuf ${protobuf_VERSION}")
  find_package(gRPC CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH})
  message(STATUS "Using gRPC ${gRPC_VERSION}")
  
  include_directories(${Protobuf_INCLUDE_DIRS})
  
  # gRPC CMake CONFIG gives the libraries slightly odd names, make them match
  # the conventional system-installed names.
  set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_GLOBAL TRUE)
  add_library(protobuf ALIAS protobuf::libprotobuf)
  set_target_properties(gRPC::grpc++ PROPERTIES IMPORTED_GLOBAL TRUE)
  add_library(grpc++ ALIAS gRPC::grpc++)
  
  set(GRPC_CPP_PLUGIN $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
  set(PROTOC ${Protobuf_PROTOC_EXECUTABLE})
  
  target_link_libraries(HelloGRPC grpc++)
  
  ~/playground/grpc-static-linking/build kbobyrev at kbobyrev-workstation.muc.corp.google.com
  λ cat ../HelloGRPC.cpp
  #include <iostream>
  #include "/usr/local/google/home/kbobyrev/software/grpc-latest/include/grpc++/grpc++.h"
  
  int main() {
    const auto Channel =
        grpc::CreateChannel("0.0.0.0:5000", grpc::InsecureChannelCredentials());
  }
  
  ~/playground/grpc-static-linking/build kbobyrev at kbobyrev-workstation.muc.corp.google.com
  λ cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=On -DGRPC_INSTALL_PATH=/usr/local/google/home/kbobyrev/software/grpc-latest ../
  -- Using protobuf
  -- Using gRPC 1.30.0
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /usr/local/google/home/kbobyrev/playground/grpc-static-linking/build
  
  ~/playground/grpc-static-linking/build kbobyrev at kbobyrev-workstation.muc.corp.google.com
  λ ninja -v
  [1/2] /usr/bin/c++  -DCARES_STATICLIB -D__CLANG_SUPPORT_DYN_ANNOTATION__ -isystem /usr/local/google/home/kbobyrev/software/grpc-latest/include  -MD -MT CMakeFiles/HelloGRPC.dir/HelloGRPC.cpp.o -MF CMakeFiles/HelloGRPC.dir/HelloGRPC.cpp.o.d -o CMakeFiles/HelloGRPC.dir/HelloGRPC.cpp.o -c ../HelloGRPC.cpp
  [2/2] : && /usr/bin/c++     CMakeFiles/HelloGRPC.dir/HelloGRPC.cpp.o  -o HelloGRPC  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgrpc++.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libprotobuf.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgrpc.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libssl.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libcrypto.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libz.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libcares.a  -lnsl  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_bad_optional_access.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libgpr.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_time.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_civil_time.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_time_zone.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_str_format_internal.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_strings.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_strings_internal.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_base.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_dynamic_annotations.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_spinlock_wait.a  -lpthread  /usr/lib/x86_64-linux-gnu/librt.so  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_int128.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_throw_delegate.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_raw_logging_internal.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libabsl_log_severity.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libaddress_sorting.a  /usr/local/google/home/kbobyrev/software/grpc-latest/lib/libupb.a  -ldl  -lrt  -lm  -lpthread && :


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85715/new/

https://reviews.llvm.org/D85715



More information about the llvm-commits mailing list