Comments (17)
@kripken that fixed it. Nice branch name :)
from cib.
Oh wait, is this using emscripten with the LLVM wasm backend, and not fastcomp/asm2wasm? Seems so from the list of repos in build.py. If so, then the 15-20% size difference is not that surprising, as the wasm backend tends to emit larger code. Might be worth adding a build step to run binaryen's optimizer, then.
from cib.
is this using emscripten with the LLVM wasm backend
Yes.
Might be worth adding a build step to run binaryen's optimizer, then.
Sounds good.
from cib.
If using CMake and e.g. Unix Makefiles
generator, then one should pass -DCMAKE_BUILD_TYPE=Release
to the build if not otherwise specified, as CMake defaults to building Debug
build type, which is unoptimized. emcmake
does not reach the linking phase to do any adjustments.
from cib.
Here's what it currently uses:
-DCMAKE_BUILD_TYPE=Release
to build llvm's*.a
-DCMAKE_BUILD_TYPE=Debug
to build the final executable.Release
crashes during build.
from cib.
It's now down to 43M.
from cib.
I'm a little confused by
@juj: emcmake does not reach the linking phase to do any adjustments.
@tbfleming -DCMAKE_BUILD_TYPE=Debug to build the final executable.
Is cmake issuing the final emcc command to link and generate the executable? I don't see an emcc command in the build script, so it seems like that's the case, but if I understand you @juj that shouldn't be possible?
Release crashes during build.
Oh, do you have an error message or stack trace from that? EMCC_DEBUG=1
in the env could give more info.
from cib.
Is cmake issuing the final emcc command to link and generate the executable?
Yes. Here's the commands which create the app. I'm running it through release to give you a log.
cd /mnt/cib/build/clang-browser-Release/ && emcmake cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD=/mnt/cib/build/llvm-browser-Release/ -DEMSCRIPTEN=on ../../src
cd /mnt/cib/build/clang-browser-Release/ && ninja clang
-DLLVM_BUILD=...
and -DEMSCRIPTEN=on
are variables in my CMakeLists.txt.
from cib.
Oops. Sorry; I remembered wrong. It builds but hits this at runtime:
stackAlloc is not defined
from cib.
1: That stackAlloc
issue might be fixed by emscripten-core/emscripten#5986 (Please let me know either way if you check.)
2: Is the relevant CMakeLists.txt this one? https://github.com/tbfleming/cib/blob/master/src/CMakeLists.txt#L105
If so then it looks like cmake is picking the -Ox
optimization level for the final link stage. (@juj, is that odd?) Some notes on the flags:
- Looks like it's using
SAFE_HEAP
? That can increase size a lot. https://github.com/tbfleming/cib/blob/master/src/CMakeLists.txt#L73 - I think cmake will emit
-O2
for a release build.-O3
could be faster, and-Os
could be smaller. NO_EXIT_RUNTIME
is now the default, can remove that (unless using an older version).
from cib.
1: I'll try it
2: Yes
I forgot to remove the SAFE_HEAP
after debugging.
This reminds me of an issue: NO_EXIT_RUNTIME
doesn't stop it from closing stdio. I had to do this instead: https://github.com/tbfleming/cib/blob/master/src/process.js#L137
from cib.
emscripten-core/emscripten#5986 fixed the stackAlloc
issue. I also removed SAFE_HEAP
, ASSERTIONS
, DEMANGLE_SUPPORT
, and NO_EXIT_RUNTIME
.
Step 1 | Release build | 41M |
Step 2 | wasm-opt -Os | 36M |
Step 3 | combine data segments | 37M |
Step 3 is because the builds sometimes produce around 130,000 data segments, which exceed Firefox's and Chrome's 100,000 limit. I combine them into a single segment.
from cib.
Is that stdio issue fixed by emscripten-core/emscripten#6038 ?
About wasm having a 100,000 segment limitation, I wasn't aware of that limit. @lukewagner , is that a temporary thing, or should binaryen work around it?
from cib.
emscripten-core/emscripten#6038 fixed it.
from cib.
It's a permanent limit and should be the same across browsers since it is in the list of constant limits. If there was a hard reason to relax it, it could be relaxed.
from cib.
Ok, thanks for the info, I'll handle it in binaryen.
from cib.
@tbfleming WebAssembly/binaryen#1350 should work around the 100K segment limit, please verify it works if you can.
from cib.
Related Issues (20)
- Crashes in Safari HOT 5
- Feature proposal: WASM preview
- Last line of output not printing without a final newline HOT 1
- getting error when uploading contract HOT 2
- Chrome 69: RuntimeError: memory access out of bounds HOT 2
- Can you please provide the binaries? HOT 2
- No longer working HOT 4
- Add support for running in nodejs directly.
- clangd and Monaco
- Add example for Armadillo numerical processing library
- RuntimeError: index out of bounds HOT 4
- Libclang in WASM HOT 3
- Why is there no license for this software?
- building when you already have emscripten installed HOT 3
- Integrate into WebAssembly.Studio HOT 4
- Using compiler options in cib HOT 3
- LinkError: import object field 'sqlite3_open' is not a Function HOT 4
- I think that not working HOT 13
- Link Error HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cib.