bytecodealliance / cargo-component

A Cargo subcommand for creating WebAssembly components based on the component model proposal.
Apache License 2.0
450 stars 53 forks source link

Versions of wit-bindgen don't match #327

Open jsturtevant opened 1 month ago

jsturtevant commented 1 month ago

The version in the project and the version the binding create are off:

cargo component --version
cargo-component-component 0.15.0

cargo component new --lib test-version
cd test-version

cat Cargo.toml
[package]
name = "test-version"
version = "0.1.0"
edition = "2021"

[dependencies]
wit-bindgen-rt = { version = "0.29.0", features = ["bitflags"] }

[lib]
crate-type = ["cdylib"]

[profile.release]
codegen-units = 1
opt-level = "s"
debug = false
strip = true
lto = true

[package.metadata.component]
package = "component:test-version"

[package.metadata.component.dependencies]
cargo component build 

 head src/bindings.rs
// Generated by `wit-bindgen` 0.25.0. DO NOT EDIT!
// Options used:
#[doc(hidden)]
#[allow(non_snake_case)]
pub unsafe fn _export_hello_world_cabi<T: Guest>() -> *mut u8 {
    #[cfg(target_arch = "wasm32")]
    _rt::run_ctors_once();
    let result0 = T::hello_world();
    let ptr1 = _RET_AREA.0.as_mut_ptr().cast::<u8>();
    let vec2 = (result0.into_bytes()).into_boxed_slice();

Notice the versions are not the same (wit-bindgen-rt = { version = "0.29.0", and // Generated bywit-bindgen0.25.0. DO NOT EDIT!

This doesn't seem to cause a problem with current versions, but I think it could?

primoly commented 1 month ago

The new command invokes cargo add --quiet wit-bindgen-rt --features bitflags^1, causing cargo to look for the newest version of that crate (currently 0.29.0), but cargo component itself still uses 0.25.0 of wit-bindgen-rust and wit-bindgen-core^2.