diff --git a/misc/ollama/Makefile b/misc/ollama/Makefile index 92ccee958795..a2ac9b7b35e8 100644 --- a/misc/ollama/Makefile +++ b/misc/ollama/Makefile @@ -1,95 +1,126 @@ PORTNAME= ollama DISTVERSIONPREFIX= v -DISTVERSION= 0.17.7 +DISTVERSION= 0.18.0 CATEGORIES= misc # machine-learning MAINTAINER= yuri@FreeBSD.org COMMENT= Run Llama 2, Mistral, and other large language models WWW= https://ollama.com \ https://github.com/ollama/ollama LICENSE= MIT LICENSE_FILE= ${WRKSRC}/LICENSE BUILD_DEPENDS= bash:shells/bash \ ${LOCALBASE}/include/miniaudio/miniaudio.h:audio/miniaudio \ ${LOCALBASE}/include/nlohmann/json_fwd.hpp:devel/nlohmann-json \ ${LOCALBASE}/include/stb/stb_image.h:devel/stb USES= cmake:indirect go:1.24+,modules localbase pkgconfig GO_MODULE= github.com/yurivict/${PORTNAME} # fork with FreeBSD patches GO_TARGET= . GO_ENV+= CGO_CXXFLAGS="${CXXFLAGS}" +.include + +.if ${PORT_OPTIONS:MMLX} +GO_BUILDFLAGS+= -tags mlx +.endif + PLIST_FILES= bin/${PORTNAME} \ bin/ollama-limit-gpu-layers OPTIONS_GROUP= BACKENDS -OPTIONS_GROUP_BACKENDS= CPU VULKAN +OPTIONS_GROUP_BACKENDS= CPU VULKAN MLX 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 +MLX_DESC= Build MLX backend for image generation (CPU) +MLX_PLIST_FILES= lib/ollama/libmlx.so \ + lib/ollama/libmlxc.so +MLX_CMAKE_ON= -DMLX_ENGINE:BOOL=ON _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') @${REINPLACE_CMD} -e 's|var Version string = "0.0.0"|var Version string = "${PORTVERSION}"|g' \ ${WRKSRC}/go.mod ${WRKSRC}/version/version.go 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} +.if !${PORT_OPTIONS:MCPU} && !${PORT_OPTIONS:MMLX} @${MKDIR} ${WRKSRC}/build && \ cd ${WRKSRC}/build && \ ${CMAKE_BIN} ${_CMAKE_FLAGS} .. .endif @cd ${WRKSRC}/build && \ ${MAKE_CMD} ggml-vulkan +pre-build-MLX-on: +.if !${PORT_OPTIONS:MCPU} && !${PORT_OPTIONS:MVULKAN} + @${MKDIR} ${WRKSRC}/build && \ + cd ${WRKSRC}/build && \ + ${CMAKE_BIN} ${_CMAKE_FLAGS} -DMLX_ENGINE:BOOL=ON .. +.endif + # Patch MLX after it's fetched by CMake (FreeBSD compatibility fix) + @if [ -f ${WRKSRC}/build/_deps/mlx-src/mlx/distributed/ring/ring.cpp ]; then \ + ${REINPLACE_CMD} -i '' -e '/^#include /a\\ +#include ' \ + ${WRKSRC}/build/_deps/mlx-src/mlx/distributed/ring/ring.cpp; \ + fi + @cd ${WRKSRC}/build && \ + ${MAKE_CMD} mlx mlxc + 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/ +post-install-MLX-on: + @${MKDIR} ${STAGEDIR}${PREFIX}/lib/ollama + ${INSTALL_LIB} ${WRKSRC}/build/lib/ollama/libmlx.so \ + ${STAGEDIR}${PREFIX}/lib/ollama/ + ${INSTALL_LIB} ${WRKSRC}/build/lib/ollama/libmlxc.so \ + ${STAGEDIR}${PREFIX}/lib/ollama/ + do-test: @cd ${WRKSRC} && \ ${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${GO_ENV} ${GO_CMD} test ./... .include diff --git a/misc/ollama/distinfo b/misc/ollama/distinfo index a9cb3d9ef11b..fd2e6f5f81c2 100644 --- a/misc/ollama/distinfo +++ b/misc/ollama/distinfo @@ -1,5 +1,5 @@ -TIMESTAMP = 1773220298 -SHA256 (go/misc_ollama/ollama-v0.17.7/v0.17.7.mod) = e660ffa37ad33611a4c1248967204e578f07ada9941e63ffe6a6fe3e95ac5039 -SIZE (go/misc_ollama/ollama-v0.17.7/v0.17.7.mod) = 4757 -SHA256 (go/misc_ollama/ollama-v0.17.7/v0.17.7.zip) = 7af9768594e0428adc2d7169fc42a034c1388ed1ae2a0d4f6f4f940dd0620476 -SIZE (go/misc_ollama/ollama-v0.17.7/v0.17.7.zip) = 23379864 +TIMESTAMP = 1773459514 +SHA256 (go/misc_ollama/ollama-v0.18.0/v0.18.0.mod) = e660ffa37ad33611a4c1248967204e578f07ada9941e63ffe6a6fe3e95ac5039 +SIZE (go/misc_ollama/ollama-v0.18.0/v0.18.0.mod) = 4757 +SHA256 (go/misc_ollama/ollama-v0.18.0/v0.18.0.zip) = 87dcd0b0ed4f8e3a73b31a7853edb2bc8e27acbbaf5a1456f8fc59538ae2edf4 +SIZE (go/misc_ollama/ollama-v0.18.0/v0.18.0.zip) = 23447832