Skip to content

Commit 7530629

Browse files
authored
Fix std feature in wasm-encoder (#1961)
* Fix `std` feature in `wasm-encoder` * Update Cargo.lock * Some updates * Fix `std` features * Test `no_std` works for `wasm-encoder` in CI
1 parent b237793 commit 7530629

18 files changed

Lines changed: 61 additions & 47 deletions

File tree

.github/workflows/main.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ jobs:
259259
- run: cargo check --no-default-features -p wat --features component-model
260260
- run: cargo check --no-default-features -p wat --features dwarf
261261
- run: cargo check --no-default-features -p wasm-encoder
262+
- run: cargo check --no-default-features -p wasm-encoder --target x86_64-unknown-none
263+
- run: cargo check --no-default-features -p wasm-encoder --target x86_64-unknown-none --features wasmparser,component-model
262264
- run: cargo check --no-default-features -p wasm-encoder --features component-model
263265
- run: cargo check --no-default-features -p wasm-encoder --features wasmparser
264266
- run: cargo check --no-default-features -p wasm-smith

Cargo.lock

Lines changed: 8 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ comfy-table = { version = "7.1.3", default-features = false }
7878
criterion = { version = "0.5.1", default-features = false }
7979
env_logger = "0.11"
8080
indexmap = { version = "2.7.0", default-features = false }
81-
leb128 = "0.2.4"
81+
leb128fmt = { version = "0.1.0", default-features = false }
8282
libfuzzer-sys = "0.4.0"
8383
log = "0.4.17"
8484
num_cpus = "1.13"
@@ -103,12 +103,12 @@ gimli = "0.30.0"
103103
id-arena = "2"
104104

105105
wasm-compose = { version = "0.224.0", path = "crates/wasm-compose" }
106-
wasm-encoder = { version = "0.224.0", path = "crates/wasm-encoder", default-features = false, features = ["std"] }
106+
wasm-encoder = { version = "0.224.0", path = "crates/wasm-encoder", default-features = false }
107107
wasm-metadata = { version = "0.224.0", path = "crates/wasm-metadata" }
108108
wasm-mutate = { version = "0.224.0", path = "crates/wasm-mutate" }
109109
wasm-shrink = { version = "0.224.0", path = "crates/wasm-shrink" }
110110
wasm-smith = { version = "0.224.0", path = "crates/wasm-smith" }
111-
wasmparser = { version = "0.224.0", path = "crates/wasmparser", default-features = false, features = ['std', 'simd'] }
111+
wasmparser = { version = "0.224.0", path = "crates/wasmparser", default-features = false, features = ['simd'] }
112112
wasmprinter = { version = "0.224.0", path = "crates/wasmprinter", default-features = false }
113113
wast = { version = "224.0.0", path = "crates/wast", default-features = false }
114114
wat = { version = "1.224.0", path = "crates/wat", default-features = false }
@@ -129,7 +129,7 @@ wat = { workspace = true, features = ['dwarf', 'component-model'] }
129129
termcolor = { workspace = true }
130130

131131
# Dependencies of `validate`
132-
wasmparser = { workspace = true, optional = true, features = ['component-model', 'simd'] }
132+
wasmparser = { workspace = true, optional = true, features = ['std', 'component-model', 'simd'] }
133133
rayon = { workspace = true, optional = true }
134134
bitflags = { workspace = true, optional = true }
135135

@@ -150,7 +150,7 @@ wasm-shrink = { workspace = true, features = ["clap"], optional = true }
150150
wasm-mutate = { workspace = true, features = ["clap"], optional = true }
151151

152152
# Dependencies of `strip`
153-
wasm-encoder = { workspace = true, optional = true }
153+
wasm-encoder = { workspace = true, features = ["std"], optional = true }
154154
regex = { version = "1.6.0", optional = true }
155155

156156
# Dependencies of `compose`

crates/c-api/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ arbitrary = { workspace = true, features = ["derive"] }
2525
wasm-mutate = { workspace = true }
2626
wasm-shrink = { workspace = true }
2727
wasm-smith = { workspace = true }
28-
wasmparser = { workspace = true }
28+
wasmparser = { workspace = true, features = ["std"] }
2929
wasmprinter = { workspace = true }
3030
wast = { workspace = true }
3131
wat = { workspace = true }

crates/wasm-compose/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ workspace = true
1616

1717
[dependencies]
1818
wat = { workspace = true }
19-
wasm-encoder = { workspace = true, features = ['wasmparser', 'component-model'] }
20-
wasmparser = { workspace = true, features = ['validate', 'component-model', 'features'] }
19+
wasm-encoder = { workspace = true, features = ['std', 'wasmparser', 'component-model'] }
20+
wasmparser = { workspace = true, features = ['std', 'validate', 'component-model', 'features'] }
2121
indexmap = { workspace = true, features = ["serde"] }
2222
anyhow = { workspace = true }
2323
serde = { workspace = true }

crates/wasm-encoder/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ all-features = true
2020
workspace = true
2121

2222
[dependencies]
23-
leb128 = { workspace = true }
23+
leb128fmt.workspace = true
2424

2525
# Enable this dependency to get a bunch of `From<wasmparser::Foo> for
2626
# wasm_encoder::Foo` impls.
@@ -36,7 +36,7 @@ wasmprinter = { workspace = true }
3636
default = ['std', 'component-model']
3737

3838
# A feature which enables implementations of `std::error::Error` as appropriate.
39-
std = []
39+
std = ["wasmparser?/std"]
4040

4141
# On-by-default: conditional support for emitting components in addition to
4242
# core modules.

crates/wasm-encoder/src/core/code.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4001,10 +4001,7 @@ impl ConstExpr {
40014001
if prefix != 0xd2 {
40024002
return None;
40034003
}
4004-
leb128::read::unsigned(&mut &self.bytes[1..])
4005-
.ok()?
4006-
.try_into()
4007-
.ok()
4004+
leb128fmt::decode_uint_slice::<u32, 32>(&self.bytes[1..], &mut 0).ok()
40084005
}
40094006
}
40104007

crates/wasm-encoder/src/lib.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,29 @@ impl Encode for usize {
135135

136136
impl Encode for u32 {
137137
fn encode(&self, sink: &mut Vec<u8>) {
138-
leb128::write::unsigned(sink, (*self).into()).unwrap();
138+
let (value, pos) = leb128fmt::encode_u32(*self).unwrap();
139+
sink.extend_from_slice(&value[..pos]);
139140
}
140141
}
141142

142143
impl Encode for i32 {
143144
fn encode(&self, sink: &mut Vec<u8>) {
144-
leb128::write::signed(sink, (*self).into()).unwrap();
145+
let (value, pos) = leb128fmt::encode_s32(*self).unwrap();
146+
sink.extend_from_slice(&value[..pos]);
145147
}
146148
}
147149

148150
impl Encode for u64 {
149151
fn encode(&self, sink: &mut Vec<u8>) {
150-
leb128::write::unsigned(sink, *self).unwrap();
152+
let (value, pos) = leb128fmt::encode_u64(*self).unwrap();
153+
sink.extend_from_slice(&value[..pos]);
151154
}
152155
}
153156

154157
impl Encode for i64 {
155158
fn encode(&self, sink: &mut Vec<u8>) {
156-
leb128::write::signed(sink, *self).unwrap();
159+
let (value, pos) = leb128fmt::encode_s64(*self).unwrap();
160+
sink.extend_from_slice(&value[..pos]);
157161
}
158162
}
159163

@@ -200,8 +204,8 @@ where
200204
}
201205

202206
fn encoding_size(n: u32) -> usize {
203-
let mut buf = [0u8; 5];
204-
leb128::write::unsigned(&mut &mut buf[..], n.into()).unwrap()
207+
let (_value, pos) = leb128fmt::encode_u32(n).unwrap();
208+
pos
205209
}
206210

207211
fn encode_section(sink: &mut Vec<u8>, count: u32, bytes: &[u8]) {
@@ -214,6 +218,11 @@ fn encode_section(sink: &mut Vec<u8>, count: u32, bytes: &[u8]) {
214218
mod test {
215219
use super::*;
216220

221+
#[test]
222+
fn test_encoding_size() {
223+
assert_eq!(encoding_size(624485), 3);
224+
}
225+
217226
#[test]
218227
fn it_encodes_an_empty_module() {
219228
let bytes = Module::new().finish();

crates/wasm-metadata/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ workspace = true
1313
[dependencies]
1414
clap = { workspace = true, optional = true }
1515
anyhow = { workspace = true }
16-
wasmparser = { workspace = true, features = ['component-model', 'hash-collections'] }
17-
wasm-encoder = { workspace = true, features = ['component-model'] }
16+
wasmparser = { workspace = true, features = ['std', 'component-model', 'hash-collections'] }
17+
wasm-encoder = { workspace = true, features = ['std', 'component-model'] }
1818
indexmap = { workspace = true, features = ["serde"] }
1919
serde = { workspace = true }
2020
serde_derive = { workspace = true }

crates/wasm-mutate-stats/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ num_cpus = { workspace = true }
1414
rand = { workspace = true }
1515
wasm-mutate = { workspace = true }
1616
wasmprinter = { workspace = true }
17-
wasmparser = { workspace = true, features = ['validate'] }
17+
wasmparser = { workspace = true, features = ['std', 'validate'] }
1818
wasmtime = { workspace = true }
1919
env_logger = { workspace = true }
2020
itertools = "0.13.0"

0 commit comments

Comments
 (0)