diff --git a/Makefile b/Makefile index e5aea6c0161b07b2199bdad33d28de6ea542a407..384493c69ec235becb60c54fc36d4a41ecbed9c9 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,17 @@ # 版权 @2019 凹语言 作者。保留所有权利。 hello: - go run main.go run _examples/hello + CGO_ENABLED=0 go run main.go run _examples/hello hi: - go run main.go run _examples/hi + CGO_ENABLED=0 go run main.go run _examples/hi prime: - go run main.go run _examples/prime + CGO_ENABLED=0 go run main.go run _examples/prime wasm: - go run main.go ssa _examples/hi - go run main.go wasm _examples/hi + CGO_ENABLED=0 go run main.go ssa _examples/hi + CGO_ENABLED=0 go run main.go wasm _examples/hi wasm2wat a.out.wasm -o a.out.wast cd ./tools/wa-wasmer-run && go run main.go -file=../../a.out.wasm diff --git a/README.md b/README.md index 4e97517937e644509fd91b50e138bd78b3d8dc87..c4b52e7e91b3cbeca2b4a1a6a5caf7fce87b013b 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,15 @@ +------------+ ``` -安装和测试: +安装和测试(默认使用了 CGO,可选择关闭): 1. 安装 [Clang](https://clang.llvm.org), 确保本地 `clang` 命令有效 2. `go install github.com/wa-lang/wa@latest` 3. `wa init -name=_examples/hi` 4. `wa run _examples/hi` +> 如果本地安装了 `wabt` 工具,可以通过设置 `CGO_ENABLED` 环境变量为 `0` 关闭 CGO 特性,提升 `go build` 编译性能。 + > 项目尚处于原型开源阶段,如果有共建和PR需求请 [入群交流](https://wa-lang.org/community/index.html)。 > [VS Code 插件支持](https://marketplace.visualstudio.com/items?itemName=xxxDeveloper.vscode-wa) diff --git a/internal/3rdparty/float/binary128/gen.go b/internal/3rdparty/float/binary128/gen.go index e34a45d2330d958bb71572711a8c781e5b90975e..636947eaabf5a9b0bad3ebee456b2bd564695a31 100644 --- a/internal/3rdparty/float/binary128/gen.go +++ b/internal/3rdparty/float/binary128/gen.go @@ -4,6 +4,7 @@ package main import ( + "errors" "flag" "fmt" "log" @@ -13,7 +14,6 @@ import ( "os" "sort" "text/template" - "errors" ) func main() { diff --git a/internal/wabt/wabt_nocgo.go b/internal/3rdparty/wabt/wabt_nocgo.go similarity index 55% rename from internal/wabt/wabt_nocgo.go rename to internal/3rdparty/wabt/wabt_nocgo.go index 72d4dada1c0cd4093ce2db405856108d4909d13c..6288d4df6b008340f82054f0e1fda32f420422a5 100644 --- a/internal/wabt/wabt_nocgo.go +++ b/internal/3rdparty/wabt/wabt_nocgo.go @@ -1,30 +1,31 @@ // 版权 @2022 凹语言 作者。保留所有权利。 -//go:build !wabt_cgo -// +build !wabt_cgo +//go:build !cgo +// +build !cgo package wabt import ( "fmt" - "os" "os/exec" "runtime" ) -func Wat2WasmCmd(args ...string) { +const Version = "1.0.29" + +func Wat2WasmCmd(args ...string) error { exe := "wat2wasm" if runtime.GOOS == "windows" { exe += ".exe" } cmd := exec.Command(exe, args...) stdoutStderr, err := cmd.CombinedOutput() + if len(stdoutStderr) != 0 { + fmt.Printf("%s\n", stdoutStderr) + } if err != nil { - if len(stdoutStderr) != 0 { - fmt.Printf("%s\n", stdoutStderr) - } - fmt.Printf("ERROR: %v\n", err) - os.Exit(1) + return err } - fmt.Printf("%s\n", stdoutStderr) + + return nil } diff --git a/internal/wabt/wabt_cgo.go b/internal/wabt/wabt_cgo.go deleted file mode 100644 index ca64d17cc7b04cb91ec4f2576521f2c60c5bed0e..0000000000000000000000000000000000000000 --- a/internal/wabt/wabt_cgo.go +++ /dev/null @@ -1,22 +0,0 @@ -// 版权 @2022 凹语言 作者。保留所有权利。 - -// go build -tags="wabt_cgo" - -//go:build wabt_cgo -// +build wabt_cgo - -package wabt - -import ( - "fmt" - "os" - - "github.com/wa-lang/wa/internal/3rdparty/wabt" -) - -func Wat2WasmCmd(args ...string) { - if err := wabt.Wat2WasmCmd(args...); err != nil { - fmt.Printf("ERROR: %v\n", err) - os.Exit(1) - } -} diff --git a/main.go b/main.go index 018edbe24029aaba9bc95a5ba70b326ce91ed5d5..33b2845b285f2e7035778b772c91946984f24c88 100644 --- a/main.go +++ b/main.go @@ -11,9 +11,9 @@ import ( "runtime/debug" "github.com/wa-lang/wa/internal/3rdparty/cli" + "github.com/wa-lang/wa/internal/3rdparty/wabt" "github.com/wa-lang/wa/internal/app" "github.com/wa-lang/wa/internal/config" - "github.com/wa-lang/wa/internal/wabt" ) func main() { @@ -270,11 +270,15 @@ func main() { }, }, { - Name: "wat2wasm", - Usage: "convert wat to the wasm", + Name: "wat2wasm", + Usage: "convert wat to the wasm", Hidden: true, Action: func(c *cli.Context) error { - wabt.Wat2WasmCmd(c.Args().Slice()...) + err := wabt.Wat2WasmCmd(c.Args().Slice()...) + if err != nil { + fmt.Println(err) + os.Exit(1) + } return nil }, },