Skip to content

Commit a7d87ed

Browse files
authored
Merge branch 'master' into feat/ctransformer
2 parents dcbf836 + e7fa2e0 commit a7d87ed

File tree

3 files changed

+110
-2
lines changed

3 files changed

+110
-2
lines changed

Makefile

+26-2
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ clean: ## Remove build related file
267267
rm -rf ./go-piper
268268
rm -rf $(BINARY_NAME)
269269
rm -rf release/
270+
rm -rf ./backend/cpp/grpc/grpc_repo
271+
rm -rf ./backend/cpp/grpc/build
272+
rm -rf ./backend/cpp/grpc/installed_packages
270273
$(MAKE) -C backend/cpp/llama clean
271274

272275
## Build:
@@ -409,9 +412,30 @@ ifeq ($(BUILD_TYPE),metal)
409412
cp go-llama/build/bin/ggml-metal.metal backend-assets/grpc/
410413
endif
411414

412-
backend/cpp/llama/grpc-server:
413-
LLAMA_VERSION=$(CPPLLAMA_VERSION) $(MAKE) -C backend/cpp/llama grpc-server
415+
## BACKEND CPP LLAMA START
416+
# Sets the variables in case it has to build the gRPC locally.
417+
INSTALLED_PACKAGES=$(CURDIR)/backend/cpp/grpc/installed_packages
418+
INSTALLED_LIB_CMAKE=$(INSTALLED_PACKAGES)/lib/cmake
419+
ADDED_CMAKE_ARGS=-Dabsl_DIR=${INSTALLED_LIB_CMAKE}/absl \
420+
-DProtobuf_DIR=${INSTALLED_LIB_CMAKE}/protobuf \
421+
-Dutf8_range_DIR=${INSTALLED_LIB_CMAKE}/utf8_range \
422+
-DgRPC_DIR=${INSTALLED_LIB_CMAKE}/grpc \
423+
-DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=${INSTALLED_PACKAGES}/include
414424

425+
backend/cpp/llama/grpc-server:
426+
ifdef BUILD_GRPC_FOR_BACKEND_LLAMA
427+
backend/cpp/grpc/script/build_grpc.sh ${INSTALLED_PACKAGES}
428+
export _PROTOBUF_PROTOC=${INSTALLED_PACKAGES}/bin/proto && \
429+
export _GRPC_CPP_PLUGIN_EXECUTABLE=${INSTALLED_PACKAGES}/bin/grpc_cpp_plugin && \
430+
export PATH=${PATH}:${INSTALLED_PACKAGES}/bin && \
431+
CMAKE_ARGS="${ADDED_CMAKE_ARGS}" LLAMA_VERSION=$(CPPLLAMA_VERSION) $(MAKE) -C backend/cpp/llama grpc-server
432+
else
433+
echo "BUILD_GRPC_FOR_BACKEND_LLAMA is not defined."
434+
LLAMA_VERSION=$(CPPLLAMA_VERSION) $(MAKE) -C backend/cpp/llama grpc-server
435+
endif
436+
## BACKEND CPP LLAMA END
437+
438+
##
415439
backend-assets/grpc/llama-cpp: backend-assets/grpc backend/cpp/llama/grpc-server
416440
cp -rfv backend/cpp/llama/grpc-server backend-assets/grpc/llama-cpp
417441
# TODO: every binary should have its own folder instead, so can have different metal implementations

backend/cpp/grpc/.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
installed_packages/
2+
grpc_build/
3+
grpc_repo/

backend/cpp/grpc/script/build_grpc.sh

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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

Comments
 (0)