mymonero / mymonero-core-js

The JS library containing the Monero crypto plus lightwallet functions behind the official MyMonero apps
BSD 3-Clause "New" or "Revised" License
101 stars 103 forks source link

EMSCRIPTEN MUST BE DEFINED! #102

Closed moneroexamples closed 1 year ago

moneroexamples commented 4 years ago

I think the boost and other compilation scripts need to be updated. The Emscripten sets the follow paths these days:

EMSDK = /home/mwo2/emsdk
EM_CONFIG = /home/mwo2/.emscripten
EMSDK_NODE = /home/mwo2/emsdk/node/12.9.1_64bit/bin/node

Using /bin/build-boost-emscripten.sh results in EMSCRIPTEN MUST BE DEFINED! error since it is using EMSCRIPTEN env variable.

/bin/build-emcpp.sh produces ./bin/build-emcpp.sh: line 7: emconfigure: command not found

paulshapiro commented 4 years ago

Roger that. Extraordinarily busy atm but would merge a pr!

moneroexamples commented 4 years ago

Trying to figure it out. Once you pass the basic problem with env variables, there are further issues, most notably:

BINARYEN_TRAP_MODE is not supported by the LLVM wasm backend

Due to the fact that version 1.39 of Emscripten changed its LLVM WASM backend. https://github.com/ocornut/imgui/issues/2877

And if the flag is removed, as suggested in the linked issued, you end up with a wall of errors:

wasm-ld: error: 'atomics' feature is used by error_code.o, so --shared-memory must be used
wasm-ld: error: Target feature 'atomics' used in error_code.o is disallowed by CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/index.cpp.o. Use --no-check-features to suppress.
wasm-ld: error: Target feature 'atomics' used in thread.o is disallowed by CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/index.cpp.o. Use --no-check-features to suppress.
wasm-ld: error: Target feature 'atomics' used in once.o is disallowed by CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/index.cpp.o. Use --no-check-features to suppress.
shared:ERROR: '/home/mwo2/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_0fbv3r8e/MyMoneroCoreCpp_WASM.wasm --lto-O2 CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/index.cpp.o -L/home/mwo2/emsdk/upstream/emscripten/system/local/lib CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/emscr_async_send_bridge.cpp.o -L/home/mwo2/emsdk/upstream/emscripten/system/lib CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_address_utils.cpp.o -L/home/mwo2/.emscripten_cache/wasm CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_paymentID_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_key_image_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_fee_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_transfer_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_fork_rules.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_wallet_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/serial_bridge_index.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/monero_send_routine.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/serial_bridge_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/src/tools__ret_vals.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/cryptonote_basic/cryptonote_basic_impl.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/cryptonote_basic/account.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/cryptonote_basic/cryptonote_format_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/crypto.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/hash.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/slow-hash-dummied.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/oaes_lib.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/crypto-ops.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/crypto-ops-data.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/keccak.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/chacha.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/random.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/aesb.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/tree-hash.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/hash-extra-blake.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/blake256.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/hash-extra-groestl.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/hash-extra-jh.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/hash-extra-skein.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/groestl.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/jh.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/crypto/skein.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/cryptonote_core/cryptonote_tx_utils.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/common/base58.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/common/threadpool.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/common/aligned.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/common/util.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/epee/src/hex.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/epee/src/string_tools.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/epee/src/memwipe.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/epee/src/mlocker.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/epee/src/wipeable_string.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/device/device.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/device/device_default.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/ringct/rctOps.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/ringct/rctTypes.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/ringct/rctCryptoOps.c.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/ringct/rctSigs.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/ringct/bulletproofs.cc.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/ringct/multiexp.cc.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/mnemonics/electrum-words.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/vtlogger/logger.cpp.o CMakeFiles/MyMoneroCoreCpp_WASM.dir/src/submodules/mymonero-core-cpp/contrib/monero-core-custom/contrib/libsodium/src/crypto_verify/verify.c.o boost/lib/libboost_chrono.a boost/lib/libboost_system.a boost/lib/libboost_thread.a /home/mwo2/.emscripten_cache/wasm/libc.a /home/mwo2/.emscripten_cache/wasm/libcompiler_rt.a /home/mwo2/.emscripten_cache/wasm/libc-wasm.a /home/mwo2/.emscripten_cache/wasm/libc++.a --whole-archive /home/mwo2/.emscripten_cache/wasm/libc++abi.a /home/mwo2/.emscripten_cache/wasm/libembind-rtti.a --no-whole-archive /home/mwo2/.emscripten_cache/wasm/libdlmalloc.a /home/mwo2/.emscripten_cache/wasm/libpthread_stub.a /home/mwo2/.emscripten_cache/wasm/libc_rt_wasm.a /home/mwo2/.emscripten_cache/wasm/libsockets.a --allow-undefined --import-memory --import-table -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --strip-debug --export __wasm_call_ctors --export __data_end --export main --export __cxa_demangle --export malloc --export free --export setThrew --export __errno_location --export fflush --export _get_tzname --export _get_daylight --export _get_timezone --export emscripten_main_thread_process_queued_calls -z stack-size=5242880 --initial-memory=16777216 --no-entry --global-base=1024' failed (1)
make[2]: *** [CMakeFiles/MyMoneroCoreCpp_WASM.dir/build.make:970: MyMoneroCoreCpp_WASM.js] Error 1
make[2]: Leaving directory '/tmp/mymonero-core-js/build'
make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/MyMoneroCoreCpp_WASM.dir/all] Error 2
make[1]: Leaving directory '/tmp/mymonero-core-js/build'
make: *** [Makefile:84: all] Error 2

For now I think the easiest thing is not to use 1.39 version of Emscripten.

devinpearson commented 1 year ago

Boost is now brought in during the build process and does not need to be compiled separately.