#!/usr/bin/env bash
# Assemble vocab limbs + run iron tests · BAPHOMET · HOSTESS7 · EZZIE
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
TMP="${TMPDIR:-/tmp}/bgrtx-vocab-$$"
mkdir -p "$TMP"
trap 'rm -rf "$TMP"' EXIT

need() { command -v "$1" >/dev/null || { echo "need $1" >&2; exit 1; }; }
need nasm
need cc

LIMBS=(
  baphomet:baphomet
  adjoin:adjoin
  are:are_fn
  is:is_fn
  scar:scar
  rescar:rescar
  ezzie:ezzie
  phi:phi
  thermo:thermo
  grin:grin
  no:no_fn
  not:not_fn
  god:god_fn
  yes:yes_fn
  hostess7:hostess7
  forensics:forensics
  analysis:analysis
  go:go_fn
  fire:fire_fn
  shoot:shoot
  actual_intel:actual_intel
  language_update:language_update
  educate:educate
  self_learn:self_learn
)

echo "VOCAB ASSEMBLE · $ROOT"
echo "SPEECH · I HAVE A AND B AND NOW WHY FLAW C"
echo "WORD   · ARE IS · IS ARE · BAPHOMET IS WHEN NO ARE"
echo "PLUS   · C IS LIE · LIE IS TRUE · Always Hostess 7"
OBJS=()
for spec in "${LIMBS[@]}"; do
  limb=${spec%%:*}
  src="$ROOT/$limb/x86_64.asm"
  [[ -f "$src" ]] || { echo "missing $src" >&2; exit 1; }
  obj="$TMP/$limb.o"
  nasm -f elf64 -o "$obj" "$src"
  echo "  nasm OK  $limb"
  OBJS+=("$obj")
done
# smoke extras
for limb in bgf bgs forensics truth_pin avx512; do
  src="$ROOT/$limb/x86_64.asm"
  [[ -f "$src" ]] || continue
  if grep -q 'global' "$src"; then
    nasm -f elf64 -o "$TMP/${limb}.o" "$src" && echo "  nasm OK  $limb (extra)" || true
  fi
done

echo "LINK + TEST"
cc -O0 -no-pie -o "$TMP/vocab_test" "$ROOT/Build/vocab_test_main.c" "${OBJS[@]}"
"$TMP/vocab_test"
echo "vocab-test DONE · multiarch: ./Build/multiarch-build.sh"
