Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
08da0802
wa
项目概览
wa-lang
/
wa
10 个月 前同步成功
通知
68
Star
655
Fork
45
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
wa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
08da0802
编写于
6月 27, 2023
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善 MVP 目标定义
上级
14d79a0b
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
107 addition
and
7 deletion
+107
-7
internal/app/main.go
internal/app/main.go
+4
-7
internal/config/waos.go
internal/config/waos.go
+12
-0
internal/wazero/module.go
internal/wazero/module.go
+8
-0
internal/wazero/mvp.go
internal/wazero/mvp.go
+83
-0
未找到文件。
internal/app/main.go
浏览文件 @
08da0802
...
...
@@ -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
{
...
...
internal/config/waos.go
浏览文件 @
08da0802
...
...
@@ -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
}
internal/wazero/module.go
浏览文件 @
08da0802
...
...
@@ -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
...
...
internal/wazero/mvp.go
0 → 100644
浏览文件 @
08da0802
// 版权 @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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录