Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
wit-component: implement a tool to create WebAssembly components. (#183)
* wit-component: initial implementation. This commit provides the initial implementation for the `wit-component` tool. The tool is responsible for converting a core module implementing the canonical ABI into a component based on the WebAssembly component model proposal. Users provide the tool with the interfaces to be exported or imported by the component in `wit` format. The output of the tool is a component file. The tool validates that the core module is satisfied with the given imports and also exports the provided interfaces. The output component is also verified with the validator from `wasmparser`. * wit-component: add more tests. This commit adds a test to encode an interface, decode the bytes using `wasmprinter`, and then compare the output with a baseline wat file. It also adds a `simple` test case for encoding components where a component exports a single default interface. * wit-component: add more component tests. This commit adds more tests to `wit-component` for component encoding. * wit-component: add error handling test cases. This commit adds several test cases for validation of the module that will be encoded as a component. * wit-component: be smarter about canonical option encoding. This commit only adds an encoding option if the function signatures contain strings. It also only adds the `into` option only if the function signature requires it. Added tests for lifting and lowering of various function signatures to ensure the canonical options emitted are correct. * wit-component: update and better doc test cases. This commit updates the documentation for the tests in `wit-component` and restructures the interface encoding tests directory layout to match that of the component encoding tests. * wit-component: update test baseline for new wasmprinter. This commit updates wasmprinter and the test baselines now that it correctly prints outer aliases. * wit-component: update assert_eq! for better diff printing. The `pretty_assertions` crate prints a nice diff for `assert_eq!` failures, but the tests were reversing left and right to make it more confusing when conceptually seeing changes from the baseline. This commit swaps the two arguments to `assert_eq!` so that left is the baseline and right is the output of the test. * wit-component: give names to one of the test core modules. This commit adds some names to one of the test module's canonical definitions. This helps to test that the names survive encoding and are also present when printed. * wit-component: add an import and export test case. This commit adds a test to cover both importing and exporting interfaces from the same component. Fixes a bug where importing functions wasn't contributing to the function type list. * wit-component: use type information from wasmparser for validation. This commit uses the type information returned from wasmparser for the validation of the core module. It also reduces the complexity of parsing the core module by using methods provided by wasmparser. * wit-component: code review feedback changes. Various code review feedback changes. * wit-component: be smarter about import lowerings. This commit changes how imports are lowered. Previously, the tool used indirect lowerings for all imports, even if the import didn't need the `into` option. Now such lowerings are lowered before the inner core module is instantiated and directly given as an argument. Additionally, if there are indirect lowerings to perform, at most two additional modules are encoded: a module storing a table for only the indirect lowerings and another that initializes the table once the core module has been instantiated.
- Loading branch information
1 parent
f5eed0f
commit 8929a90
Showing
82 changed files
with
3,323 additions
and
411 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
use clap::Parser; | ||
use wit_component::cli::WitComponentApp; | ||
|
||
fn main() { | ||
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")) | ||
.format_target(false) | ||
.init(); | ||
|
||
if let Err(e) = WitComponentApp::parse().execute() { | ||
log::error!("{:?}", e); | ||
std::process::exit(1); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.