Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"recursive" Dependency Causes "section too large" Error When Compiling for wasm #13513

Closed
Tracked by #13815
berkaysynnada opened this issue Nov 21, 2024 · 8 comments
Closed
Tracked by #13815
Labels
bug Something isn't working

Comments

@berkaysynnada
Copy link
Contributor

berkaysynnada commented Nov 21, 2024

Describe the bug

I am encountering a problem when trying to compile wasmtest with the following command:

RUSTFLAGS="-C link-arg=--max-memory=4294967296" cargo build --release --target wasm32-unknown-unknown

The build fails with the following error:

error: failed to build archive at `.../target/wasm32-unknown-unknown/release/deps/libpsm-cc498cff4b514c30.rlib`: LLVM error: section too large

The following warnings were emitted during compilation:

warning: [email protected]: warning: ...

I suspect the issue is related to the psm dependency, and it is coming with recursive crate, which was introduced in #13310. I am unsure if this error can be resolved without removing or replacing this dependency.

To Reproduce

Go in datafusion/wasmtest and run cargo build --target wasm32-unknown-unknown

Expected behavior

It needs to compile

Additional context

I tried again after removing recursive dep, and it works successfully

@berkaysynnada berkaysynnada added the bug Something isn't working label Nov 21, 2024
@berkaysynnada berkaysynnada changed the title recursive Dependency Causes "section too large" Error When Compiling for wasm32-unknown-unknown "recursive" Dependency Causes "section too large" Error When Compiling for wasm32-unknown-unknown Nov 21, 2024
@berkaysynnada berkaysynnada changed the title "recursive" Dependency Causes "section too large" Error When Compiling for wasm32-unknown-unknown "recursive" Dependency Causes "section too large" Error When Compiling for wasm Nov 21, 2024
@Eason0729
Copy link
Contributor

I have try to reproduce the bug by either build wasmtest or build stacker with wasm32-unknown-unknown, but was unable to reproduce the issue.

Can you provide more information? (cargo and rustc version...)

@blaginin
Copy link
Contributor

This obviously doesn't resolve the issue, but rustwasm/wasm-pack#1381 (comment) fixed it for me

@berkaysynnada
Copy link
Contributor Author

I have applied the @blaginin suggestion:

berkaysahin@Berkays-MacBook-Pro wasmtest % clang --version                                        
Homebrew clang version 19.1.4
Target: arm64-apple-darwin23.4.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/19.1.4/bin
Configuration file: /opt/homebrew/etc/clang/arm64-apple-darwin23.cfg

@Eason0729 these are my cargo and rust versions

berkaysahin@Berkays-MacBook-Pro wasmtest % cargo --version                                        
cargo 1.82.0 (8f40fc59f 2024-08-21)
berkaysahin@Berkays-MacBook-Pro wasmtest % rustc --version                                        
rustc 1.82.0 (f6e511eec 2024-10-15)

When I build with: cargo build --target wasm32-unknown-unknown ,
it successfully compiles and generates the binary.

However, in the release mode: cargo build --release --target wasm32-unknown-unknown,

Compiling psm v0.1.24
   Compiling arrow-ipc v53.3.0
   Compiling arrow-json v53.3.0
   Compiling arrow-csv v53.3.0
   Compiling stacker v0.1.17
   Compiling recursive v0.1.1
error: failed to build archive at `/Users/berkaysahin/Desktop/datafusion-upstream/target/wasm32-unknown-unknown/release/deps/libpsm-cc498cff4b514c30.rlib`: LLVM error: section too large

The following warnings were emitted during compilation:

warning: [email protected]: warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: /Users/berkaysahin/Desktop/datafusion-upstream/target/wasm32-unknown-unknown/release/build/psm-d273ebae732f9287/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...

I don't know why this still refers to Xcode path.

Since wasm-pack build goes with release flag, we need to solve this (assuming I am not the only one)

@Eason0729
Copy link
Contributor

It compiles under 1.82.0 and 1.83.0(didn't use LLVM 15), I think it's LLVM version related.

In addition, I may need some help on how to use specific version of LLVM?

root@73b0a356b106:/stacker/psm# echo $PATH
/usr/lib/llvm-15/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@73b0a356b106:/stacker/psm# clang --version
Debian clang version 15.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-15/bin
root@73b0a356b106:/stacker/psm# rustc --version --verbose 
rustc 1.83.0 (90b35a623 2024-11-26)
binary: rustc
commit-hash: 90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf
commit-date: 2024-11-26
host: x86_64-unknown-linux-gnu
release: 1.83.0
LLVM version: 19.1.1

@peter-toth
Copy link
Contributor

@berkaysynnada, is this sill an issue? rustwasm/wasm-pack#1381 (comment) seems to work for me too.

% export PATH=/opt/homebrew/Cellar/llvm/19.1.4/bin/:$PATH

% clang --version
Homebrew clang version 19.1.4
Target: arm64-apple-darwin23.6.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/19.1.4/bin
Configuration file: /opt/homebrew/etc/clang/arm64-apple-darwin23.cfg

% rustc --version --verbose
rustc 1.83.0 (90b35a623 2024-11-26)
binary: rustc
commit-hash: 90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf
commit-date: 2024-11-26
host: aarch64-apple-darwin
release: 1.83.0
LLVM version: 19.1.1

% cargo clean
...

% cargo build --release --target wasm32-unknown-unknown
...
   Compiling datafusion-wasmtest v43.0.0 (/Users/ptoth/git/apache/datafusion/datafusion/wasmtest)
    Finished `release` profile [optimized] target(s) in 1m 36s

@berkaysynnada
Copy link
Contributor Author

That worked for me now (and passed the tests). Perhaps I should have tried with cargo clean 😞

@robtaylor
Copy link

I'm still getting this issue. Mac M4 with Sequoia 15.2.

% rustc --version --verbose
rustc 1.84.0 (9fc6b4312 2025-01-07)
binary: rustc
commit-hash: 9fc6b43126469e3858e2fe86cafb4f0fd5068869
commit-date: 2025-01-07
host: aarch64-apple-darwin
release: 1.84.0
LLVM version: 19.1.5
error: failed to build archive at `[cut]/wasm32-unknown-unknown/release/deps/libpsm-5686a1fe6f354cae.rlib`: LLVM error: section too large

warning: [email protected]: warning: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: [cut]wasm32-unknown-unknown/release/build/psm-2da2e2ac984ce6da/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

@Eason0729
Copy link
Contributor

This should works on Mac, but I didn't have one to test.

We should try figuring out the reason. If we couldn't, maybe just make recursive arch-dependant dependencies(which will be another issue to open).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

5 participants