Skip to content

Commit 16994da

Browse files
authored
feat: add guest binding generator for TinyGo/Go (#471)
* created wit-bindgen-gen-guest-go crate and added to the clap CLI Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * rewrote import and export using a more generic conversion method Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: records working Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * simply code Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: tuple works Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: list works Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: string works Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: option works Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * implemented result type Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: result works Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: result option work Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * added codegen for go bindgen. Further work needs to pass all the tests Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * get more tests passed, including conventions Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * now flags and alias are working Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: implemented multi-return Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> cargo clippy Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: implemented union, enum and variantss Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * rewrite lower's Result for imports * avoid Go keywords conflict with wit's variable names Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: all codegen tests passed. The issue with "fragment is larger than or outside of variable" is a known issue and has been resolved in tinygo v0.26. However, tinygo v0.26 introduces a regression for wasm/wasi target where the compiler panics when size 0 passed to malloc. See tinygo-org/tinygo#3303 for details Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * refactor: add gen-guest-c dependency to gen-guest-go. Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * cargo lock file Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: passed new tests associated cross-interface feature Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * formatted code Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * gh action: installed tinygo Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * install go 1.19 Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * generate C files together with Go files Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * added option-result test Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * fix a typo in wit-bindgen-cli doc Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * updated README to include gen-guest-go Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * removed option-result.wit Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * fix the broken CLI Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * added go to runtime test Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * free C parameters and variables Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * removed memory free for return variables in export and invoke arguments in import Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * implemented lists Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * fixed a small bug around lowering nested option types Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * improve readability of code Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * changed the variant's package name to the world's name. Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * milestone: re-implement results Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * Fixed a small reference issue for lowering result * re-implement variants and unions Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * fixed a few small bugs around variants and union types. Added variant runtime tests Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * turn off gc-leaking in tinygo 0.26 Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * simplify code and add multi-return to lowering * Added runtime tests for list, number and variant * Added flavorful runtime test * Added tests for many_aguments, records and smoke * Added strings and unions runtime tests * removed http from runtime test Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * added go bindgen build step to ci * updated tinygo to 0.27. All tests should pass now Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * fixed go version to 1.20 instead of 1.2 Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * disable string test because unicode hasn't been handled properly Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * deleted wasm abi flag * merged main Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * Move go's files to it's own subfolder * move C gen files to its own folder Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * update go from 1.19 to 1.20 Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * changed tinygo crate version to 0.1.0 Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * diable variants test for go Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * Fixed a missing argument to encode * Fix referring to foreign imported paths in go Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * disable lift-foreign tests for now Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> * run rustfmt Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com> --------- Signed-off-by: Jiaxiao Zhou <jiazho@microsoft.com>
1 parent 751fd66 commit 16994da

File tree

18 files changed

+4011
-163
lines changed

18 files changed

+4011
-163
lines changed

.github/workflows/main.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,19 @@ jobs:
5252
with:
5353
java-version: '18'
5454
distribution: 'adopt'
55+
- uses: actions/setup-go@v3
56+
with:
57+
go-version: '1.20'
58+
- uses: acifani/setup-tinygo@v1
59+
with:
60+
tinygo-version: 0.27.0
5561
- run: cargo test --workspace
5662
- run: cargo build
5763
- run: cargo build --no-default-features
5864
- run: cargo build --no-default-features --features rust
5965
- run: cargo build --no-default-features --features c
6066
- run: cargo build --no-default-features --features teavm-java
67+
- run: cargo build --no-default-features --features go
6168
- run: cargo build --no-default-features --features markdown
6269

6370

Cargo.lock

Lines changed: 37 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ wit-bindgen-core = { path = 'crates/bindgen-core', version = '0.3.0' }
3939
wit-bindgen-gen-guest-c = { path = 'crates/gen-guest-c', version = '0.3.0' }
4040
wit-bindgen-gen-guest-rust = { path = "crates/gen-guest-rust", version = "0.3.0" }
4141
wit-bindgen-gen-guest-teavm-java = { path = 'crates/gen-guest-teavm-java', version = '0.3.0' }
42+
wit-bindgen-gen-guest-go = { path = 'crates/gen-guest-go', version = '0.1.0' }
4243
wit-bindgen-gen-markdown = { path = 'crates/gen-markdown', version = '0.3.0' }
4344
wit-bindgen-gen-rust-lib = { path = 'crates/gen-rust-lib', version = '0.3.0' }
4445
wit-bindgen = { path = 'crates/guest-rust', version = '0.3.0', default-features = false }
@@ -55,15 +56,18 @@ wit-bindgen-gen-guest-rust = { workspace = true, features = ['clap'], optional =
5556
wit-bindgen-gen-guest-c = { workspace = true, features = ['clap'], optional = true }
5657
wit-bindgen-gen-markdown = { workspace = true, features = ['clap'], optional = true }
5758
wit-bindgen-gen-guest-teavm-java = { workspace = true, features = ['clap'], optional = true }
59+
wit-bindgen-gen-guest-go = { workspace = true, features = ['clap'], optional = true }
5860
wat = { workspace = true }
5961
wit-component = { workspace = true }
62+
wasm-encoder = { workspace = true }
6063

6164
[features]
62-
default = ['c', 'rust', 'markdown', 'teavm-java']
65+
default = ['c', 'rust', 'markdown', 'teavm-java', 'go']
6366
c = ['dep:wit-bindgen-gen-guest-c']
6467
rust = ['dep:wit-bindgen-gen-guest-rust']
6568
markdown = ['dep:wit-bindgen-gen-markdown']
6669
teavm-java = ['dep:wit-bindgen-gen-guest-teavm-java']
70+
go = ['dep:wit-bindgen-gen-guest-go']
6771

6872
[dev-dependencies]
6973
heck = { workspace = true }

0 commit comments

Comments
 (0)