Team Ai
Modelpublic

Felipe97/llama-cpp-compiled

sourceHugging Faceupdated 21d agoView on Hugging Face
0likes1.2kdownloads
check-release-apiabi.sh132 linesDownload Raw Back to scripts
1#!/bin/bash2# Check API/ABI compatibility between the previous release tag and current HEAD.3#4# Finds the most recent vX.Y.Z tag, checks it out in a temporary git worktree,5# builds both versions with shared libs enabled, and uses check-apiabi-compat.sh6# to compare the results.7#8# Exit codes:9#   0: compatible, or check was skipped10#   1: backwards-incompatible changes found, or build failed11#12# Options:13#   --tag <version>: compare against this tag instead of the latest release14#15# Environment:16#   SKIP_APIABI_CHECK:    set to 1 or true to skip17#   APIABI_COMPARE_TAG:   equivalent to --tag (used by CI)18 19set -euo pipefail20 21SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"22REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"23 24usage() {25    echo "Usage: $0 [--tag <version>]" >&226    echo "  --tag <version>  Compare against this release tag (default: latest)" >&227}28 29COMPARE_TAG="${APIABI_COMPARE_TAG:-}"30while [[ "$#" -gt 0 ]]; do31    case "$1" in32    --tag)33        if [[ -z "${2:-}" ]]; then usage; exit 1; fi34        COMPARE_TAG="$2"35        shift 236        ;;37    --tag=*)38        COMPARE_TAG="${1#*=}"39        shift40        ;;41    -h | --help)42        usage; exit 043        ;;44    *)45        usage; exit 146        ;;47    esac48done49 50if [[ "${SKIP_APIABI_CHECK:-}" == "1" || "${SKIP_APIABI_CHECK:-}" == "true" ]]; then51    echo "SKIP_APIABI_CHECK is set - skipping API/ABI compatibility check"52    exit 053fi54 55if ! command -v abi-compliance-checker >/dev/null 2>&1 || ! command -v abidw >/dev/null 2>&1; then56    echo "Warning: abi-compliance-checker or abigail-tools not installed - skipping API/ABI check"57    exit 058fi59 60discover_libs() {61    local build_dir="$1"62    local libs=()63    for dir in "$build_dir/src" "$build_dir/bin"; do64        [[ -d "$dir" ]] || continue65        for f in "$dir"/lib*.so; do66            [[ -f "$f" ]] && libs+=("$(basename "$f" .so)")67        done68    done69    echo "${libs[@]}"70}71 72if [[ -n "${COMPARE_TAG}" ]]; then73    PREV_TAG="${COMPARE_TAG}"74    if ! git -C "$REPO_ROOT" rev-parse --verify "${PREV_TAG}^{}" >/dev/null 2>&1; then75        echo "Error: tag '${PREV_TAG}' not found in repository." >&276        exit 177    fi78else79    PREV_TAG=$(git -C "$REPO_ROOT" tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1 || true)80    if [[ -z "${PREV_TAG}" ]]; then81        echo "Warning: no previous release tag found - skipping API/ABI check"82        exit 083    fi84fi85OLD_VERSION="${PREV_TAG#v}"86OLD_MAJOR="${OLD_VERSION%%.*}"87OLD_MINOR="${OLD_VERSION#*.}"; OLD_MINOR="${OLD_MINOR%%.*}"88 89NEW_MAJOR=$(grep "set(LLAMA_VERSION_MAJOR" "$REPO_ROOT/CMakeLists.txt" | sed 's/.*MAJOR \([0-9]*\).*/\1/')90NEW_MINOR=$(grep "set(LLAMA_VERSION_MINOR" "$REPO_ROOT/CMakeLists.txt" | sed 's/.*MINOR \([0-9]*\).*/\1/')91 92if [[ "$NEW_MAJOR" -gt "$OLD_MAJOR" ]]; then93    echo "Major version increment ($OLD_MAJOR -> $NEW_MAJOR): API/ABI breaking changes are expected, skipping compatibility check."94    exit 095fi96 97CHECK_FLAGS=()98if [[ "$NEW_MINOR" -eq "$OLD_MINOR" ]]; then99    echo "Patch version bump detected: checking for any API/ABI changes (a minor bump is required if any are found)..."100    CHECK_FLAGS+=(--strict)101else102    echo "Minor version bump detected: checking for backwards-incompatible API/ABI changes..."103fi104 105echo "Checking API/ABI compatibility against ${PREV_TAG}..."106 107WORKTREE_DIR=$(mktemp -d)108BUILD_OLD=$(mktemp -d)109BUILD_NEW=$(mktemp -d)110 111cleanup() {112    git -C "$REPO_ROOT" worktree remove --force "$WORKTREE_DIR" 2>/dev/null || true113    rm -rf "$WORKTREE_DIR" "$BUILD_OLD" "$BUILD_NEW"114}115trap cleanup EXIT116 117git -C "$REPO_ROOT" worktree add "$WORKTREE_DIR" "$PREV_TAG"118 119cmake -S "$WORKTREE_DIR" -B "$BUILD_OLD" -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo120cmake --build "$BUILD_OLD" --parallel "$(nproc)"121OLD_LIBS=($(discover_libs "$BUILD_OLD"))122echo "Libraries found in old build: ${OLD_LIBS[*]}"123 124cmake -S "$REPO_ROOT"    -B "$BUILD_NEW" -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo125cmake --build "$BUILD_NEW" --parallel "$(nproc)"126NEW_LIBS=($(discover_libs "$BUILD_NEW"))127echo "Libraries found in new build: ${NEW_LIBS[*]}"128 129(cd "$WORKTREE_DIR" && "$SCRIPT_DIR/check-apiabi-compat.sh" --include-path ggml/include --generate "$BUILD_OLD" "${OLD_LIBS[@]}")130(cd "$REPO_ROOT"    && "$SCRIPT_DIR/check-apiabi-compat.sh" --include-path ggml/include --generate "$BUILD_NEW" "${NEW_LIBS[@]}")131(cd "$REPO_ROOT"    && "$SCRIPT_DIR/check-apiabi-compat.sh" "${CHECK_FLAGS[@]}" --check "$BUILD_OLD" "$BUILD_NEW")132