|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Builds locally from sources the packages needed by the llama cpp backend. |
| 4 | + |
| 5 | +# Makes sure a few base packages exist. |
| 6 | +# sudo apt-get --no-upgrade -y install g++ gcc binutils cmake git build-essential autoconf libtool pkg-config |
| 7 | + |
| 8 | +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" |
| 9 | +echo "Script directory: $SCRIPT_DIR" |
| 10 | + |
| 11 | +CPP_INSTALLED_PACKAGES_DIR=$1 |
| 12 | +if [ -z ${CPP_INSTALLED_PACKAGES_DIR} ]; then |
| 13 | + echo "CPP_INSTALLED_PACKAGES_DIR env variable not set. Don't know where to install: failed."; |
| 14 | + echo |
| 15 | + exit -1 |
| 16 | +fi |
| 17 | + |
| 18 | +if [ -d "${CPP_INSTALLED_PACKAGES_DIR}" ]; then |
| 19 | + echo "gRPC installation directory already exists. Nothing to do." |
| 20 | + exit 0 |
| 21 | +fi |
| 22 | + |
| 23 | +# The depth when cloning a git repo. 1 speeds up the clone when the repo history is not needed. |
| 24 | +GIT_CLONE_DEPTH=1 |
| 25 | + |
| 26 | +NUM_BUILD_THREADS=$(nproc --ignore=1) |
| 27 | + |
| 28 | +# Google gRPC -------------------------------------------------------------------------------------- |
| 29 | +TAG_LIB_GRPC="v1.59.0" |
| 30 | +GIT_REPO_LIB_GRPC="https://github.com/grpc/grpc.git" |
| 31 | +GRPC_REPO_DIR="${SCRIPT_DIR}/../grpc_repo" |
| 32 | +GRPC_BUILD_DIR="${SCRIPT_DIR}/../grpc_build" |
| 33 | +SRC_DIR_LIB_GRPC="${GRPC_REPO_DIR}/grpc" |
| 34 | + |
| 35 | +echo "SRC_DIR_LIB_GRPC: ${SRC_DIR_LIB_GRPC}" |
| 36 | +echo "GRPC_REPO_DIR: ${GRPC_REPO_DIR}" |
| 37 | +echo "GRPC_BUILD_DIR: ${GRPC_BUILD_DIR}" |
| 38 | + |
| 39 | +mkdir -pv ${GRPC_REPO_DIR} |
| 40 | + |
| 41 | +rm -rf ${GRPC_BUILD_DIR} |
| 42 | +mkdir -pv ${GRPC_BUILD_DIR} |
| 43 | + |
| 44 | +mkdir -pv ${CPP_INSTALLED_PACKAGES_DIR} |
| 45 | + |
| 46 | +if [ -d "${SRC_DIR_LIB_GRPC}" ]; then |
| 47 | + echo "gRPC source already exists locally. Not cloned again." |
| 48 | +else |
| 49 | + ( cd ${GRPC_REPO_DIR} && \ |
| 50 | + git clone --depth ${GIT_CLONE_DEPTH} -b ${TAG_LIB_GRPC} ${GIT_REPO_LIB_GRPC} && \ |
| 51 | + cd ${SRC_DIR_LIB_GRPC} && \ |
| 52 | + git submodule update --init --recursive --depth ${GIT_CLONE_DEPTH} |
| 53 | + ) |
| 54 | +fi |
| 55 | + |
| 56 | +( cd ${GRPC_BUILD_DIR} && \ |
| 57 | + cmake -G "Unix Makefiles" \ |
| 58 | + -DCMAKE_BUILD_TYPE=Release \ |
| 59 | + -DgRPC_INSTALL=ON \ |
| 60 | + -DEXECUTABLE_OUTPUT_PATH=${CPP_INSTALLED_PACKAGES_DIR}/grpc/bin \ |
| 61 | + -DLIBRARY_OUTPUT_PATH=${CPP_INSTALLED_PACKAGES_DIR}/grpc/lib \ |
| 62 | + -DgRPC_BUILD_TESTS=OFF \ |
| 63 | + -DgRPC_BUILD_CSHARP_EXT=OFF \ |
| 64 | + -DgRPC_BUILD_GRPC_CPP_PLUGIN=ON \ |
| 65 | + -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \ |
| 66 | + -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \ |
| 67 | + -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \ |
| 68 | + -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ |
| 69 | + -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON \ |
| 70 | + -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF \ |
| 71 | + -Dprotobuf_WITH_ZLIB=ON \ |
| 72 | + -DRE2_BUILD_TESTING=OFF \ |
| 73 | + -DCMAKE_INSTALL_PREFIX=${CPP_INSTALLED_PACKAGES_DIR}/ \ |
| 74 | + ${SRC_DIR_LIB_GRPC} && \ |
| 75 | + cmake --build . -- -j ${NUM_BUILD_THREADS} && \ |
| 76 | + cmake --build . --target install -- -j ${NUM_BUILD_THREADS} |
| 77 | +) |
| 78 | + |
| 79 | +rm -rf ${GRPC_BUILD_DIR} |
| 80 | +rm -rf ${GRPC_REPO_DIR} |
| 81 | + |
0 commit comments