bytecodealliance / wasmtime

A fast and secure runtime for WebAssembly
https://wasmtime.dev/
Apache License 2.0
15.24k stars 1.29k forks source link

Support nested vendored dependencies in `bindgen!` #9303

Open MarinPostma opened 2 weeks ago

MarinPostma commented 2 weeks ago

Thanks for filing a feature request! Please fill out the TODOs below.

Feature

It seems that the only way to import other packages right now is to vendor them, so I tried to do that by symlinking the dependee into the dependant deps folder (showing dirs only for conciseness):

 ❯ tree -d -l wit
wit
└── deps -> ../../wasi-http/wit
    └── deps
        ├── cli
        ├── clocks
        ├── filesystem
        ├── io
        ├── random
        └── sockets

Then i attempt to generate bindings like so:

bindgen!({
    path: "../adhoc/wit",
    with: {
        "wasi:http/proxy@0.2.1": http_proxy,
    }
});

and I get the following compile error:

error: failed to resolve directory while parsing WIT for path [/Users/mpostma/Documents/code/rust/wasm-experiments/adhoc/wit]

       Caused by:
           0: failed to parse dependency directory: /Users/mpostma/Documents/code/rust/wasm-experiments/adhoc/wit/deps
           1: failed to parse package: /Users/mpostma/Documents/code/rust/wasm-experiments/adhoc/wit/deps/deps
           2: no `package` header was found in any WIT file for this package

It seems to be because the second level of deps doesn't contain any WIT file, but only directories.

Benefit

I'm not sure what's the current plan, or the recommended way to deal with imports right now. I suspect that all of this will converge to a more streamlined experience, but until then, it would be nice if we could just symlink components as dependency for other components.

alexcrichton commented 2 weeks ago

Thanks for the report! The structure of the wit directory is mostly defined by the wasm-tools project at this time (and doesn't have the greatest documentation unfortunately). You might be interested in https://github.com/bytecodealliance/wasm-tools/issues/1461 and https://github.com/bytecodealliance/wasm-tools/issues/1462 as well.

Overall relaxing various bits of the wit directory are not the easiest thing to do as it needs to be balanced with the variety of consumers of WIT. If possible features like https://github.com/bytecodealliance/wasmtime/pull/9288 are intended to help with this, though.

MarinPostma commented 2 weeks ago

thanks @alexcrichton 🙏