2
0

setup_grpc.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/bin/bash
  2. # Copyright The OpenTelemetry Authors
  3. # SPDX-License-Identifier: Apache-2.0
  4. set -e
  5. export DEBIAN_FRONTEND=noninteractive
  6. old_grpc_version='v1.33.2'
  7. new_grpc_version='v1.49.2'
  8. modern_grpc_version='v1.55.0'
  9. gcc_version_for_new_grpc='5.1'
  10. std_version='14'
  11. if [ ! -z "${CXX_STANDARD}" ]; then
  12. std_version="${CXX_STANDARD}"
  13. fi
  14. install_grpc_version=${new_grpc_version}
  15. install_dir='/usr/local/'
  16. build_shared_libs=''
  17. build_internal_abseil_cpp=1
  18. GRPC_BUILD_OPTIONS=()
  19. usage() {
  20. echo "Usage: $0 [options...]" 1>&2;
  21. echo "Available options:" 1>&2;
  22. echo " -v <gcc-version> Set GCC version" 1>&2;
  23. echo " -h Show help message and exit" 1>&2;
  24. echo " -i <install_dir> Set installation prefix" 1>&2;
  25. echo " -m Use the modern gRPC version" 1>&2;
  26. echo " -p <protobuf|abseil-cpp> Let gRPC find protobuf or abseil-cpp by CONFIG package" 1>&2;
  27. echo " -r <gRPC version> Specify the version of gRPC" 1>&2;
  28. echo " -s <STD version> Specify std version(CMAKE_CXX_STANDARD)" 1>&2;
  29. echo " -T Build static libraries" 1>&2;
  30. echo " -H Build shared libraries" 1>&2;
  31. }
  32. while getopts ":v:hi:mp:r:s:TH" o; do
  33. case "${o}" in
  34. v)
  35. gcc_version=${OPTARG}
  36. ;;
  37. h)
  38. usage
  39. exit 0;
  40. ;;
  41. i)
  42. install_dir=${OPTARG}
  43. ;;
  44. p)
  45. if [ "${OPTARG}" == "protobuf" ]; then
  46. GRPC_BUILD_OPTIONS=(${GRPC_BUILD_OPTIONS[@]} "-DgRPC_PROTOBUF_PROVIDER=package")
  47. elif [ "${OPTARG}" == "abseil-cpp" ]; then
  48. GRPC_BUILD_OPTIONS=(${GRPC_BUILD_OPTIONS[@]} "-DgRPC_ABSL_PROVIDER=package")
  49. build_internal_abseil_cpp=0
  50. else
  51. usage
  52. exit 1;
  53. fi
  54. ;;
  55. r)
  56. install_grpc_version=${OPTARG}
  57. ;;
  58. m)
  59. install_grpc_version=${modern_grpc_version}
  60. ;;
  61. s)
  62. std_version=${OPTARG}
  63. ;;
  64. T)
  65. build_shared_libs="OFF"
  66. ;;
  67. H)
  68. build_shared_libs="ON"
  69. ;;
  70. *)
  71. usage
  72. exit 1;
  73. ;;
  74. esac
  75. done
  76. if [ -z "${gcc_version}" ]; then
  77. gcc_version=`gcc --version | awk '/gcc/ {print $NF}'`
  78. fi
  79. if [[ "${gcc_version}" < "${gcc_version_for_new_grpc}" ]] && [[ "${gcc_version:1:1}" == "." ]]; then
  80. echo "${gcc_version} less than ${gcc_version_for_new_grpc}"
  81. std_version='11'
  82. install_grpc_version=${old_grpc_version}
  83. fi
  84. if ! type cmake > /dev/null; then
  85. #cmake not installed, exiting
  86. exit 1
  87. fi
  88. export BUILD_DIR=/tmp/
  89. export INSTALL_DIR=${install_dir}
  90. pushd $BUILD_DIR
  91. echo "installing grpc version: ${install_grpc_version}"
  92. git clone --depth=1 -b ${install_grpc_version} https://github.com/grpc/grpc
  93. pushd grpc
  94. git submodule init
  95. git submodule update --depth 1
  96. if [[ $build_internal_abseil_cpp -ne 0 ]]; then
  97. mkdir -p "third_party/abseil-cpp/build" && pushd "third_party/abseil-cpp/build"
  98. set -x
  99. ABSEIL_CPP_BUILD_OPTIONS=(
  100. -DCMAKE_BUILD_TYPE=Release
  101. -DCMAKE_CXX_STANDARD=${std_version}
  102. -DCMAKE_CXX_STANDARD_REQUIRED=ON
  103. -DCMAKE_CXX_EXTENSIONS=OFF
  104. -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
  105. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
  106. )
  107. if [ ! -z "$build_shared_libs" ]; then
  108. ABSEIL_CPP_BUILD_OPTIONS=(${ABSEIL_CPP_BUILD_OPTIONS[@]} "-DBUILD_SHARED_LIBS=$build_shared_libs")
  109. fi
  110. cmake "${ABSEIL_CPP_BUILD_OPTIONS[@]}" ..
  111. make -j $(nproc)
  112. make install
  113. popd
  114. fi
  115. mkdir -p build && pushd build
  116. GRPC_BUILD_OPTIONS=(
  117. ${GRPC_BUILD_OPTIONS[@]}
  118. -DgRPC_INSTALL=ON
  119. -DCMAKE_CXX_STANDARD=${std_version}
  120. -DCMAKE_CXX_STANDARD_REQUIRED=ON
  121. -DCMAKE_CXX_EXTENSIONS=OFF
  122. -DgRPC_BUILD_TESTS=OFF
  123. -DgRPC_BUILD_GRPC_CPP_PLUGIN=ON
  124. -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF
  125. -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF
  126. -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF
  127. -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF
  128. -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF
  129. -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
  130. -DgRPC_BUILD_GRPCPP_OTEL_PLUGIN=OFF
  131. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
  132. -DCMAKE_PREFIX_PATH=$INSTALL_DIR
  133. )
  134. if [ ! -z "$build_shared_libs" ]; then
  135. GRPC_BUILD_OPTIONS=(${GRPC_BUILD_OPTIONS[@]} "-DBUILD_SHARED_LIBS=$build_shared_libs")
  136. fi
  137. echo "Building gRPC ${install_grpc_version}"
  138. echo "CMake build options:" "${GRPC_BUILD_OPTIONS[@]}"
  139. cmake "${GRPC_BUILD_OPTIONS[@]}" ..
  140. make -j $(nproc)
  141. make install
  142. popd
  143. popd
  144. export PATH=${INSTALL_DIR}/bin:$PATH # ensure to use the installed grpc