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

[wasm] error: undefined symbol: emscripten_webgpu_get_device #20422

Closed
emepetres opened this issue Sep 22, 2020 · 13 comments
Closed

[wasm] error: undefined symbol: emscripten_webgpu_get_device #20422

emepetres opened this issue Sep 22, 2020 · 13 comments

Comments

@emepetres
Copy link

Hi, I've been trying to compile a .net project with emscripten/webgpu with no success, as the linker seems to not found the function "emscripten_webgpu_get_device". I'm compiling webgpu from emscrpten as a .bc file, then using packager to link everything toguether. Same approach with webgl has worked in the past.

Steps to Reproduce

  1. Create and build a dummy .net project that calls to emscripten webgpu using pinvoke:
[DllImport("libWebGPU")]
private static extern WGPUDevice emscripten_webgpu_get_device();
  1. Compile libWebGPU
    emcc include/emscripten.h include/emscripten/html5_webgpu.h include/emscripten/html5.h -std=c++17 -s LEGALIZE_JS_FFI=0 -r -o libWebGPU.bc -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0
  2. Call packager to link everything toguether
    mono $HOME/mono/sdks/wasm/packager.exe --emscripten-sdkdir=$HOME/mono/sdks/builds/toolchains/emsdk --enable-fs --mono-sdkdir=$HOME/mono/sdks/out --appdir=$HOME/.build/bin --builddir=$HOME/.build/obj --template=$HOME/.build/publish/runtime.js --linker --link-descriptor=$HOME/.build/aot-link-descriptor.xml --pinvoke-libs=libWebGPU --native-lib=libWebGPU.bc HelloWebGPUNet.Web.dll

Current Behavior

Ninja log says that the function "emscripten_webgpu_get_device" is undefined

[62/62] bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.bc /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
FAILED: /home/jcarnero/.build/bin/dotnet.js /home/jcarnero/.build/bin/dotnet.wasm 
bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.bc /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
emcc: warning: libWebGPU.bc is not a valid input file [-Winvalid-input]
error: undefined symbol: emscripten_webgpu_get_device (referenced by top-level compiled C/C++ code)
warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
warning: _emscripten_webgpu_get_device may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors
emcc: error: '/home/jcarnero/mono/sdks/builds/toolchains/emsdk/node/12.18.1_64bit/bin/node /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/src/compiler.js /tmp/tmpx_dgp5bm.txt' failed (1)

Expected Behavior

ninja build ends successfully.

On which platforms did you notice this

[ ] macOS
[x] Linux (WSL1)
[ ] Windows

Version Used:

commit 163f458 (HEAD -> master, origin/master, origin/HEAD)
Author: monojenkins jo.shields+jenkins@xamarin.com
Date: Wed Sep 16 11:24:16 2020 -0400

emcc (Emscripten gcc/clang-like replacement) 1.40.0 (634dfe9c7837119d3970c4145984b8f517e3e1ca)

@vargaz
Copy link
Contributor

vargaz commented Sep 22, 2020

This is probably caused by:
emcc: warning: libWebGPU.bc is not a valid input file [-Winvalid-input]

@emepetres
Copy link
Author

emepetres commented Sep 22, 2020

mmm I see, any suggestions on how to generate the bc file then? If I use the .a extension it says that the file is not an static library. However I'm using emscripten 1.40...

@emepetres
Copy link
Author

Ok @vargaz I managed to remove the invalid input file warning by compiling to bitcode the following source:

#include <emscripten.h>
#include <emscripten/html5.h>
#include <emscripten/html5_webgpu.h>

extern "C"
{
    WGPUDevice test_emscripten_webgpu_get_device(void);
    void test_emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop);
    void test_emscripten_cancel_main_loop(void);
}

WGPUDevice test_emscripten_webgpu_get_device(void)
{
    return emscripten_webgpu_get_device();
}

void jemscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop)
{
    emscripten_set_main_loop(func, fps, simulate_infinite_loop);
}

void test_emscripten_cancel_main_loop(void)
{
    emscripten_cancel_main_loop();
}

The libWebGPU.bc file is generated with the following command:
emcc main.cpp -Iinclude -std=c++17 -s LEGALIZE_JS_FFI=0 -s FULL_ES3=1 -r -c -o libWebGPU.bc -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0

Now, if I do in c#:

[DllImport("libWebGPU.bc")]
private static extern void test_emscripten_set_main_loop(EMLoop func, int fps, int simulate_infinite_loop);

I can compile but javascript console says Uncaught (in promise) Error: System.DllNotFoundException: libWebGPU.bc assembly:<unknown assembly> type:<unknown type> member:(null).

On the other hand, if I do (note not puting the bc extension):

[DllImport("libWebGPU")]
private static extern void test_emscripten_set_main_loop(EMLoop func, int fps, int simulate_infinite_loop);

Then ninja build fails:

[56/56] bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.bc /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
FAILED: /home/jcarnero/.build/bin/dotnet.js /home/jcarnero/.build/bin/dotnet.wasm 
bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.bc /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
wasm-ld: error: pinvoke.o: undefined symbol: test_emscripten_set_main_loop
wasm-ld: error: libWebGPU.bc: undefined symbol: emscripten_webgpu_get_device
emcc: error: '/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_gu84p4kn/dotnet.wasm driver.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/local/lib pinvoke.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/lib zlib-helper.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm corebindings.o libWebGPU.bc /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libz.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++abi.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libdlmalloc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libpthread_stub.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libsockets.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined-file=/tmp/tmp5a99bqik.undefined --import-memory --import-table --export __cxa_is_pointer_type --export __cxa_can_catch --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export __errno_location --export memalign --export memset --export htonl --export htons --export ntohs --export setThrew --export _get_tzname --export _get_daylight --export _get_timezone --export emscripten_main_thread_process_queued_calls -z stack-size=5242880 --initial-memory=134217728 --no-entry --max-memory=2147483648 --global-base=1024' failed (1)

@vargaz
Copy link
Contributor

vargaz commented Sep 22, 2020

Try using libWebGPU.o as the file name, '.bc' is llvm bitcode, and emcc generates wasm object files by default.

@emepetres
Copy link
Author

Thanks @vargaz , I compiled the .o with emcc main.cpp -std=c++17 -s LEGALIZE_JS_FFI=0 -s FULL_ES3=1 -r -o libWebGPU.o -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0, but similar error:

[56/56] bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
FAILED: /home/jcarnero/.build/bin/dotnet.js /home/jcarnero/.build/bin/dotnet.wasm 
bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
wasm-ld: error: pinvoke.o: undefined symbol: test_emscripten_set_main_loop
wasm-ld: error: libWebGPU.o: undefined symbol: emscripten_webgpu_get_device
emcc: error: '/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_h0vd11iw/dotnet.wasm driver.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/local/lib pinvoke.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/lib zlib-helper.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libz.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++abi.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libdlmalloc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libpthread_stub.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libsockets.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined-file=/tmp/tmpfwhkyfuv.undefined --import-memory --import-table --export __cxa_is_pointer_type --export __cxa_can_catch --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export __errno_location --export memalign --export memset --export htonl --export htons --export ntohs --export setThrew --export _get_tzname --export _get_daylight --export _get_timezone --export emscripten_main_thread_process_queued_calls -z stack-size=5242880 --initial-memory=134217728 --no-entry --max-memory=2147483648 --global-base=1024' failed (1)

@vargaz
Copy link
Contributor

vargaz commented Sep 22, 2020

It doesn't complain about libWebGPU.bc anymore, so thats an improvement.
I think you need to pass -s USE_WEBGPU=1 to emscripten

@emepetres
Copy link
Author

Thanks again @vargaz , one of the two wasm-ld: error has desappeared. Any hint why the seccond still occur?

[56/56] bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s USE_WEBGPU=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
FAILED: /home/jcarnero/.build/bin/dotnet.js /home/jcarnero/.build/bin/dotnet.wasm 
bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s USE_WEBGPU=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
wasm-ld: error: pinvoke.o: undefined symbol: test_emscripten_set_main_loop
emcc: error: '/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_c502_lsr/dotnet.wasm driver.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/local/lib pinvoke.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/lib zlib-helper.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libz.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++abi.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libdlmalloc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libpthread_stub.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libsockets.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined-file=/tmp/tmp2l0o0paj.undefined --import-memory --import-table --export __cxa_is_pointer_type --export __cxa_can_catch --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export __errno_location --export memalign --export memset --export htonl --export htons --export ntohs --export setThrew --export _get_tzname --export _get_daylight --export _get_timezone --export emscripten_main_thread_process_queued_calls -z stack-size=5242880 --initial-memory=134217728 --no-entry --max-memory=2147483648 --global-base=1024' failed (1)

@vargaz
Copy link
Contributor

vargaz commented Sep 22, 2020

Which library defines that function ?

@emepetres
Copy link
Author

Its the main.cpp (above) I used to compile the file libWebGPU.o

@vargaz
Copy link
Contributor

vargaz commented Sep 23, 2020

The functions might need to be marked with
EMSCRIPTEN_KEEPALIVE.

@emepetres
Copy link
Author

emepetres commented Sep 23, 2020

I had a typo on main.cpp, the functions defined in it are correctly linked. However I imported webgpu.h functions using DllImport to try to draw a triangle and I'm having pinvoke errors on all them like wasm-ld: error: pinvoke.o: undefined symbol: wgpuCreateInstance. Should I add EMSCRIPTEN_KEEPALIVE in all webgpu.h functions, make a wrapper of all them in a cpp file, or is there a better/cleaner way?

[56/56] bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s USE_WEBGPU=1 -s ENVIRONMENT=web -ferror-limit=0 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
FAILED: /home/jcarnero/.build/bin/dotnet.js /home/jcarnero/.build/bin/dotnet.wasm 
bash -c 'source ./emsdk_env.sh && emcc -Oz -g -s USE_ZLIB=1 -s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s USE_WEBGPU=1 -s ENVIRONMENT=web -ferror-limit=0 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=134217728 -s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue', 'UTF8ToString']" -s "EXPORTED_FUNCTIONS=['___cxa_is_pointer_type', '___cxa_can_catch']" -s "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=['setThrew', 'memset']"  -o /home/jcarnero/.build/bin/dotnet.js --js-library /home/jcarnero/mono/sdks/wasm/src/library_mono.js --js-library /home/jcarnero/mono/sdks/wasm/src/dotnet_support.js --js-library /home/jcarnero/mono/sdks/wasm/src/binding_support.js driver.o pinvoke.o zlib-helper.o corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a'  && /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-opt --strip-dwarf /home/jcarnero/.build/bin/dotnet.wasm -o /home/jcarnero/.build/bin/dotnet.wasm
wasm-ld: error: pinvoke.o: undefined symbol: wgpuCreateInstance
wasm-ld: error: pinvoke.o: undefined symbol: wgpuGetProcAddress
wasm-ld: error: pinvoke.o: undefined symbol: wgpuCommandEncoderInsertDebugMarker
wasm-ld: error: pinvoke.o: undefined symbol: wgpuCommandEncoderPopDebugGroup
wasm-ld: error: pinvoke.o: undefined symbol: wgpuCommandEncoderPushDebugGroup
wasm-ld: error: pinvoke.o: undefined symbol: wgpuComputePassEncoderInsertDebugMarker
wasm-ld: error: pinvoke.o: undefined symbol: wgpuComputePassEncoderPopDebugGroup
wasm-ld: error: pinvoke.o: undefined symbol: wgpuComputePassEncoderPushDebugGroup
wasm-ld: error: pinvoke.o: undefined symbol: wgpuComputePipelineGetBindGroupLayout
wasm-ld: error: pinvoke.o: undefined symbol: wgpuDeviceInjectError
wasm-ld: error: pinvoke.o: undefined symbol: wgpuDeviceLoseForTesting
wasm-ld: error: pinvoke.o: undefined symbol: wgpuDevicePopErrorScope
wasm-ld: error: pinvoke.o: undefined symbol: wgpuDevicePushErrorScope
wasm-ld: error: pinvoke.o: undefined symbol: wgpuDeviceSetDeviceLostCallback
wasm-ld: error: pinvoke.o: undefined symbol: wgpuFenceGetCompletedValue
wasm-ld: error: pinvoke.o: undefined symbol: wgpuRenderBundleEncoderDrawIndexedIndirect
wasm-ld: error: pinvoke.o: undefined symbol: wgpuRenderBundleEncoderDrawIndirect
wasm-ld: error: pinvoke.o: undefined symbol: wgpuRenderBundleEncoderInsertDebugMarker
wasm-ld: error: pinvoke.o: undefined symbol: wgpuRenderBundleEncoderPopDebugGroup
wasm-ld: error: pinvoke.o: undefined symbol: wgpuRenderBundleEncoderPushDebugGroup
wasm-ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
emcc: error: '/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_ygynwfu4/dotnet.wasm driver.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/local/lib pinvoke.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/system/lib zlib-helper.o -L/home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm corebindings.o libWebGPU.o /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ee-interp.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-ilgen.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-icall-table.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a /home/jcarnero/mono/sdks/out/wasm-runtime-release/lib/libmono-native.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libz.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc++abi.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libdlmalloc.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libpthread_stub.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /home/jcarnero/mono/sdks/builds/toolchains/emsdk/upstream/emscripten/cache/wasm/libsockets.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined-file=/tmp/tmp8u0cbstr.undefined --import-memory --import-table --export __cxa_is_pointer_type --export __cxa_can_catch --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export __errno_location --export memalign --export memset --export htonl --export htons --export ntohs --export setThrew --export _get_tzname --export _get_daylight --export _get_timezone --export emscripten_main_thread_process_queued_calls -z stack-size=5242880 --initial-memory=134217728 --no-entry --max-memory=2147483648 --global-base=1024' failed (1)

BTW I'm getting as well 14 warnings like below, but I think it is not related:

In file included from pinvoke.c:14:
./pinvoke-table.h:340:66: warning: incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; remove & [-Wint-conversion]
((WasmInterpEntrySig_0)wasm_native_to_interp_ftndescs [0].func) (&arg0, &arg1, &arg2, wasm_native_to_interp_ftndescs [0].arg);
                                                                 ^~~~~

Thank you very much @vargaz for taking the time.

@vargaz
Copy link
Contributor

vargaz commented Sep 23, 2020

No idea about that. The warnings are harmless.

@emepetres
Copy link
Author

So after some digging latests pinvoke errors were solved by moving to emscripten 1.40.1. It seems that I needed this PR emscripten-core/emscripten#11737 for webgpu to work.

Other errors have arised now, but I think they are unrelated so I'm closing this. thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants