提交 08da0802 编写于 作者: chai2010's avatar chai2010

完善 MVP 目标定义

上级 14d79a0b
......@@ -38,7 +38,7 @@ func Main() {
cliApp.Flags = []cli.Flag{
&cli.StringFlag{
Name: "target",
Usage: "set target os (arduino|chrome|wasi)",
Usage: fmt.Sprintf("set target os (%s)", strings.Join(config.WaOS_List, "|")),
Value: config.WaOS_Default,
},
&cli.BoolFlag{
......@@ -54,10 +54,7 @@ func Main() {
}
cliApp.Before = func(c *cli.Context) error {
switch c.String("target") {
case "wasi", "arduino", "chrome":
// OK
default:
if !config.CheckWaOS(c.String("target")) {
fmt.Printf("unknown target: %s\n", c.String("target"))
os.Exit(1)
}
......@@ -141,7 +138,7 @@ func Main() {
Flags: []cli.Flag{
&cli.StringFlag{
Name: "target",
Usage: "set target os (wasi|arduino|chrome)",
Usage: fmt.Sprintf("set target os (%s)", strings.Join(config.WaOS_List, "|")),
Value: config.WaOS_Default,
},
&cli.StringFlag{
......@@ -166,7 +163,7 @@ func Main() {
},
&cli.StringFlag{
Name: "target",
Usage: "set target os (wasi|arduino|chrome)",
Usage: fmt.Sprintf("set target os (%s)", strings.Join(config.WaOS_List, "|")),
Value: config.WaOS_Default,
},
&cli.StringFlag{
......
......@@ -36,6 +36,7 @@ const (
WaOS_arduino = "arduino" // Arduino 平台
WaOS_chrome = "chrome" // Chrome 浏览器
WaOS_wasi = "wasi" // WASI 接口
WaOS_mvp = "mvp" // MVP 接口, 最小可用
)
// 体系结构类型
......@@ -61,6 +62,7 @@ var WaOS_List = []string{
WaOS_arduino,
WaOS_chrome,
WaOS_wasi,
WaOS_mvp,
}
// CPU 列表
......@@ -71,3 +73,13 @@ var WaArch_List = []string{
WaArch_riscv64,
WaArch_wasm,
}
// 检查 OS 值是否 OK
func CheckWaOS(os string) bool {
for _, x := range WaOS_List {
if x == os {
return true
}
}
return false
}
......@@ -156,6 +156,14 @@ func (p *Module) buildModule() error {
p.wazeroInitErr = err
return err
}
case config.WaOS_mvp:
if _, err = MvpInstantiate(p.wazeroCtx, p.wazeroRuntime); err != nil {
p.wazeroInitErr = err
return err
}
default:
return fmt.Errorf("unknown waos: %q", p.cfg.WaOS)
}
return nil
......
// 版权 @2022 凹语言 作者。保留所有权利。
package wazero
import (
"context"
"fmt"
"github.com/tetratelabs/wazero"
"github.com/tetratelabs/wazero/api"
"wa-lang.org/wa/internal/config"
)
func MvpInstantiate(ctx context.Context, rt wazero.Runtime) (api.Closer, error) {
return rt.NewHostModuleBuilder(config.WaOS_mvp).
// func waPrintI32(v: i32)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, v int32) {
fmt.Print(v)
}).
WithParameterNames("v").
Export("waPrintI32").
// func waPrintU32(v: u32)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, v uint32) {
fmt.Print(v)
}).
WithParameterNames("v").
Export("waPrintU32").
// func waPrintI64(v: i64)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, v int64) {
fmt.Print(v)
}).
WithParameterNames("v").
Export("waPrintI64").
// func waPrintU64(v: u64)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, v uint64) {
fmt.Print(v)
}).
WithParameterNames("v").
Export("waPrintU64").
// func waPrintF32(v: f32)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, v float32) {
fmt.Print(v)
}).
WithParameterNames("v").
Export("waPrintF32").
// func waPrintF64(v: f64)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, v float64) {
fmt.Print(v)
}).
WithParameterNames("v").
Export("waPrintF64").
// func waPrintRune(ch: i32)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, ch uint32) {
fmt.Printf("%c", rune(ch))
}).
WithParameterNames("ch").
Export("waPrintRune").
// func waPuts(ptr: i32, len: i32)
NewFunctionBuilder().
WithFunc(func(ctx context.Context, m api.Module, ptr, len uint32) {
bytes, _ := m.Memory().Read(ctx, ptr, len)
fmt.Print(string(bytes))
}).
WithParameterNames("ptr", "len").
Export("waPuts").
// Done
Instantiate(ctx, rt)
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册