diff --git a/Makefile b/Makefile index 67431cf9..40ddf89a 100644 --- a/Makefile +++ b/Makefile @@ -290,9 +290,7 @@ clean: ## Remove build related file rm -rf ./sources rm -rf $(BINARY_NAME) rm -rf release/ - rm -rf ./backend/cpp/grpc/grpc_repo - rm -rf ./backend/cpp/grpc/build - rm -rf ./backend/cpp/grpc/installed_packages + $(MAKE) -C backend/cpp/grpc clean $(MAKE) -C backend/cpp/llama clean ## Build: @@ -467,7 +465,7 @@ ADDED_CMAKE_ARGS=-Dabsl_DIR=${INSTALLED_LIB_CMAKE}/absl \ backend/cpp/llama/grpc-server: ifdef BUILD_GRPC_FOR_BACKEND_LLAMA - backend/cpp/grpc/script/build_grpc.sh ${INSTALLED_PACKAGES} + $(MAKE) -C backend/cpp/grpc build export _PROTOBUF_PROTOC=${INSTALLED_PACKAGES}/bin/proto && \ export _GRPC_CPP_PLUGIN_EXECUTABLE=${INSTALLED_PACKAGES}/bin/grpc_cpp_plugin && \ export PATH="${PATH}:${INSTALLED_PACKAGES}/bin" && \ @@ -477,7 +475,7 @@ else LLAMA_VERSION=$(CPPLLAMA_VERSION) $(MAKE) -C backend/cpp/llama grpc-server endif ## BACKEND CPP LLAMA END - + ## backend-assets/grpc/llama-cpp: backend-assets/grpc backend/cpp/llama/grpc-server cp -rfv backend/cpp/llama/grpc-server backend-assets/grpc/llama-cpp diff --git a/backend/cpp/grpc/Makefile b/backend/cpp/grpc/Makefile new file mode 100644 index 00000000..a6486113 --- /dev/null +++ b/backend/cpp/grpc/Makefile @@ -0,0 +1,66 @@ +# Basic platform detection +HOST_SYSTEM = $(shell uname | cut -f 1 -d_) +SYSTEM ?= $(HOST_SYSTEM) + +TAG_LIB_GRPC?=v1.59.0 +GIT_REPO_LIB_GRPC?=https://github.com/grpc/grpc.git +GIT_CLONE_DEPTH?=1 +NUM_BUILD_THREADS?=$(shell nproc --ignore=1) + +INSTALLED_PACKAGES=installed_packages +GRPC_REPO=grpc_repo +GRPC_BUILD=grpc_build + +export CMAKE_ARGS?= +CMAKE_ARGS+=-DCMAKE_BUILD_TYPE=Release +CMAKE_ARGS+=-DgRPC_INSTALL=ON +CMAKE_ARGS+=-DEXECUTABLE_OUTPUT_PATH=../$(INSTALLED_PACKAGES)/grpc/bin +CMAKE_ARGS+=-DLIBRARY_OUTPUT_PATH=../$(INSTALLED_PACKAGES)/grpc/lib +CMAKE_ARGS+=-DgRPC_BUILD_TESTS=OFF +CMAKE_ARGS+=-DgRPC_BUILD_CSHARP_EXT=OFF +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_CPP_PLUGIN=ON +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON +CMAKE_ARGS+=-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF +CMAKE_ARGS+=-Dprotobuf_WITH_ZLIB=ON +CMAKE_ARGS+=-DRE2_BUILD_TESTING=OFF +CMAKE_ARGS+=-DCMAKE_INSTALL_PREFIX=../$(INSTALLED_PACKAGES) + +# windows need to set OPENSSL_NO_ASM. Results in slower crypto performance but doesn't build otherwise. +# May be resolvable, but for now its set. More info: https://stackoverflow.com/a/75240504/480673 +ifeq ($(SYSTEM),MSYS) +CMAKE_ARGS+=-DOPENSSL_NO_ASM=ON +endif +ifeq ($(SYSTEM),MINGW64) +CMAKE_ARGS+=-DOPENSSL_NO_ASM=ON +endif +ifeq ($(SYSTEM),MINGW32) +CMAKE_ARGS+=-DOPENSSL_NO_ASM=ON +endif +ifeq ($(SYSTEM),CYGWIN) +CMAKE_ARGS+=-DOPENSSL_NO_ASM=ON +endif + +$(INSTALLED_PACKAGES): grpc_build + +$(GRPC_REPO): + git clone --depth $(GIT_CLONE_DEPTH) -b $(TAG_LIB_GRPC) $(GIT_REPO_LIB_GRPC) $(GRPC_REPO)/grpc + cd $(GRPC_REPO)/grpc && git submodule update --init --recursive --depth $(GIT_CLONE_DEPTH) + +$(GRPC_BUILD): $(GRPC_REPO) + mkdir -p $(GRPC_BUILD) + cd $(GRPC_BUILD) && cmake $(CMAKE_ARGS) ../$(GRPC_REPO)/grpc && cmake --build . -- -j ${NUM_BUILD_THREADS} && cmake --build . --target install -- -j ${NUM_BUILD_THREADS} + +build: $(INSTALLED_PACKAGES) + +rebuild: + rm -rf grpc_build + $(MAKE) grpc_build + +clean: + rm -rf grpc_build + rm -rf grpc_repo + rm -rf installed_packages diff --git a/backend/cpp/grpc/script/build_grpc.sh b/backend/cpp/grpc/script/build_grpc.sh deleted file mode 100755 index 98ece5b1..00000000 --- a/backend/cpp/grpc/script/build_grpc.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash - -# Builds locally from sources the packages needed by the llama cpp backend. - -# Makes sure a few base packages exist. -# sudo apt-get --no-upgrade -y install g++ gcc binutils cmake git build-essential autoconf libtool pkg-config - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -echo "Script directory: $SCRIPT_DIR" - -CPP_INSTALLED_PACKAGES_DIR=$1 -if [ -z ${CPP_INSTALLED_PACKAGES_DIR} ]; then - echo "CPP_INSTALLED_PACKAGES_DIR env variable not set. Don't know where to install: failed."; - echo - exit -1 -fi - -if [ -d "${CPP_INSTALLED_PACKAGES_DIR}" ]; then - echo "gRPC installation directory already exists. Nothing to do." - exit 0 -fi - -# The depth when cloning a git repo. 1 speeds up the clone when the repo history is not needed. -GIT_CLONE_DEPTH=1 - -NUM_BUILD_THREADS=$(nproc --ignore=1) - -# Google gRPC -------------------------------------------------------------------------------------- -TAG_LIB_GRPC="v1.59.0" -GIT_REPO_LIB_GRPC="https://github.com/grpc/grpc.git" -GRPC_REPO_DIR="${SCRIPT_DIR}/../grpc_repo" -GRPC_BUILD_DIR="${SCRIPT_DIR}/../grpc_build" -SRC_DIR_LIB_GRPC="${GRPC_REPO_DIR}/grpc" - -echo "SRC_DIR_LIB_GRPC: ${SRC_DIR_LIB_GRPC}" -echo "GRPC_REPO_DIR: ${GRPC_REPO_DIR}" -echo "GRPC_BUILD_DIR: ${GRPC_BUILD_DIR}" - -mkdir -pv ${GRPC_REPO_DIR} - -rm -rf ${GRPC_BUILD_DIR} -mkdir -pv ${GRPC_BUILD_DIR} - -mkdir -pv ${CPP_INSTALLED_PACKAGES_DIR} - -if [ -d "${SRC_DIR_LIB_GRPC}" ]; then - echo "gRPC source already exists locally. Not cloned again." -else - ( cd ${GRPC_REPO_DIR} && \ - git clone --depth ${GIT_CLONE_DEPTH} -b ${TAG_LIB_GRPC} ${GIT_REPO_LIB_GRPC} && \ - cd ${SRC_DIR_LIB_GRPC} && \ - git submodule update --init --recursive --depth ${GIT_CLONE_DEPTH} - ) -fi - -( cd ${GRPC_BUILD_DIR} && \ - cmake -G "Unix Makefiles" \ - -DCMAKE_BUILD_TYPE=Release \ - -DgRPC_INSTALL=ON \ - -DEXECUTABLE_OUTPUT_PATH=${CPP_INSTALLED_PACKAGES_DIR}/grpc/bin \ - -DLIBRARY_OUTPUT_PATH=${CPP_INSTALLED_PACKAGES_DIR}/grpc/lib \ - -DgRPC_BUILD_TESTS=OFF \ - -DgRPC_BUILD_CSHARP_EXT=OFF \ - -DgRPC_BUILD_GRPC_CPP_PLUGIN=ON \ - -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON \ - -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF \ - -Dprotobuf_WITH_ZLIB=ON \ - -DRE2_BUILD_TESTING=OFF \ - -DCMAKE_INSTALL_PREFIX=${CPP_INSTALLED_PACKAGES_DIR}/ \ - ${SRC_DIR_LIB_GRPC} && \ - cmake --build . -- -j ${NUM_BUILD_THREADS} && \ - cmake --build . --target install -- -j ${NUM_BUILD_THREADS} -) - -rm -rf ${GRPC_BUILD_DIR} -rm -rf ${GRPC_REPO_DIR} -