Files
hakorune/tools/selfhost/README.md
nyash-codex 7ca7f646de Phase 25.1b: Step2完了(FuncBodyBasicLowerBox導入)
Step2実装内容:
- FuncBodyBasicLowerBox導入(defs専用下請けモジュール)
- _try_lower_local_if_return実装(Local+単純if)
- _inline_local_ints実装(軽い正規化)
- minimal lowers統合(Return/BinOp/IfCompare/MethodArray系)

Fail-Fast体制確立:
- MirBuilderBox: defs_onlyでも必ずタグ出力
- [builder/selfhost-first:unsupported:defs_only]
- [builder/selfhost-first:unsupported:no_match]

Phase構造整備:
- Phase 25.1b README新設(Step0-3計画)
- Phase 25.2b README新設(次期計画)
- UsingResolverBox追加(using system対応準備)

スモークテスト:
- stage1_launcher_program_to_mir_canary_vm.sh追加

Next: Step3 LoopForm対応

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 22:32:13 +09:00

86 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Hybrid Selfhost Build (80/20)
Purpose
- Provide a minimal, fast path to compile Hako source via Hakorune StageB to Program(JSON v0), and optionally run it via CoreDirect (inproc).
- Future: add MIR emit and ny-llvmc EXE build in small increments.
Script
- tools/selfhost/selfhost_build.sh
- --in <file.hako>: input Hako source
- --json <out.json>: write Program(JSON v0); default: /tmp/hako_stageb_$$.json
- --mir <out.json>: emit MIR(JSON) from source (runner path)
- --exe <out>: build native executable via ny-llvmc (llvmlite harness)
- --run: run via GateC/Core Direct (inproc). Exit code mirrors program return.
- Env:
- NYASH_BIN: path to hakorune/nyash binary (auto-detected)
- NYASH_ROOT: repo root (auto-detected)
- HAKO_USE_BUILDBOX=1: use BuildBox for emit-only (no run/exe)
Examples
```bash
# Emit JSON only (StageB)
tools/selfhost/selfhost_build.sh --in apps/demo/main.hako --json /tmp/demo.json
# Run and use exit code
tools/selfhost/selfhost_build.sh --in apps/demo/return7.hako --run; echo $?
```
Notes
- StageB emit uses either the StageB entry or BuildBoxHAKO_USE_BUILDBOX=1 for emit-only
- Runner executes CoreDirect in-proc under HAKO_CORE_DIRECT_INPROC=1.
- For heavier cases (bundles/alias/require), keep StageB canaries optin in quick profile.
---
Stage1 Selfhost Binary (Phase 25.1 — initial wiring)
Purpose
- Provide a concrete Stage1 binary (`hakorune`) built from Hako sources.
- Separate the Rust bootstrap binary (Stage0, `nyash`) from the Hakorune selfhost binary at the build-script level.
Script
- tools/selfhost/build_stage1.sh
- Builds a Stage1 selfhost executable from a Nyash/Hako entry point.
- Current entry (default):
- `lang/src/runner/launcher.hako` — Stage1 CLI launcher (commands: emit program-json/mir-json, etc.).
- Output:
- `target/selfhost/hakorune` by default.
Usage
```bash
# Build Stage1 selfhost binary with defaults
tools/selfhost/build_stage1.sh
# Custom output path
tools/selfhost/build_stage1.sh --out /tmp/hakorune-dev
# Custom entry (experimental)
tools/selfhost/build_stage1.sh --entry apps/selfhost-minimal/main.hako --out /tmp/hako_min
```
How it works
- Pipeline:
1) StageB + MirBuilder:
- `tools/hakorune_emit_mir.sh <entry.hako> <mir.json>`
2) LLVM EXE build:
- `tools/ny_mir_builder.sh --in <mir.json> --emit exe -o <exe>`
- The Rust binary (Stage0) is resolved via the existing helpers inside `hakorune_emit_mir.sh` / `ny_mir_builder.sh`:
- Prefers `target/release/hakorune` when present.
- Falls back to `target/release/nyash` otherwise.
Notes
- This Stage1 binary is a minimal Ny Executor and not yet a full CLI replacement.
- Full CLI / mode selection for Stage1 will be implemented in later phases; this script focuses on establishing the binary layout and build wiring.
Helper — Stage1 CLI Runner
- `tools/selfhost/run_stage1_cli.sh`
- Wraps a Stage1 binary (default `target/selfhost/hakorune`) with the required runtime env:
- `NYASH_NYRT_SILENT_RESULT=1`Result 行を抑止して JSON stdout を維持)
- `NYASH_DISABLE_PLUGINS=1`, `NYASH_FILEBOX_MODE=core-ro`FileBox などのコア実装を強制)
- Pass arguments verbatim to the Stage1 CLI:
```bash
tools/selfhost/run_stage1_cli.sh emit program-json apps/tests/minimal.hako
tools/selfhost/run_stage1_cli.sh --bin /tmp/hakorune-dev emit mir-json apps/tests/minimal.hako
```
- Use this helper (or set the env vars manually) whenever CLI output is consumed by scripts, so that stdout matches llvmlite harness expectations.