#!/bin/sh # Build + RUN the M9 FOUNDATION geometry-descriptor tests. Pure C11 (gcc/cc), # stdlib + libm only. Standalone module — NOT folded through elb/elc. Two passes: # 1. PERF — optimised (-O2, no sanitizer): the functional gate. # 2. SAFETY — ASan + UBSan on the same suite (memory-safety is size-independent). set -e HERE=$(cd "$(dirname "$0")" && pwd) RT="$HERE/../../lang/runtime" CC=${CC:-cc} SRC="$HERE/test_geometry.c $RT/engram_geometry.c $RT/engram_store.c $RT/engram_vindex.c" WARN="-std=c11 -Wall -Wextra" TMP=$(mktemp -d) echo "### PASS 1: PERF (optimised, un-sanitised) — functional gate" $CC $WARN -O2 -I"$RT" $SRC -lm -o "$TMP/perf" "$TMP/perf" echo echo "### PASS 2: SAFETY (ASan/UBSan)" $CC $WARN -O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer -I"$RT" $SRC -lm -o "$TMP/safe" ASAN_OPTIONS=${ASAN_OPTIONS:-detect_leaks=0} UBSAN_OPTIONS=halt_on_error=1 "$TMP/safe" # PASS 3 (OPTIONAL): mean-centering discrimination bench on a COPY of a real # store. Skips cleanly unless ENGRAM_BENCH_STORE points at a store .egm — never # touches the live store. Read-only; not part of the pass/fail gate. echo echo "### PASS 3: DISCRIMINATION BENCH (optional; set ENGRAM_BENCH_STORE)" BSRC="$HERE/bench_discrimination.c $RT/engram_geometry.c $RT/engram_store.c $RT/engram_vindex.c" $CC $WARN -O2 -I"$RT" $BSRC -lm -o "$TMP/bench" "$TMP/bench" "${ENGRAM_BENCH_STORE:-}"