Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 29 Nov 2025 20:50:12 +0000
From:      Yuri Victorovich <yuri@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 91a3b5978745 - main - misc/ollama: Add computational backends
Message-ID:  <692b5c84.284d3.646ede32@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=91a3b59787450233cebf7d8eaa65f49d2c4cb440

commit 91a3b59787450233cebf7d8eaa65f49d2c4cb440
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2025-11-29 20:47:27 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2025-11-29 20:50:01 +0000

    misc/ollama: Add computational backends
    
    Options CPU and VULKAN enable various CPU backends and the VULKAN backend.
    
    CPU backends are for different generations of SIMD instructions.
    Backends are loaded automatically when they are installed.
---
 misc/ollama/Makefile                               | 64 ++++++++++++++++++++--
 ...h-ml_backend_ggml_ggml_src_ggml-backend-reg.cpp | 18 ++++++
 misc/ollama/files/patch-ml_path.go                 | 11 ++++
 3 files changed, 88 insertions(+), 5 deletions(-)

diff --git a/misc/ollama/Makefile b/misc/ollama/Makefile
index 65e9ad216ee2..961333179390 100644
--- a/misc/ollama/Makefile
+++ b/misc/ollama/Makefile
@@ -1,6 +1,7 @@
 PORTNAME=	ollama
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.13.1-rc0
+PORTREVISION=	1
 CATEGORIES=	misc # machine-learning
 
 MAINTAINER=	yuri@FreeBSD.org
@@ -12,15 +13,11 @@ LICENSE=	MIT
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	bash:shells/bash \
-		cmake:devel/cmake-core \
-		glslc:graphics/shaderc \
-		vulkan-headers>0:graphics/vulkan-headers \
 		${LOCALBASE}/include/miniaudio/miniaudio.h:audio/miniaudio \
 		${LOCALBASE}/include/nlohmann/json_fwd.hpp:devel/nlohmann-json \
 		${LOCALBASE}/include/stb/stb_image.h:devel/stb
-LIB_DEPENDS=	libvulkan.so:graphics/vulkan-loader
 
-USES=		go:1.24,modules localbase pkgconfig
+USES=		cmake:indirect go:1.24,modules localbase pkgconfig
 
 GO_MODULE=	github.com/yurivict/${PORTNAME} # fork with FreeBSD patches
 GO_TARGET=	.
@@ -29,11 +26,68 @@ GO_ENV+=	CGO_CXXFLAGS="${CXXFLAGS}"
 PLIST_FILES=	bin/${PORTNAME} \
 		bin/ollama-limit-gpu-layers
 
+OPTIONS_GROUP=		BACKENDS
+OPTIONS_GROUP_BACKENDS=	CPU VULKAN
+OPTIONS_DEFAULT=	CPU VULKAN
+
+CPU_DESC=		Build CPU backend shared libraries
+CPU_PLIST_FILES=	lib/ollama/libggml-base.so \
+			lib/ollama/libggml-cpu-alderlake.so \
+			lib/ollama/libggml-cpu-haswell.so \
+			lib/ollama/libggml-cpu-icelake.so \
+			lib/ollama/libggml-cpu-sandybridge.so \
+			lib/ollama/libggml-cpu-skylakex.so \
+			lib/ollama/libggml-cpu-sse42.so \
+			lib/ollama/libggml-cpu-x64.so
+
+VULKAN_DESC=		Build Vulkan GPU backend shared library
+VULKAN_BUILD_DEPENDS=	glslc:graphics/shaderc \
+			${LOCALBASE}/include/vulkan/vulkan.h:graphics/vulkan-headers
+VULKAN_LIB_DEPENDS=	libvulkan.so:graphics/vulkan-loader
+VULKAN_PLIST_FILES=	lib/ollama/libggml-vulkan.so
+
+.include <bsd.port.options.mk>
+
+_CMAKE_FLAGS=	-DCMAKE_BUILD_TYPE=Release -DGGML_BACKEND_DL=ON -DGGML_BACKEND_DIR=${PREFIX}/lib/ollama
+
 post-patch: # change import path to the fork
 	@cd ${WRKSRC} && \
 		(${GREP} -rl ollama/ollama | ${XARGS} ${REINPLACE_CMD} -i '' -e 's|ollama/ollama|yurivict/ollama|g')
 
+pre-build-CPU-on:
+	@${MKDIR} ${WRKSRC}/build && \
+		cd ${WRKSRC}/build && \
+		${CMAKE_BIN} ${_CMAKE_FLAGS} .. && \
+		${MAKE_CMD} ggml-base && \
+		${MAKE_CMD} ggml-cpu
+
+pre-build-VULKAN-on:
+.if !${PORT_OPTIONS:MCPU}
+	@${MKDIR} ${WRKSRC}/build && \
+		cd ${WRKSRC}/build && \
+		${CMAKE_BIN} ${_CMAKE_FLAGS} ..
+.endif
+	@cd ${WRKSRC}/build && \
+		${MAKE_CMD} ggml-vulkan
+
 post-install: # pending https://github.com/ollama/ollama/issues/6407
 	${INSTALL_SCRIPT} ${FILESDIR}/ollama-limit-gpu-layers ${STAGEDIR}${PREFIX}/bin
 
+post-install-CPU-on:
+	@${MKDIR} ${STAGEDIR}${PREFIX}/lib/ollama
+	${INSTALL_LIB} ${WRKSRC}/build/lib/ollama/libggml-base.so \
+		${STAGEDIR}${PREFIX}/lib/ollama/
+	@for f in ${WRKSRC}/build/lib/ollama/libggml-cpu*.so; do \
+		${INSTALL_LIB} $$f ${STAGEDIR}${PREFIX}/lib/ollama/; \
+	done
+
+post-install-VULKAN-on:
+	@${MKDIR} ${STAGEDIR}${PREFIX}/lib/ollama
+	${INSTALL_LIB} ${WRKSRC}/build/lib/ollama/libggml-vulkan.so \
+		${STAGEDIR}${PREFIX}/lib/ollama/
+
+do-test:
+	@cd ${WRKSRC} && \
+		${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${GO_ENV} ${GO_CMD} test ./...
+
 .include <bsd.port.mk>
diff --git a/misc/ollama/files/patch-ml_backend_ggml_ggml_src_ggml-backend-reg.cpp b/misc/ollama/files/patch-ml_backend_ggml_ggml_src_ggml-backend-reg.cpp
new file mode 100644
index 000000000000..17d3116f0faa
--- /dev/null
+++ b/misc/ollama/files/patch-ml_backend_ggml_ggml_src_ggml-backend-reg.cpp
@@ -0,0 +1,18 @@
+--- ml/backend/ggml/ggml/src/ggml-backend-reg.cpp.orig	2025-11-29 00:42:10.354754000 -0800
++++ ml/backend/ggml/ggml/src/ggml-backend-reg.cpp	2025-11-29 00:42:20.531699000 -0800
+@@ -538,11 +538,13 @@
+     std::vector<fs::path> search_paths;
+     if (user_search_path == nullptr) {
+ #ifdef GGML_BACKEND_DIR
++        // On FreeBSD, GGML_BACKEND_DIR is set to the correct library directory
+         search_paths.push_back(fs::u8path(GGML_BACKEND_DIR));
+-#endif
+-        // default search paths: executable directory, current directory
++#else
++        // Fallback: search executable directory and current directory
+         search_paths.push_back(get_executable_path());
+         search_paths.push_back(fs::current_path());
++#endif
+     } else {
+         search_paths.push_back(fs::u8path(user_search_path));
+     }
diff --git a/misc/ollama/files/patch-ml_path.go b/misc/ollama/files/patch-ml_path.go
new file mode 100644
index 000000000000..c9a0ef4dfb8f
--- /dev/null
+++ b/misc/ollama/files/patch-ml_path.go
@@ -0,0 +1,11 @@
+--- ml/path.go.orig	2025-11-29 01:38:34.298472000 -0800
++++ ml/path.go	2025-11-29 01:39:10.084873000 -0800
+@@ -27,7 +27,7 @@
+ 	switch runtime.GOOS {
+ 	case "windows":
+ 		libPath = filepath.Join(filepath.Dir(exe), "lib", "ollama")
+-	case "linux":
++	case "linux", "freebsd":
+ 		libPath = filepath.Join(filepath.Dir(exe), "..", "lib", "ollama")
+ 	case "darwin":
+ 		libPath = filepath.Dir(exe)


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?692b5c84.284d3.646ede32>