On Sat, Jun 29, 2024 at 3:08 PM 'Andrea M' via emscripten-discuss < emscripten-discuss@googlegroups.com> wrote:
> Hi Sam, > > Thanks for the prompt reply - on a Saturday on top of that. > > To clarify, you mean I should use the -shared flag when building the side > module? > No. `-shared` doesn't build side modules today. My main advice is to avoid dynamic linking completely and use static linking. i.e. use `.a` archives rather than a side module. Failing that, use `-sMAIN_MODULE=2` which at least gives you dead code elimination. > Apologies for the dull question. > > Best, > Andrea > > On Sat, 29 Jun 2024, 23:54 'Sam Clegg' via emscripten-discuss, < > emscripten-discuss@googlegroups.com> wrote: > >> Hi Andrea, glad to hear you have things compiling at least. >> >> A couple of pieces of advice to get started. >> >> 1. If possible can you simply use static linking? It would simplify >> things greatly and reduce code size. Unless you program is very much >> based on around the idea of dlopen/dlsym I would strongly recommend >> avoiding dynamic linking. >> >> 2. If you must use `-sMAIN_MODULE` then I strongly recommend using >> `-sMAIN_MODULE=2`. In this mode you pass your side module on the command >> line when linking the main module and emscripten can then figure out >> precisely what symbols it needs to include. >> >> 3. You don't need/want `-sSTANDALONE_WASM` when building your side module >> (in fact I think you probably don't need most of the link flags you have >> there). >> >> If you do need dynamic linking and your problem persists then I suggest >> taking a look your main module and your side module using something like >> `wasm-objdump` to figure out what the signature of the >> `_ZNSt3__26chrono12steady_clock3nowEv` symbol on the import side (the side >> module) and the export side (the main module). >> >> That symbol is `std::__2::chrono::steady_clock::now()` BTW. It looks >> like its is always support to return a `class time_point` which itself >> that simply contains a `calss duration` which seems to be templatized so I >> suppose its size could vary? I'm not sure yet, that could be the issue I >> suppose. Again static linking is probably way to go. >> >> cheers, >> sam >> >> On Sat, Jun 29, 2024 at 2:00 PM 'Andrea M' via emscripten-discuss < >> emscripten-discuss@googlegroups.com> wrote: >> >>> Hi, >>> >>> After days of hard work I finally worked out how to compile >>> maplibre-native as a WASM side module, roughly 40MB (without >>> optimisations). At the moment the file size doesn't worry me much. >>> >>> maplibre-native is compiled using C++ 17 whereas my main module is >>> compiled using C++ 23. Is this generally allowed? Might this be why I'm >>> getting: >>> >>> LinkError: WebAssembly.instantiate(): Import #7289 "env" >>> "_ZNSt3__26chrono12steady_clock3nowEv": imported function does not match >>> the expected type >>> >>> Please note, I am using CMake. >>> >>> # SIDE_MODULE >>> set(CMAKE_EXECUTABLE_SUFFIX ".wasm") >>> >>> set_target_properties(mbgl-core PROPERTIES COMPILE_FLAGS "-O0 -pthread >>> -fPIC --use-port=libpng --use-port=libjpeg --use-port=zlib >>> --use-port=sqlite3 -s DISABLE_EXCEPTION_CATCHING=0 >>> -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -DMLN_RENDER_BACKEND_OPENGL >>> -DMLN_DRAWABLE_RENDERER") >>> >>> set_target_properties(mbgl-core PROPERTIES LINK_FLAGS "--no-heap-copy >>> -pthread -fPIC --use-port=libpng --use-port=libjpeg --use-port=zlib >>> --use-port=sqlite3 -O0 -lembind -lhtml5.js -lhtml5_webgl.js -lglfw.js -s >>> ENVIRONMENT='web,worker' -s ALLOW_MEMORY_GROWTH=1 -s WASM=1 -s USE_GLFW=3 >>> -s USE_WEBGPU=1 -s STANDALONE_WASM=1 -s ASSERTIONS=1 -s >>> STACK_OVERFLOW_CHECK=2 -s MIN_WEBGL_VERSION=2 -s MAX_WEBGL_VERSION=2 >>> -sFULL_ES3 -s EXPORT_ALL=1 -s DISABLE_EXCEPTION_CATCHING=0 -s SINGLE_FILE=0 >>> -sSIDE_MODULE") >>> >>> >>> # MAIN MODULE >>> set_target_properties(reactDearImgui PROPERTIES COMPILE_FLAGS "-O3 >>> -pthread -fPIC -Wno-error=deprecated-declarations -Wformat -s >>> DISABLE_EXCEPTION_CATCHING=0 --use-port=libpng --use-port=sqlite3 >>> --use-port=libjpeg --use-port=zlib") >>> >>> set_target_properties(reactDearImgui PROPERTIES LINK_FLAGS >>> "--no-heap-copy -pthread -fPIC --use-port=sqlite3 --use-port=libpng >>> --use-port=libjpeg --use-port=zlib -O3 -lembind -lhtml5.js -lhtml5_webgl.js >>> -lglfw.js -s DISABLE_EXCEPTION_CATCHING=0 -s ENVIRONMENT='web,worker' -s >>> MODULARIZE=1 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1 -s USE_GLFW=3 -s >>> USE_WEBGPU=1 -s NO_EXIT_RUNTIME=0 -s STANDALONE_WASM=0 -s EXIT_RUNTIME=1 -s >>> ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 -s MIN_WEBGL_VERSION=2 -s >>> MAX_WEBGL_VERSION=2 -sFULL_ES3 -s DISABLE_EXCEPTION_CATCHING=0 -s >>> SINGLE_FILE=0 -sERROR_ON_UNDEFINED_SYMBOLS=0 -s EXPORT_ALL=1 -sMAIN_MODULE >>> ${CMAKE_CURRENT_SOURCE_DIR}/deps/maplibre-native-fork/platform/emscripten/build/mbgl-core.wasm") >>> >>> Any help with this would be greatly appreciated. I apologise in advance >>> if the solution turns out to be trivial. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "emscripten-discuss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/emscripten-discuss/aa75bf86-3c32-40d8-b059-8efc645ca96dn%40googlegroups.com >>> <https://groups.google.com/d/msgid/emscripten-discuss/aa75bf86-3c32-40d8-b059-8efc645ca96dn%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "emscripten-discuss" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/emscripten-discuss/TfGTVrHHAaw/unsubscribe >> . >> To unsubscribe from this group and all its topics, send an email to >> emscripten-discuss+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/emscripten-discuss/CAL_va28x5%2B98pqOGw4mOsAQvs5UCQdFdhbzya3qQ4sctUfr9_Q%40mail.gmail.com >> <https://groups.google.com/d/msgid/emscripten-discuss/CAL_va28x5%2B98pqOGw4mOsAQvs5UCQdFdhbzya3qQ4sctUfr9_Q%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/emscripten-discuss/CA%2Bx6MRyHHJ0DsDKh%3DAsR5QN0MZFjAQB8ufBnSDUuEPtGuk0CTA%40mail.gmail.com > <https://groups.google.com/d/msgid/emscripten-discuss/CA%2Bx6MRyHHJ0DsDKh%3DAsR5QN0MZFjAQB8ufBnSDUuEPtGuk0CTA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2-L7cfqP%2BKLOQQhR4iFHSO7vsWTqNo2msQri%2B2REWgi8Q%40mail.gmail.com.