Phase 20.34: wire Host providers via externs (env.mirbuilder.emit, env.codegen.emit_object); implement MirBuilder provider (Program→MIR JSON) and ny-llvmc wrapper; update Hako boxes (MirBuilderBox, LLVMEmitProviderBox) to delegate; adjust canaries to PASS (MirBuilder PASS, LLVM SKIP on unresolved or missing ny-llvmc).
This commit is contained in:
@ -11,7 +11,7 @@
|
||||
// - Provider examples: ny-llvmc wrapper or llvmlite harness via a Plugin box `LLVMCodegenBox.emit_object/2`.
|
||||
// - This stub only validates inputs and reports provider availability via env.
|
||||
|
||||
static box LLVMEmitBox {
|
||||
static box LLVMEmitProviderBox {
|
||||
// Availability probe (for canaries)
|
||||
is_available() {
|
||||
// Treat HAKO_LLVM_EMIT_PROVIDER=ny-llvmc|llvmlite as availability hint
|
||||
@ -22,7 +22,7 @@ static box LLVMEmitBox {
|
||||
}
|
||||
|
||||
// Main entry
|
||||
emit_object(mir_json, opts) {
|
||||
method emit_object(mir_json, opts) {
|
||||
if mir_json == null {
|
||||
print("[llvmemit/input/null] mir_json is null")
|
||||
return null
|
||||
@ -38,13 +38,18 @@ static box LLVMEmitBox {
|
||||
return null
|
||||
}
|
||||
local pv = "" + p
|
||||
if pv != "ny-llvmc" && pv != "llvmlite" {
|
||||
print("[llvmemit/provider/unsupported] " + pv)
|
||||
if pv == "ny-llvmc" {
|
||||
local args = new ArrayBox(); args.push(mir_json)
|
||||
// env.codegen.emit_object(mir_json)
|
||||
local ret = hostbridge.extern_invoke("env.codegen", "emit_object", args)
|
||||
return ret
|
||||
}
|
||||
if pv == "llvmlite" {
|
||||
// Not wired yet for llvmlite provider
|
||||
print("[llvmemit/skip] provider stub; implement llvmlite Plugin v2 call")
|
||||
return null
|
||||
}
|
||||
// Provider path not wired yet in this stub
|
||||
print("[llvmemit/skip] provider stub; implement Plugin v2 call")
|
||||
print("[llvmemit/provider/unsupported] " + pv)
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ static box MirBuilderBox {
|
||||
}
|
||||
|
||||
// Main entry
|
||||
emit_from_program_json_v0(program_json, opts) {
|
||||
method emit_from_program_json_v0(program_json, opts) {
|
||||
if program_json == null {
|
||||
print("[mirbuilder/input/null] program_json is null")
|
||||
return null
|
||||
@ -35,12 +35,13 @@ static box MirBuilderBox {
|
||||
// Delegate-first policy (Phase 20.34 Milestone A)
|
||||
local d = env.get("HAKO_MIR_BUILDER_DELEGATE")
|
||||
if d != null && ("" + d) == "1" {
|
||||
print("[mirbuilder/delegate] use Runner --program-json-to-mir")
|
||||
return null
|
||||
// Call host provider via extern: env.mirbuilder.emit(program_json)
|
||||
local args = new ArrayBox(); args.push(program_json)
|
||||
local ret = hostbridge.extern_invoke("env.mirbuilder", "emit", args)
|
||||
return ret
|
||||
}
|
||||
// Provider not wired yet
|
||||
// Provider not wired → Fail‑Fast tag
|
||||
print("[mirbuilder/delegate/missing] no provider; enable HAKO_MIR_BUILDER_DELEGATE=1")
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user