release: v21.0.0 – Full Self‑Hosting (S1/S2/S3 complete)
- DoD met: S1/S2 determinism (const/compare/threeblock-collect), PRIMARY hv1 inline no-fallback, S3 (llvmlite+kernel) reps green - Harness: v1→llvmlite direct, EXE links to libnyash_kernel.a - Python LLVM builder fixes: cmp normalization, ret PHI synthesis, mir_call flat shape - Using/alias polish (prod): modules-first; missing aliases added; duplicate using cleaned - Docs: phase-21.0 COMPLETE; CurrentTask closed; release notes added
This commit is contained in:
@ -55,19 +55,22 @@ if ! command -v llvm-config-18 >/dev/null 2>&1; then
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# Build nyash + NyRT as needed
|
||||
# Build nyash + NyRT as needed(skip allowed)
|
||||
LLVM_FEATURE=${NYASH_LLVM_FEATURE:-llvm}
|
||||
if [[ "$LLVM_FEATURE" == "llvm-inkwell-legacy" ]]; then
|
||||
# Legacy inkwell needs LLVM_SYS_180_PREFIX
|
||||
_LLVMPREFIX=$(llvm-config-18 --prefix)
|
||||
LLVM_SYS_181_PREFIX="${_LLVMPREFIX}" LLVM_SYS_180_PREFIX="${_LLVMPREFIX}" \
|
||||
cargo build --release -j 24 --features "${LLVM_FEATURE}" >/dev/null
|
||||
else
|
||||
# llvm-harness (default) doesn't need LLVM_SYS_180_PREFIX
|
||||
cargo build --release -j 24 --features "${LLVM_FEATURE}" >/dev/null
|
||||
fi
|
||||
if [[ "$EMIT" == "exe" ]]; then
|
||||
(cd crates/nyrt && cargo build --release -j 24 >/dev/null)
|
||||
SKIP_BUILD=${NYASH_LLVM_SKIP_BUILD:-0}
|
||||
BUILD_TIMEOUT=${NYASH_LLVM_BUILD_TIMEOUT:-180}
|
||||
if [[ "$SKIP_BUILD" != "1" ]]; then
|
||||
if [[ "$LLVM_FEATURE" == "llvm-inkwell-legacy" ]]; then
|
||||
_LLVMPREFIX=$(llvm-config-18 --prefix)
|
||||
timeout "$BUILD_TIMEOUT" \
|
||||
LLVM_SYS_181_PREFIX="${_LLVMPREFIX}" LLVM_SYS_180_PREFIX="${_LLVMPREFIX}" \
|
||||
cargo build --release -j 24 --features "${LLVM_FEATURE}" >/dev/null
|
||||
else
|
||||
timeout "$BUILD_TIMEOUT" cargo build --release -j 24 --features "${LLVM_FEATURE}" >/dev/null
|
||||
fi
|
||||
if [[ "$EMIT" == "exe" ]]; then
|
||||
(cd crates/nyrt && timeout "$BUILD_TIMEOUT" cargo build --release -j 24 >/dev/null)
|
||||
fi
|
||||
fi
|
||||
|
||||
mkdir -p "$PWD/target/aot_objects"
|
||||
@ -95,26 +98,24 @@ case "$EMIT" in
|
||||
export NYASH_LLVM_DUMP_LL=1
|
||||
export NYASH_LLVM_LL_OUT="$OUT"
|
||||
if [[ "$VERIFY" == "1" ]]; then export NYASH_LLVM_VERIFY=1; fi
|
||||
# Prefer 'hakorune' binary if present (nyash is deprecated)
|
||||
BIN="./target/release/hakorune"
|
||||
[[ -x "$BIN" ]] || BIN="./target/release/nyash"
|
||||
if [[ "$LLVM_FEATURE" == "llvm-inkwell-legacy" ]]; then
|
||||
cat "$IN_FILE" | NYASH_LLVM_USE_HARNESS=1 LLVM_SYS_181_PREFIX="${_LLVMPREFIX}" LLVM_SYS_180_PREFIX="${_LLVMPREFIX}" \
|
||||
./target/release/nyash --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
"$BIN" --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
else
|
||||
cat "$IN_FILE" | NYASH_LLVM_USE_HARNESS=1 \
|
||||
./target/release/nyash --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
"$BIN" --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
fi
|
||||
if [[ ! -f "$OUT" ]]; then echo "error: failed to produce $OUT" >&2; exit 4; fi
|
||||
[[ "$QUIET" == "0" ]] && echo "OK ll:$OUT"
|
||||
;;
|
||||
obj)
|
||||
export NYASH_LLVM_OBJ_OUT="$OUT"
|
||||
if [[ "$VERIFY" == "1" ]]; then export NYASH_LLVM_VERIFY=1; fi
|
||||
# Directly use llvmlite harness with MIR v1 JSON input
|
||||
rm -f "$OUT"
|
||||
if [[ "$LLVM_FEATURE" == "llvm-inkwell-legacy" ]]; then
|
||||
cat "$IN_FILE" | NYASH_LLVM_USE_HARNESS=1 LLVM_SYS_181_PREFIX="${_LLVMPREFIX}" LLVM_SYS_180_PREFIX="${_LLVMPREFIX}" \
|
||||
./target/release/nyash --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
else
|
||||
cat "$IN_FILE" | NYASH_LLVM_USE_HARNESS=1 \
|
||||
./target/release/nyash --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
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
|
||||
if [[ ! -f "$OUT" ]]; then echo "error: failed to produce $OUT" >&2; exit 4; fi
|
||||
[[ "$QUIET" == "0" ]] && echo "OK obj:$OUT"
|
||||
@ -122,23 +123,17 @@ case "$EMIT" in
|
||||
exe)
|
||||
# Emit obj then link
|
||||
OBJ="$PWD/target/aot_objects/__tmp_builder.o"
|
||||
export NYASH_LLVM_OBJ_OUT="$OBJ"
|
||||
if [[ "$VERIFY" == "1" ]]; then export NYASH_LLVM_VERIFY=1; fi
|
||||
rm -f "$OBJ"
|
||||
if [[ "$LLVM_FEATURE" == "llvm-inkwell-legacy" ]]; then
|
||||
cat "$IN_FILE" | NYASH_LLVM_USE_HARNESS=1 LLVM_SYS_181_PREFIX="${_LLVMPREFIX}" LLVM_SYS_180_PREFIX="${_LLVMPREFIX}" \
|
||||
./target/release/nyash --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
else
|
||||
cat "$IN_FILE" | NYASH_LLVM_USE_HARNESS=1 \
|
||||
./target/release/nyash --backend llvm --ny-parser-pipe >/dev/null || true
|
||||
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/nyrt"}
|
||||
NYRT_BASE=${NYRT_DIR:-"$PWD/crates/nyash_kernel"}
|
||||
cc "$OBJ" \
|
||||
-L target/release \
|
||||
-L "$NYRT_BASE/target/release" \
|
||||
-Wl,--whole-archive -lnyrt -Wl,--no-whole-archive \
|
||||
-Wl,--whole-archive -lnyash_kernel -Wl,--no-whole-archive \
|
||||
-lpthread -ldl -lm -o "$OUT"
|
||||
[[ "$QUIET" == "0" ]] && echo "OK exe:$OUT"
|
||||
;;
|
||||
@ -146,4 +141,3 @@ case "$EMIT" in
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user