zesterer / chumsky

Write expressive, high-performance parsers with ease.
https://crates.io/crates/chumsky
MIT License
3.37k stars 143 forks source link

WebAssembly build error #622

Open baoyachi opened 1 month ago

baoyachi commented 1 month ago

build log:

➜  rust-demo git:(master) wasm-pack build --target bundler                           
[INFO]: 🎯  Checking for the Wasm target...
[INFO]: 🌀  Compiling to Wasm...
   Compiling cc v1.0.90
   Compiling version_check v0.9.4
   Compiling libc v0.2.153
   Compiling cfg-if v1.0.0
   Compiling once_cell v1.19.0
   Compiling zerocopy v0.7.32
   Compiling chumsky v1.0.0-alpha.7
   Compiling allocator-api2 v0.2.16
   Compiling unicode-ident v1.0.12
   Compiling demo v0.1.0 (~/rust-demo)
   Compiling ahash v0.8.11
   Compiling psm v0.1.21
   Compiling stacker v0.1.15
   Compiling hashbrown v0.14.3
error: failed to build archive: 'wasm32.o': section too large

The following warnings were emitted during compilation:

warning: psm@0.1.21: warning: /Library/Developer/CommandLineTools/usr/bin/ranlib: archive library: ~/rust-demo/target/wasm32-unknown-unknown/release/build/psm-e7819be911e6050d/out/libpsm_s.a the table of contents is empty (no object file members in the library define global symbols)

error: could not compile `psm` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
Error: Compiling your crate to WebAssembly failed
Caused by: Compiling your crate to WebAssembly failed
Caused by: failed to execute `cargo build`: exited with exit status: 101
  full command: cd "~/rust-demo" && "cargo" "build" "--lib" "--release" "--target" "wasm32-unknown-unknown"
➜  rust-demo git:(master)

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

[dependencies] chumsky = "1.0.0-alpha.6"

zesterer commented 1 month ago

It's difficult to determine what's going on here, but this line

error: failed to build archive: 'wasm32.o': section too large

Implies that perhaps too much code was being generated (although I'm not sure why that would be the case). Are you compiling with optimisations enabled?

baoyachi commented 1 month ago

It's difficult to determine what's going on here, but this line

error: failed to build archive: 'wasm32.o': section too large

Implies that perhaps too much code was being generated (although I'm not sure why that would be the case). Are you compiling with optimisations enabled?

I just use command:wasm-pack build --target bundler

zesterer commented 1 month ago

This seems much more likely to be an issue with wasm-pack than chumsky, I'd recommend asking on the relevant GitHub repo instead.

toadslop commented 3 weeks ago

Try building in release and see if the issue persists. In a project that I was working on, I found that the debug build included type information that was larger than some limitation in the wasm parser. When I built in release mode, that type information wasn't included, and so it worked. Its obviously not ideal, but at least its a workaround until a final solution is implemented.

zesterer commented 3 weeks ago

An alternative there might be to just skip including that debug information:

[profile.dev]
debug = false

Obviously this is very non-ideal. I can't think of a good way to strip that information for specifically chumsky code though. You can declare crate-specific debug settings, but since chumsky is basically all generic code, it'll get inlined at the use site and probably won't be counted as code for chumsky-the-crate any longer.