#!/bin/sh set -eu status() { echo >&2 ">>> $*"; } error() { status "ERROR $*"; } usage() { echo "usage: $(basename $0) /path/to/repo" exit 1 } OUT=$(dirname $0) while getopts "hC:" OPTION; do case $OPTION in C) OUT=$OPTARG ;; *) usage ;; esac done shift $(( $OPTIND - 1 )) [ $# -eq 1 ] || usage status "updating source..." cp -a "$1"/*.{c,h,cpp,m,metal,cu} "$OUT" status "removing incompatible files..." rm -f "$OUT"/build-info.h SHA1=$(git -C $1 rev-parse @) LICENSE=$(mktemp) cleanup() { rm -f $LICENSE } trap cleanup 0 cat <$LICENSE /** * llama.cpp - git $SHA1 * $(sed 's/^/ * /' <$1/LICENSE) */ EOF for IN in $OUT/*.{c,h,cpp,m,metal,cu}; do TMP=$(mktemp) status "updating license $IN" cat $LICENSE $IN >$TMP mv $TMP $IN done touchup() { local CONSTRAINT=$1 && shift for IN in $*; do status "touching up $IN..." TMP=$(mktemp) { echo "//go:build $CONSTRAINT" echo } | cat - $IN >$TMP mv $TMP $IN done } touchup darwin $OUT/ggml-metal.* touchup mpi $OUT/ggml-mpi.* touchup opencl $OUT/ggml-opencl.*