Hi Paolo, thank you for the comments. > >> has_int128_type is set to false on emscripten as of now to avoid errors by > >> libffi. > > What is the error here? How hard would it be to test for it?
When has_int128_type=true, I encountered a runtime error from libffi. To reproduce this, we need to actually execute a libffi call with 128-bit arguments. > Uncaught TypeError: Cannot convert 1079505232 to a BigInt > at ffi_call_js (out.js:702:37) > at qemu-system-x86_64.wasm.ffi_call (qemu-system-x86_64.wasm:0xa37712) > at qemu-system-x86_64.wasm.tcg_qemu_tb_exec_tci (qemu-system-x86_64.wasm:0x65f440) > at qemu-system-x86_64.wasm.tcg_qemu_tb_exec (qemu-system-x86_64.wasm:0x65edff) > at qemu-system-x86_64.wasm.cpu_tb_exec (qemu-system-x86_64.wasm:0x6762c0) > at qemu-system-x86_64.wasm.cpu_exec_loop (qemu-system-x86_64.wasm:0x677c84) > at qemu-system-x86_64.wasm.dynCall_iii (qemu-system-x86_64.wasm:0xab9014) > at ret.<computed> (out.js:6016:24) > at invoke_iii (out.js:7574:10) > at qemu-system-x86_64.wasm.cpu_exec_setjmp (qemu-system-x86_64.wasm:0x676db8) > >> And tests aren't integrated with Wasm execution environment as of > >> now so this commit disables tests. > > Perhaps it would be enough to add > > [binaries] > exe_wrapper = 'node' > > to the emscripten.txt file? Thank you for the suggestion. I'll explore this approach. > >> +[built-in options] > >> +c_args = ['-Wno-unused-command-line-argument','-g','-O3','-pthread'] > >> +cpp_args = ['-Wno-unused-command-line-argument','-g','-O3','-pthread'] > >> +objc_args = ['-Wno-unused-command-line-argument','-g','-O3','-pthread'] > >> +c_link_args = ['-Wno-unused-command-line-argument','-g','-O3','- > >> pthread','-sASYNCIFY=1','-sPROXY_TO_PTHREAD=1','-sFORCE_FILESYSTEM','- > >> sALLOW_TABLE_GROWTH','-sTOTAL_MEMORY=2GB','-sWASM_BIGINT','- > >> sEXPORT_ES6=1','-sASYNCIFY_IMPORTS=ffi_call_js','- > >> sEXPORTED_RUNTIME_METHODS=addFunction,removeFunction,TTY,FS'] > >> +cpp_link_args = ['-Wno-unused-command-line-argument','-g','-O3','- > >> pthread','-sASYNCIFY=1','-sPROXY_TO_PTHREAD=1','-sFORCE_FILESYSTEM','- > >> sALLOW_TABLE_GROWTH','-sTOTAL_MEMORY=2GB','-sWASM_BIGINT','- > >> sEXPORT_ES6=1','-sASYNCIFY_IMPORTS=ffi_call_js','- > >> sEXPORTED_RUNTIME_METHODS=addFunction,removeFunction,TTY,FS'] > > At least -g -O3 -pthread should not be necessary. Thank you for the suggestion. -sPROXY_TO_PTHREAD flag used in c_link_args always requires -pthread, even during configuration. Otherwise, emcc returns an error like: > emcc: error: -sPROXY_TO_PTHREAD requires -pthread to work! So I think -pthread needs to be included in c_link_args at minimum. I'll try to remove other flags in the next version of the series. > For -Wno-unused-command-line-argument what are the warnings/errors that > you are getting? I encountered the following error when compiling QEMU: > clang: error: argument unused during compilation: '-no-pie' [-Werror,-Wunused-command-line-argument] It seems Emscripten doesn't support the -no-pie flag, and this wasn't caught during the configure phase. It seems that removing -Wno-unused-command-line-argument would require the following change in meson.build, but I'm open to better approaches. > -if not get_option('b_pie') > +if not get_option('b_pie') and host_os != 'emscripten' > qemu_common_flags += cc.get_supported_arguments('-fno-pie', '-no-pie') > endif > >> +elif host_os == 'emscripten' > >> + supported_backends += ['fiber'] > > Can you rename the backend to 'wasm' since the 'windows' backend also > uses an API called Fibers? Sure, I'll rename the coroutine backend in the next version of the series.