diff --git a/Cargo.lock b/Cargo.lock index e162aad8860..13b381ee76e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4863,6 +4863,7 @@ dependencies = [ "parity-wasm", "pathdiff", "regex", + "rustc_version", "thiserror", "toml 0.8.12", "wabt", diff --git a/Cargo.toml b/Cargo.toml index 6e6a14e059f..b2af524a9b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -454,11 +454,12 @@ libfuzzer-sys = "0.4" # util page_size = { version = "0.6", default-features = false } # pallets/gear pathdiff = { version = "0.2.1", default-features = false } # utils/wasm-builder rand_pcg = "0.3.1" # pallets/gear +rustc_version = "0.4.0" # utils/wasm-builder schnorrkel = "0.9.1" # gcli scopeguard = { version = "1.2.0", default-features = false } # pallets/gear tabled = "0.10.0" # utils/regression-analysis thousands = "0.2.0" # utils/regression-analysis -toml = "0.8.12" # utils/wasm-builder +toml = "0.8.12" # utils/wasm-builder tracing = "0.1.40" # utils/node-loader tracing-appender = "0.2" # utils/node-loader tracing-subscriber = "0.3.18" # utils/node-loader diff --git a/utils/wasm-builder/Cargo.toml b/utils/wasm-builder/Cargo.toml index bcb1a8040eb..efd1bae6178 100644 --- a/utils/wasm-builder/Cargo.toml +++ b/utils/wasm-builder/Cargo.toml @@ -27,6 +27,7 @@ gear-wasm-instrument.workspace = true wasm-opt = { workspace = true, optional = true } wasmparser.workspace = true regex.workspace = true +rustc_version.workspace = true [dev-dependencies] wabt.workspace = true diff --git a/utils/wasm-builder/src/crate_info.rs b/utils/wasm-builder/src/crate_info.rs index 55d78139df6..bc4a0acffa0 100644 --- a/utils/wasm-builder/src/crate_info.rs +++ b/utils/wasm-builder/src/crate_info.rs @@ -86,11 +86,21 @@ impl CrateInfo { // // see also https://doc.rust-lang.org/reference/linkage.html let validated_lib = |ty: &String| ty == "lib" || ty == "rlib"; + let pkg_snake_case_name = pkg.name.replace('-', "_"); + + // Check for rustc version. See https://github.com/rust-lang/cargo/pull/12783 + let compatible = rustc_version::version()?.lt(&rustc_version::Version::parse("1.79.0")?); + let _ = pkg .targets .iter() .find(|target| { - target.name.eq(&pkg.name) && target.crate_types.iter().any(validated_lib) + if compatible { + target.name.eq(&pkg.name) && target.crate_types.iter().any(validated_lib) + } else { + target.name.eq(&pkg_snake_case_name) + && target.crate_types.iter().any(validated_lib) + } }) .ok_or(BuilderError::CrateTypeInvalid)?;