mirror of
https://github.com/mudler/LocalAI.git
synced 2026-06-25 09:09:07 -04:00
* fix(parakeet-cpp): darwin/metal support (libparakeet.dylib + DYLD path) The parakeet-cpp backend had no macOS support and panicked at startup on Apple/Metal nodes when purego.Dlopen could not find "libparakeet.so". Fix it across the same four layers the sibling voxtral backend already handles correctly: - main.go: default the dlopen target to libparakeet.dylib on darwin (runtime.GOOS), libparakeet.so elsewhere; PARAKEET_LIBRARY still wins. - Makefile: also stage the built libparakeet.dylib next to the Go sources. - package.sh: accept either the Linux .so[.X.Y] or the macOS .dylib when bundling instead of hard-failing when no .so is present (the macOS case); note that on Darwin only system frameworks are linked. - run.sh: on Darwin set DYLD_LIBRARY_PATH and PARAKEET_LIBRARY to the packaged .dylib; keep LD_LIBRARY_PATH + .so on Linux. Mirrors backend/go/voxtral. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix(backends): darwin/metal support across purego Go backends The parakeet-cpp fix in the previous commit was an instance of a bug shared by nearly every purego/dlopen Go backend: the dlopen target was hardcoded to a .so name and run.sh exported only LD_LIBRARY_PATH, so the backend panicked at startup on macOS/Apple-Metal nodes (dyld needs the .dylib name and DYLD_LIBRARY_PATH). voxtral was the only backend handling this correctly. Apply the same four-layer fix (mirroring backend/go/voxtral) to the remaining affected backends: whisper, sherpa-onnx, ced, stablediffusion-ggml, vibevoice-cpp, qwen3-tts-cpp, omnivoice-cpp, crispasr, acestep-cpp, locate-anything-cpp, depth-anything-cpp, rfdetr-cpp, sam3-cpp, localvqe Per backend: - main.go (sherpa-onnx: backend.go, two libraries): default the dlopen target to the .dylib on darwin (runtime.GOOS), .so elsewhere; the existing <BACKEND>_LIBRARY env override still wins. - run.sh: on Darwin set DYLD_LIBRARY_PATH and point <BACKEND>_LIBRARY at the packaged .dylib; keep LD_LIBRARY_PATH + the Linux CPU-variant (avx/avx2/avx512) selection unchanged in the else branch. - package.sh: also bundle the .dylib and stop hard-failing when no .so is present (the macOS case). - Makefile: also stage the built .dylib. Notes: - stablediffusion-ggml and acestep-cpp build their lib as a CMake MODULE, which emits .so (not .dylib) on macOS; run.sh prefers .dylib and falls back to .so so both layouts work. - sherpa-onnx was already partly darwin-aware (Makefile/package.sh); only run.sh and the two dlopen defaults needed fixing. Linux behavior is unchanged. Verified gofmt-clean and `CGO_ENABLED=0 go build` for every backend. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
79 lines
2.5 KiB
Makefile
79 lines
2.5 KiB
Makefile
# ced sound-classification backend Makefile.
|
|
#
|
|
# Upstream pin lives below as CED_VERSION?=<sha> so .github/bump_deps.sh can find
|
|
# and update it (matches the parakeet-cpp / whisper.cpp convention).
|
|
#
|
|
# Local dev shortcut: symlink an out-of-tree ced.cpp shared build + header and
|
|
# skip the clone/cmake steps entirely:
|
|
# ln -sf /path/to/ced.cpp/build-shared/libced.so .
|
|
# ln -sf /path/to/ced.cpp/include/ced_capi.h .
|
|
# go build -o ced-grpc .
|
|
|
|
CED_VERSION?=c04ac14b7992d00584d9e812c9bb6268598a6ce7
|
|
CED_REPO?=https://github.com/mudler/ced.cpp
|
|
|
|
GOCMD?=go
|
|
GO_TAGS?=
|
|
JOBS?=$(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
|
|
|
|
BUILD_TYPE?=
|
|
NATIVE?=false
|
|
|
|
# Static-link ggml into libced.so (PIC) so the shared lib is self-contained:
|
|
# dlopen needs no libggml*.so alongside it, only system libs the runtime image
|
|
# already provides.
|
|
CMAKE_ARGS?=-DCMAKE_BUILD_TYPE=Release -DCED_SHARED=ON -DCED_BUILD_CLI=OFF -DCED_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
|
|
|
ifeq ($(NATIVE),false)
|
|
CMAKE_ARGS+=-DGGML_NATIVE=OFF
|
|
endif
|
|
|
|
# ced.cpp gates its ggml backends behind CED_GGML_* options (set(... CACHE BOOL
|
|
# "" FORCE)), so forward those instead of a bare -DGGML_CUDA=ON.
|
|
ifeq ($(BUILD_TYPE),cublas)
|
|
CMAKE_ARGS+=-DCED_GGML_CUDA=ON -DGGML_CUDA_GRAPHS=ON
|
|
else ifeq ($(BUILD_TYPE),openblas)
|
|
CMAKE_ARGS+=-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS
|
|
else ifeq ($(BUILD_TYPE),hipblas)
|
|
CMAKE_ARGS+=-DCED_GGML_HIP=ON
|
|
else ifeq ($(BUILD_TYPE),vulkan)
|
|
CMAKE_ARGS+=-DCED_GGML_VULKAN=ON
|
|
endif
|
|
|
|
.PHONY: ced-grpc package build clean purge test all
|
|
|
|
all: ced-grpc
|
|
|
|
sources/ced.cpp:
|
|
mkdir -p sources/ced.cpp
|
|
cd sources/ced.cpp && \
|
|
git init -q && \
|
|
git remote add origin $(CED_REPO) && \
|
|
git fetch --depth 1 origin $(CED_VERSION) && \
|
|
git checkout FETCH_HEAD && \
|
|
git submodule update --init --recursive --depth 1 --single-branch
|
|
|
|
libced.so: sources/ced.cpp
|
|
cmake -B sources/ced.cpp/build-shared -S sources/ced.cpp $(CMAKE_ARGS)
|
|
cmake --build sources/ced.cpp/build-shared --config Release -j$(JOBS)
|
|
cp -fv sources/ced.cpp/build-shared/libced.so* ./ 2>/dev/null || true
|
|
cp -fv sources/ced.cpp/build-shared/libced.dylib ./ 2>/dev/null || true
|
|
cp -fv sources/ced.cpp/include/ced_capi.h ./
|
|
|
|
ced-grpc: libced.so main.go goced.go
|
|
CGO_ENABLED=0 $(GOCMD) build -tags "$(GO_TAGS)" -o ced-grpc .
|
|
|
|
package: ced-grpc
|
|
bash package.sh
|
|
|
|
build: package
|
|
|
|
test:
|
|
LD_LIBRARY_PATH=$(CURDIR):$$LD_LIBRARY_PATH $(GOCMD) test ./... -count=1
|
|
|
|
clean: purge
|
|
rm -rf libced.so* ced_capi.h package ced-grpc
|
|
|
|
purge:
|
|
rm -rf sources/ced.cpp
|