@wllama/wllama
Version:
WebAssembly binding for llama.cpp - Enabling on-browser LLM inference
77 lines (65 loc) • 2.45 kB
YAML
services:
llamacpp-wasm-builder:
container_name: llamacpp-wasm-builder
build:
context: .
dockerfile_inline: |
ARG EMSDK_IMAGE_TAG=none # modify it in build_wasm.sh
FROM emscripten/emsdk:$${EMSDK_IMAGE_TAG}
RUN apt update && apt install -y git
args:
EMSDK_IMAGE_TAG: ${EMSDK_IMAGE_TAG}
user: "${D_UID}:${D_GID}"
environment:
- WLLAMA_TEST_BACKEND=${WLLAMA_TEST_BACKEND:-}
- SKIP_COMPAT=${SKIP_COMPAT:-}
volumes:
- ..:/source:Z
entrypoint: /bin/bash
command:
- -c
- |
set -e
cd /source
mkdir -p build
cd build
mkdir -p emdawn
DAWN_TAG=v20260317.182325
EMDAWN_PKG="emdawnwebgpu_pkg-$${DAWN_TAG}.zip"
EMDAWNWEBGPU_DIR="/source/build/emdawn/emdawnwebgpu_pkg"
echo "Downloading $${EMDAWN_PKG}"
curl -L -o emdawn.zip \
"https://github.com/google/dawn/releases/download/$${DAWN_TAG}/$${EMDAWN_PKG}"
python3 -c "import zipfile; zf=zipfile.ZipFile('emdawn.zip','r'); zf.extractall('/source/build/emdawn'); zf.close()"
CMAKE_EXTRA_FLAGS="-DWLLAMA_TEST_BACKEND=OFF"
if [ -n "${WLLAMA_TEST_BACKEND}" ]; then
CMAKE_EXTRA_FLAGS="-DWLLAMA_TEST_BACKEND=ON";
fi
emcmake cmake .. -DGGML_WEBGPU=ON -DGGML_WEBGPU_JSPI=ON -DEMDAWNWEBGPU_DIR="$${EMDAWNWEBGPU_DIR}" $${CMAKE_EXTRA_FLAGS}
emmake make wllama -j$$(nproc)
# go back to root
cd ..
# copy output files
mkdir -p src/wasm
cp build/wllama.js src/wasm
cp build/wllama.wasm src/wasm
# build compat package (skip if SKIP_COMPAT=1)
if [ -z "${SKIP_COMPAT}" ]; then
mkdir -p build-compat
cd build-compat
emcmake cmake .. -DWLLAMA_COMPAT=ON -DLLAMA_WASM_MEM64=OFF -DGGML_WEBGPU=ON -DGGML_WEBGPU_JSPI=OFF -DEMDAWNWEBGPU_DIR="$${EMDAWNWEBGPU_DIR}" $${CMAKE_EXTRA_FLAGS}
emmake make wllama -j$$(nproc)
# go back to root
cd ..
# copy output files (compat build)
mkdir -p compat/wasm
cp build-compat/wllama.js compat/wasm
cp build-compat/wllama.wasm compat/wasm
fi
# generate source map
node scripts/build_source_map.js
# list files (optional, for verification)
ls -lh build
if [ -d build-compat ]; then
ls -lh build-compat
fi