Skip to content

add --include-versions option#38

Open
dicej wants to merge 5 commits intobytecodealliance:mainfrom
dicej:add-include-versions-option
Open

add --include-versions option#38
dicej wants to merge 5 commits intobytecodealliance:mainfrom
dicej:add-include-versions-option

Conversation

@dicej
Copy link
Copy Markdown

@dicej dicej commented Mar 30, 2026

See bytecodealliance/wit-bindgen#1574 for details.

Note that this PR builds on #37 and should not be merged until after that is merged.

dicej added 5 commits March 30, 2026 13:50
This adds two new features:

- Multiple `--world` options are accepted, in which case the worlds will be
  merged into a single world for building, testing, or bindings generation.

- In addition to any worlds and/or WIT paths specified explicitly via CLI
  options, `componentize-go` will use `go list` to scan the current module and
  its dependencies, looking for files named `componentize-go.toml` in their
  source trees.  For each such file found, any worlds and/or WIT paths
  referenced therein will be added to the respective lists.  This behavior can
  be disabled using the `--ignore-toml-files` option if desired.

In combination, these options make it easier to use multiple SDKs or other
libraries which contain `wit-bindgen-go`-generated code.

Note that I've also removed the `wat` dependency because `go build` always
generates a binary Wasm file, so no need to check for or parse WAT.

Fixes bytecodealliance#28
…via CLI

Previously, we'd union all the worlds specifiec via the CLI _and_ via
`componentize-go.toml` files, but that can get very confusing for the user.  Now
we'll only use the toml file ones as a default if none are specified via the
CLI.
This was only used for the build subcommand, but all subcommands potentially
need to know where the go module is e.g. to locate `componentize-go.toml` files,
so we should either promote it to be a subcommand-independent option or drop it
and require that `componentize-go` be run in the directory containing the module
of interest.  I chose the latter in this case, but we could certainly revisit
that.
There are three scenarios where we might need to do this:

- Go is not installed at all
- Go is installed, but the version is too old
- Go is installed and the version is new enough, but the target world uses async features and the installed Go lacks [the required patch](golang/go#76775)

In any of those cases, we'll download a suitable version, install it in the
current user's cache directory, and run it from there.

This also adds a new `--export-pkg-name` parameter corresponding to
bytecodealliance/wit-bindgen#1572.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant