2025-09-05 05:49:26 +09:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
# Cranelift JIT-AOT smoke: emit object via --jit-direct and link with nyrt
|
|
|
|
|
# Usage: tools/aot_smoke_cranelift.sh [app_path] [out_basename]
|
2025-09-05 05:49:26 +09:00
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
APP=${1:-apps/smokes/jit_aot_string_min.nyash}
|
|
|
|
|
BASE=${2:-app}
|
2025-09-05 05:49:26 +09:00
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
BIN=./target/release/nyash
|
|
|
|
|
OBJ_DIR=target/aot_objects
|
|
|
|
|
OBJ=$OBJ_DIR/${BASE}.o
|
|
|
|
|
EXE=${BASE}
|
2025-09-05 05:49:26 +09:00
|
|
|
|
|
|
|
|
mkdir -p "$OBJ_DIR"
|
|
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
echo "[AOT] building core (if needed)"
|
|
|
|
|
cargo build --release --features cranelift-jit >/dev/null 2>&1 || true
|
2025-09-05 05:49:26 +09:00
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
echo "[AOT] lowering: $APP -> $OBJ"
|
|
|
|
|
NYASH_DISABLE_PLUGINS=1 NYASH_AOT_OBJECT_OUT="$OBJ" "$BIN" --jit-direct "$APP"
|
2025-09-05 05:49:26 +09:00
|
|
|
|
2025-09-07 07:36:15 +09:00
|
|
|
# Ensure NyRT static library exists (libnyrt.a)
|
|
|
|
|
if [ ! -f crates/nyrt/target/release/libnyrt.a ] && [ ! -f target/release/libnyrt.a ] && [ ! -f target/release/nyrt.lib ]; then
|
|
|
|
|
echo "[AOT] building NyRT (static runtime)"
|
|
|
|
|
(cd crates/nyrt && cargo build --release >/dev/null)
|
|
|
|
|
fi
|
|
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
echo "[AOT] linking: $EXE"
|
2025-09-07 07:36:15 +09:00
|
|
|
# Prefer the workspace root target, then crates/nyrt/target
|
|
|
|
|
cc "$OBJ" \
|
|
|
|
|
-L target/release \
|
|
|
|
|
-L crates/nyrt/target/release \
|
|
|
|
|
-Wl,--whole-archive -lnyrt -Wl,--no-whole-archive \
|
|
|
|
|
-lpthread -ldl -lm \
|
|
|
|
|
-o "$EXE"
|
2025-09-05 05:49:26 +09:00
|
|
|
|
2025-09-06 06:24:08 +09:00
|
|
|
echo "[AOT] run: ./$EXE"
|
|
|
|
|
"./$EXE" || true
|