feat: 多引擎对比 — QuickJS/BOA/JerryScript/V8(node)/Hermes

- 新增 Engine 类抽象: 统一 run_script/run_file/run_test262 接口
- bench_timing/bench_stress: 循环对比所有可用引擎, 缺失自动 N/A
- bench_test262: OxideJS 实测 + 各引擎已知通过率
- V8(node)/Hermes 主流平台可选, 嵌入式自动跳过
- build.sh: 新增 build_boa() / build_jerryscript() 编译

(cherry picked from commit 708f0f32dc8dbf5ebc129b9dcd863e342412dc3c)
This commit is contained in:
2026-06-29 14:25:37 +08:00
parent da75f3a214
commit 0ae3d2cb9d
2 changed files with 281 additions and 80 deletions
+52
View File
@@ -90,6 +90,56 @@ build_quickjs() {
info "QuickJS 完成"
}
# ── BOA ──────────────────────────────────────────────────────────────────
build_boa() {
step "BOA (baseline v0.21)"
local boa_dir="$REPO_ROOT/baseline-boa"
if [ ! -d "$boa_dir" ]; then
warn "baseline-boa/ 不存在,跳过"
return 0
fi
if [ -f "$boa_dir/target/release/boa" ]; then
info "BOA 已构建"
return 0
fi
info "编译 BOA (Rust --release, 约 5-10 分钟)..."
cd "$boa_dir"
if cargo build --release -p boa_cli --bin boa 2>&1 | tail -5; then
info "BOA 编译成功"
else
warn "BOA 编译失败,跳过 (不影响整体)"
fi
cd "$SCRIPT_DIR"
}
# ── JerryScript ──────────────────────────────────────────────────────────
build_jerryscript() {
step "JerryScript"
local jerry_dir="$REPO_ROOT/baseline-jerryscript"
if [ ! -d "$jerry_dir" ]; then
warn "baseline-jerryscript/ 不存在,跳过"
return 0
fi
if [ -f "$jerry_dir/build/bin/MinSizeRel/jerry" ] || [ -f "$jerry_dir/build/bin/MinSizeRel/jerry.exe" ]; then
info "JerryScript 已构建"
return 0
fi
info "编译 JerryScript (CMake, 约 1 分钟)..."
mkdir -p "$jerry_dir/build"
cd "$jerry_dir/build"
if command -v cmake &>/dev/null; then
cmake .. -DCMAKE_BUILD_TYPE=MinSizeRel -DJERRY_ERROR_MESSAGES=ON -DJERRY_LOGGING=OFF 2>&1 | tail -3
if make -j"$(nproc 2>/dev/null || echo 4)" 2>&1 | tail -5; then
info "JerryScript 编译成功"
else
warn "JerryScript 编译失败,跳过 (不影响整体)"
fi
else
warn "cmake 未安装,跳过 JerryScript"
fi
cd "$SCRIPT_DIR"
}
# ── OxideJS ────────────────────────────────────────────────────────────
build_oxide() {
step "OxideJS"
@@ -133,6 +183,8 @@ install_deps "$pm" "$icmd" "$ucmd" $(map_pkgs "$pm")
ensure_rust
ensure_python
build_quickjs
build_boa
build_jerryscript
build_oxide
ensure_test262