pykeio / ort

Fast ML inference & training for Rust with ONNX Runtime
https://ort.pyke.io/
Apache License 2.0
797 stars 91 forks source link

Support for wasm32-wasi targets? #206

Closed mush42 closed 2 months ago

mush42 commented 3 months ago

Hi

Why

This is more of a question than a request.

ORT now supports the wasm32-unknown-unknown target, which makes it posssible to run ORT on the browser.

I think supporting wasm32-wasi target is the next logical step.

This support enables building ORT-based apps once, and running them in any platform via wasm runtimes such as Wasmtime and Wasmer.

The issue

error: linking with `rust-lld` failed: exit code: 1
  |
  = note: "rust-lld" "-flavor" "wasm" "--rsp-quoting=posix" "--export" "__main_void" "--export" "__cxa_throw" "--export" "__libc_calloc" "--export" "__libc_free" "--export" "__libc_malloc" "--export" "_emscripten_get_now_is_monotonic" "--export" "_gmtime_js" "--export" "_initialize" "--export" "_localtime_js" "--export" "_mktime_js" "--export" "_tzset_js" "--export" "abort" "--export" "emscripten_builtin_malloc" "--export" "emscripten_date_now" "--export" "emscripten_errn" "--export" "emscripten_get_heap_max" "--export" "emscripten_get_now" "--export" "emscripten_memcpy_js" "--export" "free" "--export" "malloc" "--export" "posix_memalign" "--export" "realloc" "--export" "strftime_l" "--export" "__externref_drop_slice" "--export" "__externref_heap_live_count" "--export" "__externref_table_alloc" "--export" "__externref_table_dealloc" "--export" "__wbindgen_exn_store" "--export" "__wbindgen_free" "--export" "__wbindgen_malloc" "--export" "__wbindgen_realloc" "-z" "stack-size=1048576" "--stack-first" "--allow-undefined" "--no-demangle" "C:\\Users\\user\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-wasi\\lib\\self-contained\\crt1-command.o" "D:\\projects\\blindpandas\\sonata\\deps\\libtashkeel\\target\\wasm32-wasi\\release\\deps\\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o" "-L" "D:\\projects\\blindpandas\\sonata\\deps\\libtashkeel\\target\\wasm32-wasi\\release\\deps" "-L" "D:\\projects\\blindpandas\\sonata\\deps\\libtashkeel\\target\\release\\deps" "-L" "C:\\Users\\user\\AppData\\Local\\ort.pyke.io\\dfbin\\wasm32-wasi\\5D240CF7A0E92B6B43E94014B399027110449CCBE43E30AA66F7A1B5BF7425A6\\onnxruntime\\lib" "-L" "C:\\Users\\user\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-wasi\\lib" "-l" "c" "C:\\Users\\user\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-wasi\\lib\\libcompiler_builtins-099f2b083a07d24b.rlib" "-l" "onnxruntime" "-L" "C:\\Users\\user\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-wasi\\lib" "-L" "C:\\Users\\user\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-wasi\\lib\\self-contained" "-o" "D:\\projects\\blindpandas\\sonata\\deps\\libtashkeel\\target\\wasm32-wasi\\release\\deps\\tashkeel-c67f749b37d0e11e.wasm" "--gc-sections" "-O3" "--strip-all"
  = note: rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-absvdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-absvsi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-absvti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-addvdi3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-addvsi3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-addvti3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-clzdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-clzsi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-clzti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-cmpdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-cmpti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-ctzdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-ctzsi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-ctzti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-divdc3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-divsc3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-extendhfsf2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-ffsti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-int_util.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-muldc3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-mulsc3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-mulvdi3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-mulvsi3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-mulvti3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negdf2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negsf2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negvdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negvsi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-negvti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-paritydi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-paritysi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-parityti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-popcountdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-popcountsi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-popcountti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-subvdi3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-subvsi3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-subvti3.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-truncdfhf2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-truncsfhf2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-ucmpdi2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: warning: C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\libcompiler_builtins-099f2b083a07d24b.rlib: archive member '45c91108d938afe8-ucmpti2.o' is neither Wasm object file nor LLVM bitcode
          rust-lld: error: duplicate symbol: malloc
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: free
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: realloc
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: posix_memalign
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: __libc_malloc
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: __libc_free
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: __libc_calloc
          >>> defined in D:\projects\blindpandas\sonata\deps\libtashkeel\target\wasm32-wasi\release\deps\tashkeel-c67f749b37d0e11e.tashkeel.3e9c899d1d1a4d00-cgu.0.rcgu.o
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(dlmalloc.o)

          rust-lld: error: duplicate symbol: fprintf
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(fprintf.o)
          >>> defined in C:\Users\user\AppData\Local\ort.pyke.io\dfbin\wasm32-wasi\5D240CF7A0E92B6B43E94014B399027110449CCBE43E30AA66F7A1B5BF7425A6\onnxruntime\lib\libonnxruntime.a(fprintf.o)

          rust-lld: error: duplicate symbol: __errno_location
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(__errno_location.o)
          >>> defined in C:\Users\user\AppData\Local\ort.pyke.io\dfbin\wasm32-wasi\5D240CF7A0E92B6B43E94014B399027110449CCBE43E30AA66F7A1B5BF7425A6\onnxruntime\lib\libonnxruntime.a(__errno_location.o)

          rust-lld: error: duplicate symbol: vfprintf
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(vfprintf.o)
          >>> defined in C:\Users\user\AppData\Local\ort.pyke.io\dfbin\wasm32-wasi\5D240CF7A0E92B6B43E94014B399027110449CCBE43E30AA66F7A1B5BF7425A6\onnxruntime\lib\libonnxruntime.a(vfprintf.o)

          rust-lld: error: duplicate symbol: vsprintf
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(vsprintf.o)
          >>> defined in C:\Users\user\AppData\Local\ort.pyke.io\dfbin\wasm32-wasi\5D240CF7A0E92B6B43E94014B399027110449CCBE43E30AA66F7A1B5BF7425A6\onnxruntime\lib\libonnxruntime.a(vsprintf.o)

          rust-lld: error: duplicate symbol: vsnprintf
          >>> defined in C:\Users\user\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\wasm32-wasi\lib\self-contained\libc.a(vsnprintf.o)
          >>> defined in C:\Users\user\AppData\Local\ort.pyke.io\dfbin\wasm32-wasi\5D240CF7A0E92B6B43E94014B399027110449CCBE43E30AA66F7A1B5BF7425A6\onnxruntime\lib\libonnxruntime.a(vsnprintf.o)

error: could not compile `tashkeel` (bin "tashkeel") due to 1 previous error