From 112d0ffa45691d7e69c62be82b954e2d53442a44 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Fri, 14 Jun 2024 08:51:25 +0200 Subject: [PATCH] feat(darwin): embed grpc libs (#2567) * debug * feat(makefile): allow to bundle libs into binary * ci: bundle protobuf into single-binary Signed-off-by: Ettore Di Giacinto * ci: tests Signed-off-by: Ettore Di Giacinto * fix(assets): correctly reference extract folder Signed-off-by: Ettore Di Giacinto * bundle also abseil Signed-off-by: Ettore Di Giacinto * bundle more libs Signed-off-by: Ettore Di Giacinto --------- Signed-off-by: Ettore Di Giacinto Signed-off-by: Ettore Di Giacinto --- .github/workflows/release.yaml | 3 ++- Makefile | 7 +++++++ pkg/assets/extract.go | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 25357ce5..bed1a758 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -268,7 +268,8 @@ jobs: export C_INCLUDE_PATH=/usr/local/include export CPLUS_INCLUDE_PATH=/usr/local/include export PATH=$PATH:$GOPATH/bin - GO_TAGS=p2p make dist + + BACKEND_LIBS="$(ls /opt/homebrew/opt/grpc/lib/*.dylib /opt/homebrew/opt/re2/lib/*.dylib /opt/homebrew/opt/openssl@3/lib/*.dylib /opt/homebrew/opt/protobuf/lib/*.dylib /opt/homebrew/opt/abseil/lib/*.dylib | xargs)" GO_TAGS=p2p make dist - uses: actions/upload-artifact@v4 with: name: LocalAI-MacOS-arm64 diff --git a/Makefile b/Makefile index 16122347..35b9d5f9 100644 --- a/Makefile +++ b/Makefile @@ -313,6 +313,10 @@ build: prepare backend-assets grpcs ## Build the project $(info ${GREEN}I BUILD_TYPE: ${YELLOW}$(BUILD_TYPE)${RESET}) $(info ${GREEN}I GO_TAGS: ${YELLOW}$(GO_TAGS)${RESET}) $(info ${GREEN}I LD_FLAGS: ${YELLOW}$(LD_FLAGS)${RESET}) +ifneq ($(BACKEND_LIBS),) + $(MAKE) backend-assets/lib + cp -r $(BACKEND_LIBS) backend-assets/lib/ +endif CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o $(BINARY_NAME) ./ build-minimal: @@ -321,6 +325,9 @@ build-minimal: build-api: BUILD_GRPC_FOR_BACKEND_LLAMA=true BUILD_API_ONLY=true GO_TAGS=none $(MAKE) build +backend-assets/lib: + mkdir -p backend-assets/lib + dist: STATIC=true $(MAKE) backend-assets/grpc/llama-cpp-avx2 ifeq ($(OS),Darwin) diff --git a/pkg/assets/extract.go b/pkg/assets/extract.go index c76f4c98..c1ac7c5f 100644 --- a/pkg/assets/extract.go +++ b/pkg/assets/extract.go @@ -61,12 +61,13 @@ func ExtractFiles(content embed.FS, extractDir string) error { return err } + lpathVar := "LD_LIBRARY_PATH" if runtime.GOOS == "darwin" { lpathVar = "DYLD_FALLBACK_LIBRARY_PATH" // should it be DYLD_LIBRARY_PATH ? } - for _, libDir := range []string{filepath.Join(extractDir, "backend_assets", "lib"), filepath.Join(extractDir, "lib")} { + for _, libDir := range []string{filepath.Join(extractDir, "backend-assets", "lib"), filepath.Join(extractDir, "lib")} { if _, err := os.Stat(libDir); err == nil { ldLibraryPath := os.Getenv(lpathVar) if ldLibraryPath == "" {