diff --git a/misc/Makefile b/misc/Makefile index 2dadb25668f2..c09343f97fef 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -1,793 +1,794 @@ COMMENT = Miscellaneous utilities SUBDIR += R-cran-gapminder SUBDIR += R-cran-mime SUBDIR += R-cran-optimx SUBDIR += R-cran-xfun SUBDIR += aclgen SUBDIR += actiona SUBDIR += adiak SUBDIR += adios2 SUBDIR += aichat SUBDIR += air SUBDIR += alpaca SUBDIR += amanda-client SUBDIR += amanda-perl-wrapper SUBDIR += amanda-server SUBDIR += ansiweather SUBDIR += apparix SUBDIR += arrow-datafusion SUBDIR += artikulate SUBDIR += asbutton SUBDIR += asr-manpages SUBDIR += astc-encoder SUBDIR += bb SUBDIR += bbjd SUBDIR += bdelta SUBDIR += bedrust SUBDIR += bestfit SUBDIR += bible-kjv SUBDIR += biblesync SUBDIR += bibletime SUBDIR += biblical-curse SUBDIR += binbloom SUBDIR += binclock SUBDIR += binocle SUBDIR += biosfont-demos SUBDIR += birthday SUBDIR += bogosort SUBDIR += bottlerocket SUBDIR += box2d SUBDIR += boxes SUBDIR += broot SUBDIR += bsod SUBDIR += caffe SUBDIR += chatblade SUBDIR += chatgpt-shell-cli SUBDIR += cheat SUBDIR += chef SUBDIR += chmlib SUBDIR += chrono SUBDIR += cinnamon-translations SUBDIR += claude-code SUBDIR += clex SUBDIR += clifm SUBDIR += cloc SUBDIR += clpbar SUBDIR += code2prompt SUBDIR += codex SUBDIR += colortail SUBDIR += coloursum SUBDIR += colwide SUBDIR += comfy-cli SUBDIR += comfyui SUBDIR += compat.el SUBDIR += compat10x SUBDIR += compat11x SUBDIR += compat12x SUBDIR += compat13x SUBDIR += compat14x SUBDIR += compat15x SUBDIR += compat4x SUBDIR += compat5x SUBDIR += compat6x SUBDIR += compat7x SUBDIR += compat8x SUBDIR += compat9x SUBDIR += concourse SUBDIR += copperspice-examples SUBDIR += countrycodes SUBDIR += cpp-mcp SUBDIR += cpuid SUBDIR += crosti SUBDIR += crush SUBDIR += cryptoballot SUBDIR += cs SUBDIR += cstream SUBDIR += ctm SUBDIR += cuttlefish SUBDIR += dahdi SUBDIR += dahdi-kmod26 SUBDIR += darknet SUBDIR += dartsim SUBDIR += ddate SUBDIR += deark SUBDIR += deco SUBDIR += dejagnu SUBDIR += delay SUBDIR += diction SUBDIR += digitemp SUBDIR += dijo SUBDIR += dive SUBDIR += dlib-models SUBDIR += dlpack SUBDIR += dnetc SUBDIR += dotenv-linter SUBDIR += dtach SUBDIR += dvorak7min SUBDIR += dynomite SUBDIR += ecflow SUBDIR += edfbrowser SUBDIR += edflib SUBDIR += elki SUBDIR += elscreen SUBDIR += emacs-libvterm SUBDIR += estic SUBDIR += exercism SUBDIR += explosions SUBDIR += ezc3d SUBDIR += fabric SUBDIR += far2l SUBDIR += fastscapelib SUBDIR += felis SUBDIR += figlet SUBDIR += figlet-fonts SUBDIR += findutils SUBDIR += flag SUBDIR += flag-icons SUBDIR += flashlight SUBDIR += fortune-mod-bible SUBDIR += fortune-mod-bofh SUBDIR += fortune-mod-epictetus SUBDIR += fortune-mod-freebsd-classic SUBDIR += fortune-mod-futurama SUBDIR += fortune-mod-mormon SUBDIR += fortune-mod-psalms SUBDIR += fortuneit SUBDIR += fq SUBDIR += free42 SUBDIR += freebsd-doc-all SUBDIR += freebsd-doc-bn SUBDIR += freebsd-doc-da SUBDIR += freebsd-doc-de SUBDIR += freebsd-doc-el SUBDIR += freebsd-doc-en SUBDIR += freebsd-doc-es SUBDIR += freebsd-doc-fr SUBDIR += freebsd-doc-hu SUBDIR += freebsd-doc-id SUBDIR += freebsd-doc-it SUBDIR += freebsd-doc-ja SUBDIR += freebsd-doc-ko SUBDIR += freebsd-doc-mn SUBDIR += freebsd-doc-nl SUBDIR += freebsd-doc-pl SUBDIR += freebsd-doc-pt SUBDIR += freebsd-doc-ru SUBDIR += freebsd-doc-tr SUBDIR += freebsd-doc-zh_cn SUBDIR += freebsd-doc-zh_tw SUBDIR += freebsd-release-manifests SUBDIR += freeguide SUBDIR += frugally-deep SUBDIR += ftdi-eeprom SUBDIR += fxload SUBDIR += g810-led SUBDIR += gedkeeper SUBDIR += geekcode SUBDIR += gemini-cli SUBDIR += getopt SUBDIR += ggml SUBDIR += gimp-help-en SUBDIR += github-copilot-cli SUBDIR += github-copilot-language-server SUBDIR += gitlogue SUBDIR += gkrellm-gamma SUBDIR += gkrellm-xkb SUBDIR += gkrellmbgchg2 SUBDIR += gkrellmlaunch2 SUBDIR += gkrellshoot2 SUBDIR += gkx86info2 SUBDIR += global-tz SUBDIR += gnome-devel-docs SUBDIR += gnome-getting-started-docs SUBDIR += gnome-icon-theme SUBDIR += gnome-icon-theme-extras SUBDIR += gnome-mime-data SUBDIR += gnome-user-docs SUBDIR += gnu-watch SUBDIR += gobuster SUBDIR += gollama SUBDIR += gone SUBDIR += gplink SUBDIR += gpsim SUBDIR += granulate SUBDIR += grc SUBDIR += grok-cli SUBDIR += gwhich SUBDIR += hashdb SUBDIR += hello SUBDIR += help2man SUBDIR += heyu2 SUBDIR += hicolor-icon-theme SUBDIR += histring SUBDIR += hotkeys SUBDIR += hs-hascard SUBDIR += hulgalugha SUBDIR += hwdata SUBDIR += hxtools SUBDIR += hyprqt6engine SUBDIR += ignition-fuel-tools SUBDIR += iio-oscilloscope SUBDIR += imerge SUBDIR += img2xterm SUBDIR += ini_file_manager SUBDIR += inplace SUBDIR += ipa_conv SUBDIR += ipbt SUBDIR += ironscanner SUBDIR += iselect SUBDIR += iso-codes SUBDIR += jargon SUBDIR += jbidwatcher SUBDIR += jojodiff SUBDIR += json-tui SUBDIR += kbdscan SUBDIR += kcd SUBDIR += kde-thumbnailer-chm SUBDIR += kde-thumbnailer-epub SUBDIR += kde-thumbnailer-fb2 SUBDIR += kdeedu SUBDIR += kdeedu-data SUBDIR += kdeutils SUBDIR += kenny SUBDIR += kf5-purpose SUBDIR += kf6-purpose SUBDIR += kgeography SUBDIR += klettres SUBDIR += koboldcpp SUBDIR += kookbook SUBDIR += ktouch SUBDIR += kwordquiz SUBDIR += lastools SUBDIR += latex-mk SUBDIR += lazyread SUBDIR += lbann SUBDIR += lc SUBDIR += lean-ctx SUBDIR += lesspipe SUBDIR += lf SUBDIR += libad9361-iio SUBDIR += libartnet SUBDIR += libcomps SUBDIR += libeatmydata SUBDIR += libemos SUBDIR += libiio SUBDIR += libkeduvocdocument SUBDIR += liblxi SUBDIR += libmetalink SUBDIR += libmodulemd SUBDIR += libpostal SUBDIR += libpredict SUBDIR += libpri SUBDIR += librepo SUBDIR += libsolv SUBDIR += libspnav SUBDIR += libsupertone SUBDIR += libsweep-lidar SUBDIR += libutf SUBDIR += libuuid SUBDIR += libxdf SUBDIR += lifelines SUBDIR += lightgbm SUBDIR += linux-c7-sdl12-extralibs SUBDIR += linux-rl9-sdl12-extralibs SUBDIR += linux-rl9-sdl20-extralibs SUBDIR += llama-cpp SUBDIR += locale-en_DK SUBDIR += localedata SUBDIR += logsurfer SUBDIR += ls-lint SUBDIR += lscolors SUBDIR += lsix SUBDIR += lv SUBDIR += lxde-common SUBDIR += lxi-tools SUBDIR += magicpoint SUBDIR += man.el SUBDIR += mate-user-guide SUBDIR += mbuffer SUBDIR += mc SUBDIR += mcp-probe SUBDIR += mdp SUBDIR += meshoptimizer SUBDIR += metalink-checker SUBDIR += metalink-tools SUBDIR += mime-support SUBDIR += minidnn SUBDIR += minuet SUBDIR += mirmon SUBDIR += mmdnn SUBDIR += mmv SUBDIR += mnn SUBDIR += molequeue SUBDIR += mtx SUBDIR += najitool SUBDIR += nanocoder SUBDIR += navi SUBDIR += ncnn SUBDIR += netron SUBDIR += nms SUBDIR += nn-insight SUBDIR += nnn SUBDIR += nsf SUBDIR += numchar SUBDIR += nut SUBDIR += ola SUBDIR += ollama SUBDIR += ompl SUBDIR += ondir SUBDIR += onnx SUBDIR += onnxruntime SUBDIR += ooo SUBDIR += opencyc SUBDIR += openhab SUBDIR += openhab-addons SUBDIR += openhantek SUBDIR += openhmd SUBDIR += openmvg SUBDIR += opennn SUBDIR += openr2 SUBDIR += openvdb SUBDIR += orville-write SUBDIR += osinfo-db SUBDIR += ossp-uuid SUBDIR += otter SUBDIR += outside SUBDIR += owrep SUBDIR += p5-Acme-ButFirst SUBDIR += p5-Array-Compare SUBDIR += p5-Array-Diff SUBDIR += p5-Array-FileReader SUBDIR += p5-Array-IntSpan SUBDIR += p5-Array-LineReader SUBDIR += p5-Array-PrintCols SUBDIR += p5-Array-RefElem SUBDIR += p5-Array-Utils SUBDIR += p5-Asterisk-FastAGI SUBDIR += p5-Bot-Training SUBDIR += p5-Bot-Training-MegaHAL SUBDIR += p5-Bot-Training-StarCraft SUBDIR += p5-Business-EDI SUBDIR += p5-Business-Hours SUBDIR += p5-Business-ISBN SUBDIR += p5-Business-ISBN-Data SUBDIR += p5-Business-ISIN SUBDIR += p5-Business-ISMN SUBDIR += p5-Business-ISSN SUBDIR += p5-Business-UPS SUBDIR += p5-Chatbot-Eliza SUBDIR += p5-Data-Buffer SUBDIR += p5-File-CounterFile SUBDIR += p5-File-Sort SUBDIR += p5-Geo-Address-Formatter SUBDIR += p5-Geo-Cache SUBDIR += p5-Geo-Coder-Bing SUBDIR += p5-Geo-Coder-Google SUBDIR += p5-Geo-Coder-Googlev3 SUBDIR += p5-Geo-Coder-Mapquest SUBDIR += p5-Geo-Coder-Multimap SUBDIR += p5-Geo-Coder-Multiple SUBDIR += p5-Geo-Coder-Navteq SUBDIR += p5-Geo-Coder-OSM SUBDIR += p5-Geo-Coder-OpenCage SUBDIR += p5-Geo-Coder-Ovi SUBDIR += p5-Geo-Coder-PlaceFinder SUBDIR += p5-Geo-Coder-TomTom SUBDIR += p5-Geo-GeoNames SUBDIR += p5-Geo-Postcodes SUBDIR += p5-Geo-Postcodes-DK SUBDIR += p5-Geo-Postcodes-NO SUBDIR += p5-Geo-Weather SUBDIR += p5-Geography-Countries SUBDIR += p5-I18N-Charset SUBDIR += p5-I18N-LangTags SUBDIR += p5-LEGO-RCX SUBDIR += p5-Library-CallNumber-LC SUBDIR += p5-List-Compare SUBDIR += p5-List-Util-WeightedRoundRobin SUBDIR += p5-Locale-Codes SUBDIR += p5-Locale-Geocode SUBDIR += p5-Locale-Msgcat SUBDIR += p5-Locale-SubCountry SUBDIR += p5-Locale-US SUBDIR += p5-Net-vCard SUBDIR += p5-OSSP-uuid SUBDIR += p5-OpenAI-API SUBDIR += p5-Software-License SUBDIR += p5-Software-License-CCpack SUBDIR += p5-Test-Dir SUBDIR += p5-Text-FIGlet SUBDIR += p5-Tie-DxHash SUBDIR += p5-Zen-Koans SUBDIR += p5-asterisk-perl SUBDIR += parley SUBDIR += pastebinit SUBDIR += patchutils SUBDIR += pauker SUBDIR += pciids SUBDIR += pdmenu SUBDIR += pear-Services_Weather SUBDIR += pear-Text_Figlet SUBDIR += pecl-timezonedb SUBDIR += perkeep SUBDIR += pfm SUBDIR += php82-calendar SUBDIR += php83-calendar SUBDIR += php84-calendar SUBDIR += php85-calendar SUBDIR += pinfo SUBDIR += pipe SUBDIR += posixtestsuite SUBDIR += pqrs SUBDIR += proxyper SUBDIR += pspresent SUBDIR += ptsort SUBDIR += pubs SUBDIR += py-NATTEN SUBDIR += py-PyUserInput SUBDIR += py-PyWavefront SUBDIR += py-QSpectrumAnalyzer SUBDIR += py-SQCommon SUBDIR += py-SQImFil SUBDIR += py-SQSnobFit SUBDIR += py-SimpleSoapy SUBDIR += py-SoapySDR SUBDIR += py-accelerate SUBDIR += py-aider-chat SUBDIR += py-alive-progress SUBDIR += py-anthropic SUBDIR += py-apache-beam SUBDIR += py-ascii-magic SUBDIR += py-ast-comments SUBDIR += py-bitsandbytes SUBDIR += py-boost-histogram SUBDIR += py-censys SUBDIR += py-cmap SUBDIR += py-codecarbon SUBDIR += py-colorbrewer SUBDIR += py-colored SUBDIR += py-colorzero SUBDIR += py-comfy-aimdo SUBDIR += py-comfy-kitchen SUBDIR += py-comfyui-embedded-docs SUBDIR += py-comfyui-frontend-package SUBDIR += py-comfyui-workflow-templates SUBDIR += py-comfyui-workflow-templates-core SUBDIR += py-comfyui-workflow-templates-media-api SUBDIR += py-comfyui-workflow-templates-media-image SUBDIR += py-comfyui-workflow-templates-media-other SUBDIR += py-comfyui-workflow-templates-media-video SUBDIR += py-compressed-tensors SUBDIR += py-cppman SUBDIR += py-crudini SUBDIR += py-csvw SUBDIR += py-datasets SUBDIR += py-detecta SUBDIR += py-diffusers SUBDIR += py-eemeter SUBDIR += py-einops SUBDIR += py-emoji SUBDIR += py-equinox SUBDIR += py-evaluate SUBDIR += py-ezc3d SUBDIR += py-facenet-pytorch SUBDIR += py-fast-histogram SUBDIR += py-fastmcp SUBDIR += py-fastscapelib SUBDIR += py-files-to-prompt SUBDIR += py-fleep SUBDIR += py-fuzzy SUBDIR += py-gguf SUBDIR += py-google-ai-generativelanguage SUBDIR += py-google-genai SUBDIR += py-gpiozero SUBDIR += py-gymnasium SUBDIR += py-halo SUBDIR += py-haystack_ai SUBDIR += py-haystack_experimental SUBDIR += py-hf-doc-builder SUBDIR += py-hf-xet SUBDIR += py-hist SUBDIR += py-histoprint SUBDIR += py-huepy SUBDIR += py-huggingface-hub SUBDIR += py-icoextract SUBDIR += py-instructor SUBDIR += py-ipyfastscape SUBDIR += py-jiwer SUBDIR += py-kartograph SUBDIR += py-kokoro SUBDIR += py-langchain SUBDIR += py-langchain-anthropic SUBDIR += py-langchain-core SUBDIR += py-langchain-google-genai SUBDIR += py-langchain-openai SUBDIR += py-langchain-tests SUBDIR += py-langchain-text-splitters SUBDIR += py-langgraph SUBDIR += py-langgraph-checkpoint SUBDIR += py-langgraph-prebuilt SUBDIR += py-langgraph-sdk SUBDIR += py-langsmith SUBDIR += py-laspy SUBDIR += py-lazrs SUBDIR += py-lightgbm SUBDIR += py-lightning-utilities SUBDIR += py-lion-pytorch SUBDIR += py-litellm SUBDIR += py-litellm-proxy-extras SUBDIR += py-llama-cpp-python SUBDIR += py-llm SUBDIR += py-llm-claude-3 SUBDIR += py-lm-format-enforcer SUBDIR += py-log_symbols SUBDIR += py-mcp SUBDIR += py-mem0ai SUBDIR += py-mffpy SUBDIR += py-misaki SUBDIR += py-mistral-common SUBDIR += py-mixpanel SUBDIR += py-ml-collections SUBDIR += py-mmcv SUBDIR += py-mmdet SUBDIR += py-mmengine SUBDIR += py-mmsegmentation SUBDIR += py-model-hosting-container-standards SUBDIR += py-molequeue SUBDIR += py-napari SUBDIR += py-napari-svg SUBDIR += py-npTDMS SUBDIR += py-npe2 SUBDIR += py-numcodecs SUBDIR += py-ollama SUBDIR += py-onnx SUBDIR += py-onnx-tf SUBDIR += py-onnxconverter-common SUBDIR += py-openai SUBDIR += py-openai-harmony SUBDIR += py-openai-whisper SUBDIR += py-openpaperwork-core SUBDIR += py-openpaperwork-gtk SUBDIR += py-openvdb SUBDIR += py-optuna SUBDIR += py-oterm SUBDIR += py-palettable SUBDIR += py-papermill SUBDIR += py-pdd SUBDIR += py-peft SUBDIR += py-pexpect SUBDIR += py-pkbar SUBDIR += py-placekey SUBDIR += py-polars SUBDIR += py-polars-runtime SUBDIR += py-posthog SUBDIR += py-powerline-status SUBDIR += py-progressbar SUBDIR += py-progressbar2 SUBDIR += py-pyEDFlib SUBDIR += py-pyct SUBDIR += py-pyfiglet SUBDIR += py-pykml SUBDIR += py-pymatreader SUBDIR += py-pyowm SUBDIR += py-pypatent SUBDIR += py-pyprind SUBDIR += py-pyqir SUBDIR += py-python-crc SUBDIR += py-python-geohash SUBDIR += py-python-pygtrie SUBDIR += py-python-utils SUBDIR += py-pytorch SUBDIR += py-pytorch-lightning SUBDIR += py-pyviz-comms SUBDIR += py-runloop-api-client SUBDIR += py-safetensors SUBDIR += py-sagemaker SUBDIR += py-sagemaker-core SUBDIR += py-sagemaker-mlops SUBDIR += py-sagemaker-serve SUBDIR += py-sagemaker-shim SUBDIR += py-sagemaker-train SUBDIR += py-schedulefree SUBDIR += py-scikit-fusion SUBDIR += py-scikit-quant SUBDIR += py-sentence-transformers SUBDIR += py-serverfiles SUBDIR += py-shap2 SUBDIR += py-shell-gpt SUBDIR += py-sigopt SUBDIR += py-smdebug-rulesconfig SUBDIR += py-soapy_power SUBDIR += py-spandrel SUBDIR += py-spdx-tools SUBDIR += py-spinners SUBDIR += py-synced-collections SUBDIR += py-tes SUBDIR += py-tflearn SUBDIR += py-tflite SUBDIR += py-tflite-support SUBDIR += py-thermocouples_reference SUBDIR += py-timm SUBDIR += py-timm-vis SUBDIR += py-toil SUBDIR += py-torch-geometric SUBDIR += py-torchao SUBDIR += py-torchdata SUBDIR += py-torchmetrics SUBDIR += py-torchsummary SUBDIR += py-torchvision SUBDIR += py-tqdm SUBDIR += py-transformers SUBDIR += py-tvm SUBDIR += py-uhi SUBDIR += py-uuid-utils SUBDIR += py-vaderSentiment + SUBDIR += py-vllm SUBDIR += py-wandb SUBDIR += py-wurlitzer SUBDIR += py-xformers SUBDIR += py-xgboost SUBDIR += py-xgrammar SUBDIR += pyobd SUBDIR += pytorch SUBDIR += qbrew SUBDIR += qlas SUBDIR += qlcplus SUBDIR += qman SUBDIR += qt5-doc SUBDIR += qt5-examples SUBDIR += qt5-l10n SUBDIR += qt5ct SUBDIR += qt6-doc SUBDIR += qt6-examples SUBDIR += qt6ct SUBDIR += quantum++ SUBDIR += quary SUBDIR += radio_datetime_analyzer SUBDIR += raja SUBDIR += randomx SUBDIR += rash SUBDIR += raspberrypi-gpioshutdown SUBDIR += raspbsd-led SUBDIR += ree SUBDIR += retry SUBDIR += rfc SUBDIR += rgb-tui SUBDIR += ringtonetools SUBDIR += rname SUBDIR += rpl SUBDIR += rsclock SUBDIR += rtfm SUBDIR += rubygem-dotenv SUBDIR += rubygem-dotenv-rails SUBDIR += rubygem-dotenv-rails-rails4 SUBDIR += rubygem-dotenv-rails-rails5 SUBDIR += rubygem-dotenv-rails-rails50 SUBDIR += rubygem-dotenv2 SUBDIR += rubygem-haversine_distance SUBDIR += rubygem-iesd SUBDIR += rubygem-mime-types SUBDIR += rubygem-mime-types-data SUBDIR += rubygem-mime-types-gitlab SUBDIR += rubygem-mimemagic SUBDIR += rubygem-octicons SUBDIR += rubygem-rabbit SUBDIR += rubygem-vpim SUBDIR += rump SUBDIR += rustlings SUBDIR += ruut SUBDIR += schilytools SUBDIR += sdformat SUBDIR += seabios SUBDIR += sent SUBDIR += seq2 SUBDIR += sff SUBDIR += sfm SUBDIR += shared-mime-info SUBDIR += shc SUBDIR += shimmy SUBDIR += shuffle SUBDIR += shuffle-db SUBDIR += silicon SUBDIR += since SUBDIR += slides SUBDIR += sloccount SUBDIR += sls SUBDIR += snakemake SUBDIR += soapysdr SUBDIR += solarized SUBDIR += spacenavd-devel SUBDIR += spnavcfg-devel SUBDIR += sshbuddy SUBDIR += sssnips SUBDIR += star-history SUBDIR += stormy SUBDIR += susv2 SUBDIR += susv3 SUBDIR += susv4 SUBDIR += swissfileknife SUBDIR += sword SUBDIR += table.el SUBDIR += talkfilters SUBDIR += tdfiglet SUBDIR += tdrop SUBDIR += team SUBDIR += tellico SUBDIR += tempcontrol SUBDIR += tenere SUBDIR += termatrix SUBDIR += terminfo-db SUBDIR += teseq SUBDIR += thefuck SUBDIR += thrill SUBDIR += timetrace SUBDIR += timezonemap SUBDIR += timr-tui SUBDIR += tkcron SUBDIR += tkinfo SUBDIR += tkregexp SUBDIR += tkrunit SUBDIR += tlci SUBDIR += tlm SUBDIR += toilet SUBDIR += translate SUBDIR += trurl SUBDIR += ttyrec SUBDIR += tudu SUBDIR += tvbrowser SUBDIR += tvm SUBDIR += tzdiff SUBDIR += umodunpack SUBDIR += unclutter SUBDIR += unclutter-xfixes SUBDIR += unicode-emoji SUBDIR += units SUBDIR += upclient SUBDIR += urh SUBDIR += usbids SUBDIR += usbrh-libusb SUBDIR += utftools SUBDIR += utouch-kmod SUBDIR += valentina SUBDIR += vdmfec SUBDIR += veles SUBDIR += vera SUBDIR += vfc SUBDIR += vifm SUBDIR += vifm-colors SUBDIR += visp SUBDIR += viz SUBDIR += vote SUBDIR += vxl SUBDIR += wavedrom SUBDIR += wego SUBDIR += whichman SUBDIR += window SUBDIR += with SUBDIR += wmScoreBoard SUBDIR += wmcalendar SUBDIR += wmforecast SUBDIR += wmjulia SUBDIR += wmpal SUBDIR += wmtunlo SUBDIR += wmweather+ SUBDIR += wmwork SUBDIR += wthrr SUBDIR += xd-rust SUBDIR += xdelta SUBDIR += xdelta3 SUBDIR += xfce4-appfinder SUBDIR += xfce4-weather-plugin SUBDIR += xfce4-wm-themes SUBDIR += xgboost SUBDIR += xiphos SUBDIR += xless SUBDIR += xosd SUBDIR += xplr SUBDIR += xtail SUBDIR += xtar SUBDIR += ytree SUBDIR += zine SUBDIR += zoneinfo .include diff --git a/misc/py-vllm/Makefile b/misc/py-vllm/Makefile new file mode 100644 index 000000000000..1a56e18195a9 --- /dev/null +++ b/misc/py-vllm/Makefile @@ -0,0 +1,109 @@ +PORTNAME= vllm +DISTVERSION= 0.19.0 +CATEGORIES= misc python # machine-learning +MASTER_SITES= PYPI \ + https://github.com/uxlfoundation/oneDNN/archive/refs/tags/:onednn_src +PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} +DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \ + v3.10${EXTRACT_SUFX}:onednn_src + +MAINTAINER= yuri@FreeBSD.org +COMMENT= High-throughput and memory-efficient LLM inference engine +WWW= https://vllm.ai/ \ + https://github.com/vllm-project/vllm + +LICENSE= APACHE20 +LICENSE_FILE= ${WRKSRC}/LICENSE + +BUILD_DEPENDS= ${LOCALBASE}/llvm19/bin/clang:devel/llvm19 \ + ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.0:devel/py-Jinja2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}ninja>=1.13:devel/py-ninja@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}packaging>=24.2:devel/py-packaging@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytorch>=2.10.0:misc/py-pytorch@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}setuptools>=63.0:devel/py-setuptools@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=8.0:devel/py-setuptools-scm@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR} +LIB_DEPENDS= libabsl_status.so:devel/abseil \ + libprotobuf.so:devel/protobuf +RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.13.3:www/py-aiohttp@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}anthropic>0:misc/py-anthropic@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}blake3>0:security/py-blake3@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}cachetools>0:devel/py-cachetools@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}cbor2>0:devel/py-cbor2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}cloudpickle>0:devel/py-cloudpickle@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}compressed-tensors>=0.14.0.1:misc/py-compressed-tensors@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}depyf>=0.20.0:devel/py-depyf@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}diskcache>=5.6.3:devel/py-diskcache@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}einops>0:misc/py-einops@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}fastapi>0:www/py-fastapi@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}filelock>=3.16.1:sysutils/py-filelock@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}gguf>=0.17.0:misc/py-gguf@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}ijson>0:devel/py-ijson@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.0:devel/py-Jinja2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}lark>=1.2.2:devel/py-lark@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}llguidance>=1.3.0:textproc/py-llguidance@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}lm-format-enforcer>=0.11.3:misc/py-lm-format-enforcer@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}mcp>0:misc/py-mcp@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}mistral-common>=1.10.0:misc/py-mistral-common@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}model-hosting-container-standards>=0.1.13:misc/py-model-hosting-container-standards@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}msgspec>0:devel/py-msgspec@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}ninja>=1.13:devel/py-ninja@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}numpy1>=1.25:math/py-numpy1@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}openai>=2.0.0:misc/py-openai@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}openai-harmony>=0.0.3:misc/py-openai-harmony@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}opentelemetry-api>=1.27.0:devel/py-opentelemetry-api@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}opentelemetry-exporter-otlp>=1.27.0:devel/py-opentelemetry-exporter-otlp@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}opentelemetry-sdk>=1.27.0:devel/py-opentelemetry-sdk@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}opentelemetry-semantic-conventions-ai>=0.4.1:devel/py-opentelemetry-semantic-conventions-ai@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}opencv-python-headless>=4.11.0:graphics/py-opencv-python-headless@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}outlines-core>=0.2.11:textproc/py-outlines-core@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}partial-json-parser>0:textproc/py-partial-json-parser@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pillow>=10.0.0:graphics/py-pillow@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}prometheus-client>=0.18.0:net-mgmt/py-prometheus-client@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}prometheus-fastapi-instrumentator>=7.0.0:www/py-prometheus-fastapi-instrumentator@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}protobuf>=5.29.6:devel/py-protobuf@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}psutil>=5.9.0:sysutils/py-psutil@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}py-cpuinfo>0:sysutils/py-py-cpuinfo@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pybase64>0:devel/py-pybase64@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pydantic2>=2.12.0:devel/py-pydantic2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}python-json-logger>0:devel/py-python-json-logger@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pyyaml>0:devel/py-pyyaml@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pyzmq>=25.0.0:net/py-pyzmq@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}regex>0:textproc/py-regex@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}requests>=2.26.0:www/py-requests@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}sentencepiece>0:textproc/py-sentencepiece@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}setproctitle>0:devel/py-setproctitle@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}setuptools>=63.0:devel/py-setuptools@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}tiktoken>=0.6.0:textproc/py-tiktoken@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}tokenizers>=0.21.1:textproc/py-tokenizers@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}tqdm>=4.0:misc/py-tqdm@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}uvloop>=0.20.0:devel/py-uvloop@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}transformers>=4.56.0:misc/py-transformers@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytorch>=2.10.0:misc/py-pytorch@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.10:devel/py-typing-extensions@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}watchfiles>0:devel/py-watchfiles@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}xgrammar>=0.1.32:misc/py-xgrammar@${PY_FLAVOR} +TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}datasets>=4.8.2:misc/py-datasets@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}evaluate>=0.4.6:misc/py-evaluate@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}multiprocess>=0.70.19:devel/py-multiprocess@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytest-asyncio>=1.3.0:devel/py-pytest-asyncio@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}tblib>=3.2.2:devel/py-tblib@${PY_FLAVOR} + +USES= cmake:indirect python +USE_PYTHON= pep517 autoplist pytest + +# Build the CPU extension using clang (same ABI as PyTorch on FreeBSD). +# VLLM_TARGET_DEVICE=cpu builds the vllm._C CPU extension. +# oneDNN (fetched as a distfile) provides optimised GEMM kernels. +MAKE_ENV+= VLLM_TARGET_DEVICE=cpu \ + CMAKE_ARGS="-DCMAKE_C_COMPILER=${LOCALBASE}/llvm19/bin/clang -DCMAKE_CXX_COMPILER=${LOCALBASE}/llvm19/bin/clang++ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE" \ + FETCHCONTENT_SOURCE_DIR_ONEDNN=${WRKDIR}/oneDNN-3.10 + +TEST_ENV= ${MAKE_ENV} PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}:${WRKSRC}/tests/vllm_test_utils:${WRKSRC}/tests/plugins/vllm_add_dummy_stat_logger +TEST_WRKDIR= ${WRKSRC}/tests + +# tests don't run because: +# * imagehash, lm_eval, mteb, pqdm, ray, runai_model_streamer, schemathesis which are not in FreeBSD ports yet +# * vllm._C and vllm.v1.worker.gpu.mm.encoder_cudagraph require CUDA/GPU hardware. + +.include diff --git a/misc/py-vllm/distinfo b/misc/py-vllm/distinfo new file mode 100644 index 000000000000..579dac429ed1 --- /dev/null +++ b/misc/py-vllm/distinfo @@ -0,0 +1,5 @@ +TIMESTAMP = 1775582925 +SHA256 (vllm-0.19.0.tar.gz) = 81e59cf87175e7a62eb8d9acf5989484bbd17089d5eface353f89067bda282d9 +SIZE (vllm-0.19.0.tar.gz) = 31071745 +SHA256 (v3.10.tar.gz) = ba5834a1fdbb6d1c1b1c065dfd789438e7aa42c03fc52d92c02af85d78d1c75c +SIZE (v3.10.tar.gz) = 13507701 diff --git a/misc/py-vllm/files/patch-cmake_cpu__extension.cmake b/misc/py-vllm/files/patch-cmake_cpu__extension.cmake new file mode 100644 index 000000000000..9b7998f407f8 --- /dev/null +++ b/misc/py-vllm/files/patch-cmake_cpu__extension.cmake @@ -0,0 +1,78 @@ +--- cmake/cpu_extension.cmake.orig 2026-04-03 01:57:10 UTC ++++ cmake/cpu_extension.cmake +@@ -20,6 +20,11 @@ set (ENABLE_NUMA TRUE) + + set (ENABLE_NUMA TRUE) + ++# FreeBSD does not have libnuma ++if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") ++ set(ENABLE_NUMA OFF) ++endif() ++ + # + # Check the compile flags + # +@@ -33,12 +38,25 @@ if (NOT MACOSX_FOUND) + endif() + + if (NOT MACOSX_FOUND) +- execute_process(COMMAND cat /proc/cpuinfo +- RESULT_VARIABLE CPUINFO_RET +- OUTPUT_VARIABLE CPUINFO) +- if (NOT CPUINFO_RET EQUAL 0) +- message(FATAL_ERROR "Failed to check CPU features via /proc/cpuinfo") ++ # Try Linux /proc/cpuinfo first, then the FreeBSD linuxulator path ++ if (EXISTS "/proc/cpuinfo") ++ set(_cpuinfo_path "/proc/cpuinfo") ++ elseif (EXISTS "/compat/linux/proc/cpuinfo") ++ set(_cpuinfo_path "/compat/linux/proc/cpuinfo") ++ else() ++ set(_cpuinfo_path "") + endif() ++ if (_cpuinfo_path) ++ execute_process(COMMAND cat ${_cpuinfo_path} ++ RESULT_VARIABLE CPUINFO_RET ++ OUTPUT_VARIABLE CPUINFO) ++ if (NOT CPUINFO_RET EQUAL 0) ++ message(FATAL_ERROR "Failed to check CPU features via ${_cpuinfo_path}") ++ endif() ++ else() ++ message(STATUS "No cpuinfo available; relying on CMAKE_SYSTEM_PROCESSOR for ISA detection") ++ set(CPUINFO "") ++ endif() + endif() + + +@@ -91,9 +109,10 @@ if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64" OR E + + if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64" OR ENABLE_X86_ISA) + set(ENABLE_X86_ISA ON) +- if (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND +- CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.3)) +- message(FATAL_ERROR "X86 backend requires gcc/g++ >= 12.3") ++ if (NOT ( ++ (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.3) OR ++ (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0))) ++ message(FATAL_ERROR "X86 backend requires gcc/g++ >= 12.3 or clang >= 15.0") + endif() + list(APPEND CXX_COMPILE_FLAGS "-mf16c") + list(APPEND CXX_COMPILE_FLAGS_AVX512 ${CXX_COMPILE_FLAGS}) +@@ -407,9 +426,15 @@ if (ENABLE_X86_ISA) + message(STATUS "CPU extension (AVX512F) source files: ${VLLM_EXT_SRC_AVX512}") + message(STATUS "CPU extension (AVX2) source files: ${VLLM_EXT_SRC_AVX2}") + +- set(_C_LIBS numa dnnl_ext) +- set(_C_AVX512_LIBS numa dnnl_ext) +- set(_C_AVX2_LIBS numa) ++ if(ENABLE_NUMA) ++ set(_C_LIBS numa dnnl_ext) ++ set(_C_AVX512_LIBS numa dnnl_ext) ++ set(_C_AVX2_LIBS numa) ++ else() ++ set(_C_LIBS dnnl_ext) ++ set(_C_AVX512_LIBS dnnl_ext) ++ set(_C_AVX2_LIBS "") ++ endif() + + # AMX + AVX512F + AVX512BF16 + AVX512VNNI + define_extension_target( diff --git a/misc/py-vllm/files/patch-csrc_cpu_shm.cpp b/misc/py-vllm/files/patch-csrc_cpu_shm.cpp new file mode 100644 index 000000000000..521a3f335840 --- /dev/null +++ b/misc/py-vllm/files/patch-csrc_cpu_shm.cpp @@ -0,0 +1,12 @@ +--- csrc/cpu/shm.cpp.orig 2026-04-07 17:37:32 UTC ++++ csrc/cpu/shm.cpp +@@ -2,6 +2,9 @@ + + #include + #include ++#ifndef MAP_POPULATE ++# define MAP_POPULATE 0 ++#endif + #include + #include + diff --git a/misc/py-vllm/files/patch-pyproject.toml b/misc/py-vllm/files/patch-pyproject.toml new file mode 100644 index 000000000000..5a3bc19a43b2 --- /dev/null +++ b/misc/py-vllm/files/patch-pyproject.toml @@ -0,0 +1,26 @@ +--- pyproject.toml.orig 2026-04-06 20:40:36 UTC ++++ pyproject.toml +@@ -1,12 +1,9 @@ requires = [ + [build-system] + # Should be mirrored in requirements/build.txt + requires = [ +- "cmake>=3.26.1", +- "ninja", + "packaging>=24.2", +- "setuptools>=77.0.3,<81.0.0", ++ "setuptools>=63.0", + "setuptools-scm>=8.0", +- "torch == 2.10.0", + "wheel", + "jinja2", + ] +@@ -15,8 +12,7 @@ authors = [{name = "vLLM Team"}] + [project] + name = "vllm" + authors = [{name = "vLLM Team"}] +-license = "Apache-2.0" +-license-files = ["LICENSE"] ++license = {text = "Apache-2.0"} + readme = "README.md" + description = "A high-throughput and memory-efficient inference and serving engine for LLMs" + classifiers = [ diff --git a/misc/py-vllm/files/patch-setup.py b/misc/py-vllm/files/patch-setup.py new file mode 100644 index 000000000000..f05813edcc49 --- /dev/null +++ b/misc/py-vllm/files/patch-setup.py @@ -0,0 +1,15 @@ +--- setup.py.orig 2026-04-07 17:26:12 UTC ++++ setup.py +@@ -42,7 +42,11 @@ if sys.platform.startswith("darwin") and VLLM_TARGET_D + if sys.platform.startswith("darwin") and VLLM_TARGET_DEVICE != "cpu": + logger.warning("VLLM_TARGET_DEVICE automatically set to `cpu` due to macOS") + VLLM_TARGET_DEVICE = "cpu" +-elif not (sys.platform.startswith("linux") or sys.platform.startswith("darwin")): ++elif not ( ++ sys.platform.startswith("linux") ++ or sys.platform.startswith("darwin") ++ or sys.platform.startswith("freebsd") ++): + logger.warning( + "vLLM only supports Linux platform (including WSL) and MacOS." + "Building on %s, " diff --git a/misc/py-vllm/files/patch-vllm_distributed_parallel__state.py b/misc/py-vllm/files/patch-vllm_distributed_parallel__state.py new file mode 100644 index 000000000000..cebb4198f919 --- /dev/null +++ b/misc/py-vllm/files/patch-vllm_distributed_parallel__state.py @@ -0,0 +1,35 @@ +--- vllm/distributed/parallel_state.py.orig 2026-04-07 18:19:15 UTC ++++ vllm/distributed/parallel_state.py +@@ -24,6 +24,7 @@ import contextlib + """ + + import contextlib ++import sys + import gc + import pickle + import weakref +@@ -341,8 +342,13 @@ class GroupCoordinator: + ) + # a group with `gloo` backend, to allow direct coordination between + # processes through the CPU. ++ # On FreeBSD, gloo TCP transport is unavailable; use fake backend. ++ _cpu_backend = "gloo" ++ if sys.platform.startswith("freebsd"): ++ import importlib; importlib.import_module("torch.testing._internal.distributed.fake_pg") ++ _cpu_backend = "fake" + with suppress_stdout(): +- cpu_group = torch.distributed.new_group(ranks, backend="gloo") ++ cpu_group = torch.distributed.new_group(ranks, backend=_cpu_backend) + if self.rank in ranks: + self.ranks = ranks + self.world_size = len(ranks) +@@ -1419,6 +1425,9 @@ def init_distributed_environment( + ) + backend = "gloo" + # this backend is used for WORLD ++ # On FreeBSD, register the 'fake' backend before use. ++ if sys.platform.startswith("freebsd") and backend == "fake": ++ import importlib; importlib.import_module("torch.testing._internal.distributed.fake_pg") + torch.distributed.init_process_group( + backend=backend, + init_method=distributed_init_method, diff --git a/misc/py-vllm/files/patch-vllm_platforms_____init____.py b/misc/py-vllm/files/patch-vllm_platforms_____init____.py new file mode 100644 index 000000000000..ab6f660d7de3 --- /dev/null +++ b/misc/py-vllm/files/patch-vllm_platforms_____init____.py @@ -0,0 +1,29 @@ +--- vllm/platforms/__init__.py.orig 2026-04-07 17:26:12 UTC ++++ vllm/platforms/__init__.py +@@ -58,6 +58,11 @@ def cuda_platform_plugin() -> str | None: + + + def cuda_platform_plugin() -> str | None: ++ import sys ++ if sys.platform.startswith("freebsd"): ++ # CUDA extensions are not built on FreeBSD; use CPU platform instead. ++ logger.debug("CUDA platform disabled on FreeBSD.") ++ return None + is_cuda = False + logger.debug("Checking if CUDA platform is available.") + try: +@@ -172,10 +177,12 @@ def cpu_platform_plugin() -> str | None: + if not is_cpu: + import sys + +- is_cpu = sys.platform.startswith("darwin") ++ is_cpu = sys.platform.startswith("darwin") or sys.platform.startswith( ++ "freebsd" ++ ) + if is_cpu: + logger.debug( +- "Confirmed CPU platform is available because the machine is MacOS." ++ "Confirmed CPU platform is available because the machine is MacOS or FreeBSD." + ) + + except Exception as e: diff --git a/misc/py-vllm/files/patch-vllm_platforms_cpu.py b/misc/py-vllm/files/patch-vllm_platforms_cpu.py new file mode 100644 index 000000000000..ae1db6392125 --- /dev/null +++ b/misc/py-vllm/files/patch-vllm_platforms_cpu.py @@ -0,0 +1,42 @@ +--- vllm/platforms/cpu.py.orig 2026-04-03 01:57:10 UTC ++++ vllm/platforms/cpu.py +@@ -74,7 +74,8 @@ class CpuPlatform(Platform): + device_name: str = "cpu" + device_type: str = "cpu" + dispatch_key: str = "CPU" +- dist_backend: str = "gloo" ++ # FreeBSD lacks gloo TCP transport (epoll-based); use fake backend. ++ dist_backend: str = "fake" if sys.platform.startswith("freebsd") else "gloo" + device_control_env_var = "CPU_VISIBLE_MEMORY_NODES" + + @property +@@ -378,7 +379,28 @@ class CpuPlatform(Platform): + + @classmethod + def get_allowed_cpu_core_node_list(cls) -> tuple[list[int], list[LogicalCPUInfo]]: +- assert platform.system() == "Linux" ++ assert platform.system() in ("Linux", "FreeBSD") ++ ++ if platform.system() == "FreeBSD": ++ # FreeBSD lacks lscpu -J; treat all CPUs as a single NUMA node. ++ allowed_cpu_id_set = ( ++ os.sched_getaffinity(0) ++ if hasattr(os, "sched_getaffinity") ++ else set(range(os.cpu_count() or 1)) ++ ) ++ logical_cpu_list = [ ++ LogicalCPUInfo(id=cpu_id, physical_core=cpu_id, numa_node=0) ++ for cpu_id in sorted(allowed_cpu_id_set) ++ ] ++ allowed_numa_nodes_list = [0] ++ env_key = CpuPlatform.device_control_env_var ++ if env_key in os.environ and os.environ[env_key] != "": ++ visible_nodes = [int(s) for s in os.environ[env_key].split(",")] ++ allowed_numa_nodes_list = [ ++ x for x in sorted(list(set(visible_nodes))) ++ if x in allowed_numa_nodes_list ++ ] ++ return allowed_numa_nodes_list, logical_cpu_list + + # Init LogicalCPUInfo from lscpu + lscpu_output = subprocess.check_output( diff --git a/misc/py-vllm/files/patch-vllm_v1_worker_cpu__worker.py b/misc/py-vllm/files/patch-vllm_v1_worker_cpu__worker.py new file mode 100644 index 000000000000..e762ac4eafb9 --- /dev/null +++ b/misc/py-vllm/files/patch-vllm_v1_worker_cpu__worker.py @@ -0,0 +1,12 @@ +--- vllm/v1/worker/cpu_worker.py.orig 2026-04-07 17:26:12 UTC ++++ vllm/v1/worker/cpu_worker.py +@@ -91,6 +91,9 @@ class CPUWorker(Worker): + self.local_omp_cpuid = self._get_autobind_cpu_ids(lambda cpus: cpus) + else: + self.local_omp_cpuid = "nobind" ++ elif omp_cpuids == "auto": ++ # Non-Linux OS: NUMA-based auto-binding not supported, fall back to nobind ++ self.local_omp_cpuid = "nobind" + elif omp_cpuids == "nobind": + self.local_omp_cpuid = "nobind" + else: diff --git a/misc/py-vllm/pkg-descr b/misc/py-vllm/pkg-descr new file mode 100644 index 000000000000..1d4993624aea --- /dev/null +++ b/misc/py-vllm/pkg-descr @@ -0,0 +1,13 @@ +vLLM is a fast and easy-to-use library for LLM inference and serving. +It provides high-throughput and memory-efficient inference for large language +models (LLMs) using state-of-the-art serving technologies including: + +- PagedAttention for efficient KV cache memory management +- Continuous batching of incoming requests +- Optimized CUDA kernels (on supported platforms) +- Hugging Face model compatibility +- Various decoding algorithms including parallel sampling and beam search +- OpenAI-compatible API server + +On FreeBSD, vLLM runs in CPU/empty device mode (VLLM_TARGET_DEVICE=empty), +providing pure Python inference without GPU acceleration.