Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup
Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT):
Core changes:
- Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in)
- Implement SSOT resolver bridge (src/using/ssot_bridge.rs)
- Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support
- Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim)
MIR builder improvements:
- Fix using/alias consistency in Hako MIR builder
- Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml
- Normalize LLVM extern calls: nyash.console.* → nyash_console_*
Smoke tests:
- Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh)
- Add phase2220, phase2230, phase2231 test structure
- Add phase2100 S3 backend selector tests
- Improve test_runner.sh with quiet/timeout controls
Documentation:
- Add docs/ENV_VARS.md (Phase 22.1 env vars reference)
- Add docs/development/runtime/C_CORE_ABI.md
- Update de-rust-roadmap.md with Phase 22.x details
Tools:
- Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper)
- Add tools/tlv_roundtrip_smoke.sh placeholder
- Improve ny_mir_builder.sh with better backend selection
Known issues (to be fixed):
- Parser infinite loop in static method parameter parsing
- Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1)
- phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard)
Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
This commit is contained in:
@ -24,6 +24,7 @@ TARGET=""
|
||||
NYRT_DIR=""
|
||||
VERIFY=0
|
||||
QUIET=0
|
||||
BACKEND="${NYASH_LLVM_BACKEND:-llvmlite}" # llvmlite | crate | native (reserved)
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
@ -68,6 +69,10 @@ if [[ "$SKIP_BUILD" != "1" ]]; then
|
||||
else
|
||||
timeout "$BUILD_TIMEOUT" cargo build --release -j 24 --features "${LLVM_FEATURE}" >/dev/null
|
||||
fi
|
||||
# Prebuild ny-llvmc when using crate backend
|
||||
if [[ "$BACKEND" == "crate" ]]; then
|
||||
(cd "$(dirname "$0")/.." && timeout "$BUILD_TIMEOUT" cargo build --release -j 24 -p nyash-llvm-compiler >/dev/null) || true
|
||||
fi
|
||||
if [[ "$EMIT" == "exe" ]]; then
|
||||
(cd crates/nyrt && timeout "$BUILD_TIMEOUT" cargo build --release -j 24 >/dev/null)
|
||||
fi
|
||||
@ -112,11 +117,23 @@ case "$EMIT" in
|
||||
[[ "$QUIET" == "0" ]] && echo "OK ll:$OUT"
|
||||
;;
|
||||
obj)
|
||||
# Directly use llvmlite harness with MIR v1 JSON input
|
||||
rm -f "$OUT"
|
||||
if ! python3 "$PWD/tools/llvmlite_harness.py" --in "$IN_FILE" --out "$OUT" >/dev/null 2>&1; then
|
||||
echo "error: harness failed to produce $OUT" >&2; exit 4
|
||||
fi
|
||||
case "$BACKEND" in
|
||||
crate)
|
||||
BIN_NYLLVMC="./target/release/ny-llvmc"
|
||||
if [[ ! -x "$BIN_NYLLVMC" ]]; then
|
||||
echo "error: ny-llvmc not found (cargo build -p nyash-llvm-compiler)" >&2; exit 4
|
||||
fi
|
||||
rm -f "$OUT"
|
||||
"$BIN_NYLLVMC" --in "$IN_FILE" --emit obj --out "$OUT" >/dev/null 2>&1 || { echo "error: ny-llvmc failed" >&2; exit 4; }
|
||||
;;
|
||||
llvmlite|*)
|
||||
# Directly use llvmlite harness with MIR v1 JSON input
|
||||
rm -f "$OUT"
|
||||
if ! python3 "$PWD/tools/llvmlite_harness.py" --in "$IN_FILE" --out "$OUT" >/dev/null 2>&1; then
|
||||
echo "error: harness failed to produce $OUT" >&2; exit 4
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if [[ ! -f "$OUT" ]]; then echo "error: failed to produce $OUT" >&2; exit 4; fi
|
||||
[[ "$QUIET" == "0" ]] && echo "OK obj:$OUT"
|
||||
;;
|
||||
@ -124,17 +141,32 @@ case "$EMIT" in
|
||||
# Emit obj then link
|
||||
OBJ="$PWD/target/aot_objects/__tmp_builder.o"
|
||||
rm -f "$OBJ"
|
||||
if ! python3 "$PWD/tools/llvmlite_harness.py" --in "$IN_FILE" --out "$OBJ" >/dev/null 2>&1; then
|
||||
echo "error: harness failed to produce object $OBJ" >&2; exit 4
|
||||
fi
|
||||
if [[ ! -f "$OBJ" ]]; then echo "error: failed to produce object $OBJ" >&2; exit 4; fi
|
||||
# Link with NyRT
|
||||
NYRT_BASE=${NYRT_DIR:-"$PWD/crates/nyash_kernel"}
|
||||
cc "$OBJ" \
|
||||
-L target/release \
|
||||
-L "$NYRT_BASE/target/release" \
|
||||
-Wl,--whole-archive -lnyash_kernel -Wl,--no-whole-archive \
|
||||
-lpthread -ldl -lm -o "$OUT"
|
||||
case "$BACKEND" in
|
||||
crate)
|
||||
BIN_NYLLVMC="./target/release/ny-llvmc"
|
||||
if [[ ! -x "$BIN_NYLLVMC" ]]; then
|
||||
echo "error: ny-llvmc not found (cargo build -p nyash-llvm-compiler)" >&2; exit 4
|
||||
fi
|
||||
# Produce exe directly via ny-llvmc (lets ny-llvmc link)
|
||||
LIBS="${HAKO_AOT_LDFLAGS:-}"
|
||||
if ! "$BIN_NYLLVMC" --in "$IN_FILE" --emit exe --nyrt target/release --libs "$LIBS" --out "$OUT" >/dev/null 2>&1; then
|
||||
echo "error: ny-llvmc failed to link exe" >&2; exit 4
|
||||
fi
|
||||
;;
|
||||
llvmlite|*)
|
||||
if ! python3 "$PWD/tools/llvmlite_harness.py" --in "$IN_FILE" --out "$OBJ" >/dev/null 2>&1; then
|
||||
echo "error: harness failed to produce object $OBJ" >&2; exit 4
|
||||
fi
|
||||
if [[ ! -f "$OBJ" ]]; then echo "error: failed to produce object $OBJ" >&2; exit 4; fi
|
||||
# Link with NyRT
|
||||
NYRT_BASE=${NYRT_DIR:-"$PWD/crates/nyash_kernel"}
|
||||
cc "$OBJ" \
|
||||
-L target/release \
|
||||
-L "$NYRT_BASE/target/release" \
|
||||
-Wl,--whole-archive -lnyash_kernel -Wl,--no-whole-archive \
|
||||
-lpthread -ldl -lm -o "$OUT"
|
||||
;;
|
||||
esac
|
||||
[[ "$QUIET" == "0" ]] && echo "OK exe:$OUT"
|
||||
;;
|
||||
*) echo "error: invalid emit kind: $EMIT" >&2; exit 2 ;;
|
||||
|
||||
Reference in New Issue
Block a user