Files
hakorune/tools/plugins/build-all.sh

78 lines
2.0 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# build-all.sh — Build and stage dynamic plugin .so/.dylib/.dll into plugins/*
# Usage: tools/plugins/build-all.sh [crate_dir ...]
set -euo pipefail
ROOT="${NYASH_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
cd "$ROOT"
detect_ext() {
case "$(uname -s)" in
Darwin) echo dylib ;;
MINGW*|MSYS*|CYGWIN*|Windows_NT) echo dll ;;
*) echo so ;;
esac
}
lib_name_for() {
local base="$1"; local ext="$2"
if [ "$ext" = dll ]; then echo "${base}.dll"; else echo "lib${base}.${ext}"; fi
}
build_and_stage() {
local crate_dir="$1" # e.g., nyash-counter-plugin
local base_name="$2" # e.g., nyash_counter_plugin
local ext
ext=$(detect_ext)
echo "[plugins/build-all] building: $crate_dir" >&2
cargo build --release -p "$crate_dir" >/dev/null
local src
case "$ext" in
dll) src="target/release/${base_name}.dll" ;;
dylib) src="target/release/lib${base_name}.dylib" ;;
so) src="target/release/lib${base_name}.so" ;;
esac
if [ ! -f "$src" ]; then
echo "[plugins/build-all] WARN: built artifact not found: $src" >&2
return 1
fi
local out_dir="plugins/${crate_dir}"
mkdir -p "$out_dir"
local dst="$out_dir/$(lib_name_for "$base_name" "$ext")"
cp -f "$src" "$dst"
echo "[plugins/build-all] staged: $dst" >&2
}
CRATES=(
nyash-fixture-plugin:nyash_fixture_plugin
nyash-counter-plugin:nyash_counter_plugin
nyash-math-plugin:nyash_math_plugin
nyash-string-plugin:nyash_string_plugin
nyash-console-plugin:nyash_console_plugin
)
if [ "$#" -gt 0 ]; then
# Accept explicit crate_dir list
for dir in "$@"; do
case "$dir" in
nyash-*-plugin)
base="${dir//-/_}" # hyphen→underscore
build_and_stage "$dir" "$base" || true
;;
*)
echo "[plugins/build-all] WARN: unknown crate dir pattern: $dir" >&2
;;
esac
done
else
for ent in "${CRATES[@]}"; do
IFS=: read -r dir base <<<"$ent"
if [ -d "plugins/$dir" ]; then
build_and_stage "$dir" "$base" || true
fi
done
fi
echo "[plugins/build-all] done" >&2