fix(llvm): make LLVM EXE smokes use workspace target and reliable build_llvm
This commit is contained in:
@ -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}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user