emscripten-core/emscripten

Does emsdk support installation on the openEuler 22.03 distribution

Opened this issue · 9 comments

openEuler 22.03
gcc version 10.3.1 (GCC)
ldd (GNU libc) 2.34

does emsdk support installation ?

Since openEuler is just a linux distro (as far as I can tell) you should be able to simply install emsdk. Have you tried?

i have tried ,and An error occurred during compilation,libatomic.so.a:cannot open shared object file

#25242
there is another issue. After I executed these two commands(python embuilder.py build ALL,,FROZEN_CACHE = True in .emscripten), an error occurred during compile:raise exception attempt to lock the cache but FROZEN_CACHE is set.
so is the cache directory not set correctly? Do I need to set the cache directory?

I installed emsdk from an internet-connected environment and copied the entire emsdk folder to an internet-disconnected environment. However, it triggered the sanity check mechanism and deleted all the contents in the cache。

shared:INFO: old sanity: 4.0.14|/home/yff/emsdkV4.0.14/emsdk/upstream/bin shared:INFO: new sanity: 4.0.14|/opt2/emsdk/emsdkV4.0.14/upstream/bin shared:INFO: (Emscripten: config changed, clearing cache)

juj commented

i have tried ,and An error occurred during compilation,libatomic.so.a:cannot open shared object file

Which compilation was this? Compilation of emsdk? LLVM? Binaryen? Your Wasm code? Maybe sharing more detailed logs around the error, and command line, can help.

I executed these two commands(python embuilder.py build ALL,,FROZEN_CACHE = True in .emscripten), an error occurred during compile:raise exception attempt to lock the cache but FROZEN_CACHE is set.
so is the cache directory not set correctly? Do I need to set the cache directory?

This to me reads like a bug. I posted #25259 to help troubleshoot this error message. It won't fix the problem, but will hopefully give info on why that is happening. If you want to apply that locally, it should help troubleshoot what code flow/call site is triggering the clear.

it triggered the sanity check mechanism and deleted all the contents in the cache

This can and will happen if FROZEN_CACHE is not set. If FROZEN_CACHE is set, then the sanity check cache clear mechanism should not take place. There does exit logic to do this:

emscripten/tools/shared.py

Lines 426 to 429 in 1c1baae

if config.FROZEN_CACHE:
if force:
perform_sanity_checks(quiet)
return
, but it seems something is then not quite correct.

One way to try to navigate around this, is to set environment variable EMCC_SKIP_SANITY_CHECK=1. That will skip running the sanity check, and definitely will then skip the cache clear.

The compilation script is as follows:
emcc test.c -o test.html -s INITIAL_MEMORY=500MB -s MAXIMUM_MEMORY=1023MB -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s USE_FREETYPE=1 -lopenal -s GL_PREINITIALIZED_CONTEXT=1 -s OFFSCREENCANVAS_SUPPORT=1 -s ENVIRONMENT=web,worker -s EXPORT_NAME='JSPlayerModule' -s MODULARIZE=1 -s ALLOW_TABLE_GROWTH=1 -s STACK_SIZE=1MB -s SINGLE_FILE=1

when i set EMCC_SKIP_SANITY_CHECK=1, That skiped running the sanity check.

and another question:When I compile, the cache directory requires write permission, but my server does not allow writing?
OSError: [Errno 30] Read-only file system: '/opt2/emsdk/emsdkV4.0.14/upstream/emscripten/cache/symbol_lists/443d10e81ad687da5c782aea192083aa5bfeb7f3.json.lock'

If your server does not allow writing to the cache then you need to set FROZEN_CACHE in your .emscripten config file (or you can use EM_FROZEN_CACHE in the environment.

I would advise against using EMCC_SKIP_SANITY_CHECK. That should not be needed if emscripten is configured correctly.

but when i compile it , it need to write the lock file , if set FROZEN_CACHE, the cache not allow to write. '/opt2/emsdk/emsdkV4.0.14/upstream/emscripten/cache/symbol_lists/443d10e81ad687da5c782aea192083aa5bfeb7f3.json.lock'

If you set FROZEN_CACHE then emscripten will not cache the symbol lists. See

emscripten/tools/link.py

Lines 246 to 250 in 9555253

def get_js_sym_info():
# Avoiding using the cache when generating struct info since
# this step is performed while the cache is locked.
if DEBUG or settings.BOOTSTRAPPING_STRUCT_INFO or config.FROZEN_CACHE:
return generate_js_sym_info()