From 46a623fd754f817ac1c55cef113da64bc05433e8 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Thu, 18 Dec 2025 09:22:11 +0900 Subject: [PATCH] fix(llvm): make LLVM EXE smokes use workspace target and reliable build_llvm --- tools/build_llvm.sh | 23 +++++++++++++++++------ tools/smokes/v2/lib/llvm_exe_runner.sh | 26 ++------------------------ 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/tools/build_llvm.sh b/tools/build_llvm.sh index 405dec06..a6f16cab 100644 --- a/tools/build_llvm.sh +++ b/tools/build_llvm.sh @@ -38,9 +38,6 @@ if [[ ! -f "$INPUT" ]]; then exit 1 fi -BIN=${NYASH_BIN:-./target/release/hakorune} -[[ -x "$BIN" ]] || BIN="./target/release/nyash" - if ! command -v llvm-config-18 >/dev/null 2>&1; then echo "error: llvm-config-18 not found (install LLVM 18 dev)." >&2 exit 2 @@ -49,6 +46,9 @@ fi # Use the cargo target dir when set (helps LLVM EXE smokes that build under /tmp). CARGO_TARGET_DIR_EFFECTIVE="${CARGO_TARGET_DIR:-$PWD/target}" +BIN_DEFAULT="$CARGO_TARGET_DIR_EFFECTIVE/release/hakorune" +BIN="${NYASH_BIN:-$BIN_DEFAULT}" + echo "[1/4] Building hakorune (feature selectable) ..." # Select LLVM feature: default harness (llvm), or legacy inkwell when NYASH_LLVM_FEATURE=llvm-inkwell-legacy LLVM_FEATURE=${NYASH_LLVM_FEATURE:-llvm} @@ -64,12 +64,23 @@ else CARGO_INCREMENTAL=1 cargo build --release -j 24 -p nyash-rust --features "$LLVM_FEATURE" >/dev/null fi +if [[ ! -x "$BIN" ]]; then + # Backward compatible fallback for older layouts. + if [[ -x "$CARGO_TARGET_DIR_EFFECTIVE/release/nyash" ]]; then + BIN="$CARGO_TARGET_DIR_EFFECTIVE/release/nyash" + else + echo "error: compiler binary not found/executable after build: $BIN" >&2 + echo "hint: ensure NYASH_BIN points to an existing binary or set CARGO_TARGET_DIR correctly" >&2 + exit 1 + fi +fi + echo "[2/4] Emitting object (.o) via LLVM backend ..." -# Default object output path under target/aot_objects -mkdir -p "$PWD/target/aot_objects" +# Default object output path under $CARGO_TARGET_DIR/aot_objects +mkdir -p "$CARGO_TARGET_DIR_EFFECTIVE/aot_objects" stem=$(basename "$INPUT") stem=${stem%.hako} -OBJ="${NYASH_LLVM_OBJ_OUT:-$PWD/target/aot_objects/${stem}.o}" +OBJ="${NYASH_LLVM_OBJ_OUT:-$CARGO_TARGET_DIR_EFFECTIVE/aot_objects/${stem}.o}" if [[ "${NYASH_LLVM_SKIP_EMIT:-0}" != "1" ]]; then rm -f "$OBJ" COMPILER_MODE=${NYASH_LLVM_COMPILER:-harness} diff --git a/tools/smokes/v2/lib/llvm_exe_runner.sh b/tools/smokes/v2/lib/llvm_exe_runner.sh index 59cf7130..aa9f00df 100644 --- a/tools/smokes/v2/lib/llvm_exe_runner.sh +++ b/tools/smokes/v2/lib/llvm_exe_runner.sh @@ -12,9 +12,8 @@ set -uo pipefail llvm_exe_cargo_target_dir() { - # Release builds can fail with EXDEV when rustc uses /tmp for temp files and target/ is elsewhere. - # Force a dedicated target dir under /tmp so rustc temp files and outputs stay on the same filesystem. - local target_dir="${LLVM_EXE_CARGO_TARGET_DIR:-/tmp/nyash_cargo_target}" + # Use the workspace target dir by default so `NYASH_BIN` and plugin artifacts match local dev expectations. + local target_dir="${LLVM_EXE_CARGO_TARGET_DIR:-$NYASH_ROOT/target}" mkdir -p "$target_dir" echo "$target_dir" } @@ -25,32 +24,11 @@ llvm_exe_preflight_or_skip() { return 1 fi - if ! "$NYASH_BIN" --help 2>&1 | grep -q "llvm"; then - test_skip "hakorune --backend llvm not available" - return 1 - fi - if ! python3 -c "import llvmlite" 2>/dev/null; then test_skip "Python llvmlite not found" return 1 fi - # Verify the binary can actually emit an object (not "mock LLVM"). - # This avoids hard failures when hakorune was built without `--features llvm`. - local cargo_target_dir - cargo_target_dir="$(llvm_exe_cargo_target_dir)" - local preflight_obj="$cargo_target_dir/_llvm_exe_preflight.o" - rm -f "$preflight_obj" - if ! env NYASH_DISABLE_PLUGINS=1 NYASH_LLVM_USE_HARNESS=1 NYASH_LLVM_OBJ_OUT="$preflight_obj" \ - "$NYASH_BIN" --backend llvm "$NYASH_ROOT/apps/tests/phase87_llvm_exe_min.hako" >/dev/null 2>&1; then - test_skip "LLVM object emit preflight failed (hakorune may lack --features llvm)" - return 1 - fi - if [ ! -f "$preflight_obj" ]; then - test_skip "LLVM object emit unavailable (hakorune may be built without --features llvm)" - return 1 - fi - return 0 }