Files
ports/misc/nanocoder/Makefile
T
2026-04-13 20:42:12 -07:00

82 lines
2.8 KiB
Makefile

PORTNAME= nanocoder
DISTVERSION= 1.25.1
CATEGORIES= misc # machine-learning
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER= yuri@FreeBSD.org
COMMENT= Local-first coding agent running in your terminal
WWW= https://github.com/Nano-Collective/nanocoder
LICENSE= MIT
.for arch in armv6 armv7 i386 mips powerpc powerpcspe
BROKEN_${arch}= compilation fails on 32-bit platforms: https://github.com/withcatai/node-llama-cpp/issues/593
.endfor
FETCH_DEPENDS= npm:www/npm \
jq:textproc/jq \
${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss
BUILD_DEPENDS= npm:www/npm
USES= cmake:indirect ninja:build nodejs:run
PACKAGE_NAME= @nanocollective/nanocoder
LLAMA_CPP_RELEASE= b8390
MASTER_SITES_llama_cpp= https://github.com/ggml-org/llama.cpp/archive/refs/tags/
DISTFILES+= ${LLAMA_CPP_RELEASE}${EXTRACT_SUFX}:llama_cpp
NODE_LLAMA_CPP_DIR= ${WRKSRC}/node_modules/@nanocollective/nanocoder/node_modules/node-llama-cpp
FETCH_SCRIPT= ${PORTSDIR}/Tools/scripts/npmjs-fetch-with-dependencies.sh
do-fetch:
@if ! [ -f ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} ]; then \
${MKDIR} ${DISTDIR} && \
${ECHO} "====> Fetching ${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}" && \
${SETENV} TMPDIR=${WRKDIR} LOCALBASE=${LOCALBASE} ${FETCH_SCRIPT} \
${PACKAGE_NAME} ${DISTVERSION} \
${FILESDIR}/package-lock.json \
${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}; \
fi
post-fetch:
@if ! [ -f ${DISTDIR}/${LLAMA_CPP_RELEASE}${EXTRACT_SUFX} ]; then \
cd ${DISTDIR} && \
${FETCH_CMD} \
${MASTER_SITES_llama_cpp}${LLAMA_CPP_RELEASE}${EXTRACT_SUFX}; \
fi
post-extract:
@tar -xzf ${DISTDIR}/${LLAMA_CPP_RELEASE}${EXTRACT_SUFX} \
-C ${NODE_LLAMA_CPP_DIR}/llama/
@${MV} ${NODE_LLAMA_CPP_DIR}/llama/llama.cpp-${LLAMA_CPP_RELEASE} \
${NODE_LLAMA_CPP_DIR}/llama/llama.cpp
do-build:
@cd ${WRKSRC} && \
npm rebuild --nodedir=${LOCALBASE}
NODE_ARCH= ${ARCH:S/amd64/x64/:S/aarch64/arm64/:S/i386/ia32/:S/powerpc64le/ppc64le/:S/powerpc64/ppc64/:C/armv[67]/arm/} # modeled after electron.mk
PLIST_SUB= NODE_ARCH=${NODE_ARCH}
do-install:
# install files
cd ${WRKSRC} && \
${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/lib
# remove unnecessary files
@${RM} -rf ${STAGEDIR}${PREFIX}/lib/*.json
# update shebang to use system node
@${REINPLACE_CMD} -i '' \
-e "s|#!/usr/bin/env node|#!${PREFIX}/bin/node|" \
${STAGEDIR}${PREFIX}/lib/node_modules/@nanocollective/nanocoder/node_modules/cli-highlight/dist/cli.js
# delete cmake files: CMake*
${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/@nanocollective/nanocoder/node_modules/node-llama-cpp/ -name 'CMake*' | ${XARGS} ${RM} -r
# set exec bit
@${CHMOD} +x ${STAGEDIR}${PREFIX}/lib/node_modules/.bin/${PORTNAME}
# create symlink in bin
@${RLN} -s ${STAGEDIR}${PREFIX}/lib/node_modules/.bin/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
.include <bsd.port.mk>