|
|
|
cmake_minimum_required(VERSION 3.4.1)
|
|
|
|
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
|
|
|
|
|
|
project(MyMoneroCoreCpp)
|
|
|
|
#
|
|
|
|
include_directories("build/boost/include") # must exist already - run bin/build-boost-emscripten.sh
|
|
|
|
#
|
|
|
|
include_directories("src")
|
|
|
|
#
|
|
|
|
set(MYMONERO_CORE_CPP "src/submodules/mymonero-core-cpp")
|
|
|
|
set(MYMONERO_CORE_CPP_SRC "${MYMONERO_CORE_CPP}/src")
|
|
|
|
include_directories("${MYMONERO_CORE_CPP}/src")
|
|
|
|
#
|
|
|
|
set(MONERO_SRC "${MYMONERO_CORE_CPP}/contrib/monero-core-custom")
|
|
|
|
include_directories(${MONERO_SRC})
|
|
|
|
include_directories("${MONERO_SRC}/epee/include")
|
|
|
|
include_directories("${MONERO_SRC}/common")
|
|
|
|
include_directories("${MONERO_SRC}/vtlogger")
|
|
|
|
include_directories("${MONERO_SRC}/crypto")
|
|
|
|
include_directories("${MONERO_SRC}/cryptonote_basic")
|
|
|
|
include_directories("${MONERO_SRC}/multisig")
|
|
|
|
include_directories("${MONERO_SRC}/cryptonote_core")
|
|
|
|
include_directories("${MONERO_SRC}/cryptonote_protocol")
|
|
|
|
include_directories("${MONERO_SRC}/wallet")
|
|
|
|
include_directories("${MONERO_SRC}/rpc")
|
|
|
|
include_directories("${MONERO_SRC}/mnemonics")
|
|
|
|
include_directories("${MONERO_SRC}/contrib/libsodium/include") # support sodium/… paths
|
|
|
|
include_directories("${MONERO_SRC}/contrib/libsodium/include/sodium")
|
|
|
|
#
|
|
|
|
# keeping test files in a separate source directory
|
|
|
|
# file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} test/test_*.cpp)
|
|
|
|
#
|
|
|
|
set(
|
|
|
|
SRC_FILES
|
|
|
|
#
|
|
|
|
src/index.cpp
|
|
|
|
src/emscr_async_send_bridge.hpp
|
|
|
|
src/emscr_async_send_bridge.cpp
|
|
|
|
#
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_address_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_address_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_paymentID_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_paymentID_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_key_image_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_key_image_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_fee_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_fee_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_transfer_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_transfer_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_fork_rules.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_fork_rules.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_wallet_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_wallet_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/serial_bridge_index.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/serial_bridge_index.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_send_routine.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/monero_send_routine.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/serial_bridge_utils.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/serial_bridge_utils.cpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/tools__ret_vals.hpp
|
|
|
|
${MYMONERO_CORE_CPP_SRC}/tools__ret_vals.cpp
|
|
|
|
#
|
|
|
|
${MONERO_SRC}/cryptonote_basic/cryptonote_basic_impl.cpp
|
|
|
|
${MONERO_SRC}/cryptonote_basic/account.cpp
|
|
|
|
${MONERO_SRC}/cryptonote_basic/cryptonote_format_utils.cpp
|
|
|
|
${MONERO_SRC}/crypto/crypto.cpp
|
|
|
|
${MONERO_SRC}/crypto/hash.c
|
|
|
|
${MONERO_SRC}/crypto/slow-hash-dummied.cpp
|
|
|
|
${MONERO_SRC}/crypto/oaes_lib.c
|
|
|
|
${MONERO_SRC}/crypto/crypto-ops.c
|
|
|
|
${MONERO_SRC}/crypto/crypto-ops-data.c
|
|
|
|
${MONERO_SRC}/crypto/keccak.c
|
|
|
|
${MONERO_SRC}/crypto/chacha.c
|
|
|
|
${MONERO_SRC}/crypto/random.c
|
|
|
|
${MONERO_SRC}/crypto/aesb.c
|
|
|
|
${MONERO_SRC}/crypto/tree-hash.c
|
|
|
|
${MONERO_SRC}/crypto/hash-extra-blake.c
|
|
|
|
${MONERO_SRC}/crypto/blake256.c
|
|
|
|
${MONERO_SRC}/crypto/hash-extra-groestl.c
|
|
|
|
${MONERO_SRC}/crypto/hash-extra-jh.c
|
|
|
|
${MONERO_SRC}/crypto/hash-extra-skein.c
|
|
|
|
${MONERO_SRC}/crypto/groestl.c
|
|
|
|
${MONERO_SRC}/crypto/jh.c
|
|
|
|
${MONERO_SRC}/crypto/skein.c
|
|
|
|
${MONERO_SRC}/cryptonote_core/cryptonote_tx_utils.cpp
|
|
|
|
${MONERO_SRC}/common/base58.cpp
|
|
|
|
${MONERO_SRC}/common/threadpool.cpp
|
|
|
|
${MONERO_SRC}/common/aligned.c
|
|
|
|
${MONERO_SRC}/common/util.cpp
|
|
|
|
${MONERO_SRC}/epee/src/hex.cpp
|
|
|
|
${MONERO_SRC}/epee/src/string_tools.cpp
|
|
|
|
${MONERO_SRC}/epee/src/memwipe.c
|
|
|
|
${MONERO_SRC}/epee/src/mlocker.cpp
|
|
|
|
${MONERO_SRC}/epee/src/wipeable_string.cpp
|
|
|
|
${MONERO_SRC}/device/device.cpp
|
|
|
|
${MONERO_SRC}/device/device_default.cpp
|
|
|
|
${MONERO_SRC}/ringct/rctOps.cpp
|
|
|
|
${MONERO_SRC}/ringct/rctTypes.cpp
|
|
|
|
${MONERO_SRC}/ringct/rctCryptoOps.c
|
|
|
|
${MONERO_SRC}/ringct/rctSigs.cpp
|
|
|
|
${MONERO_SRC}/ringct/bulletproofs.cc
|
|
|
|
${MONERO_SRC}/ringct/multiexp.cc
|
|
|
|
${MONERO_SRC}/mnemonics/electrum-words.cpp
|
|
|
|
${MONERO_SRC}/vtlogger/logger.cpp
|
|
|
|
${MONERO_SRC}/contrib/libsodium/src/crypto_verify/verify.c
|
|
|
|
)
|
|
|
|
|
|
|
|
set(boost_DIR ${CMAKE_SOURCE_DIR}/build/boost)
|
|
|
|
|
|
|
|
add_library(boost_chrono STATIC IMPORTED)
|
|
|
|
set_target_properties(
|
|
|
|
boost_chrono PROPERTIES IMPORTED_LOCATION
|
|
|
|
${boost_DIR}/lib/libboost_chrono.a
|
|
|
|
)
|
|
|
|
add_library(boost_system STATIC IMPORTED)
|
|
|
|
set_target_properties(
|
|
|
|
boost_system PROPERTIES IMPORTED_LOCATION
|
|
|
|
${boost_DIR}/lib/libboost_system.a
|
|
|
|
)
|
|
|
|
#
|
|
|
|
add_library(boost_thread STATIC IMPORTED)
|
|
|
|
set_target_properties(
|
|
|
|
boost_thread PROPERTIES IMPORTED_LOCATION
|
|
|
|
${boost_DIR}/lib/libboost_thread.a
|
|
|
|
)
|
|
|
|
#
|
|
|
|
#
|
|
|
|
set (
|
|
|
|
EMCC_LINKER_FLAGS___BASE
|
|
|
|
#unsure if the -I...boost..include is necessary here due to include above
|
|
|
|
#
|
|
|
|
# TODO? does EXPORT_NAME need to be the same for both targets? (or should it be set per-target with …_WASM, …_ASMJS?)
|
|
|
|
"-Wall -std=c++11 \
|
|
|
|
--bind -s MODULARIZE=1 \
|
|
|
|
-s 'EXPORT_NAME=\"MyMoneroCoreCpp\"' \
|
|
|
|
--llvm-lto 1 \
|
|
|
|
-s ERROR_ON_UNDEFINED_SYMBOLS=0 \
|
|
|
|
-s ASSERTIONS=2 \
|
|
|
|
-s EXIT_RUNTIME=0 \
|
|
|
|
-s \"BINARYEN_TRAP_MODE='clamp'\" \
|
|
|
|
-s PRECISE_F32=1 \
|
|
|
|
-s DISABLE_EXCEPTION_CATCHING=0 \
|
|
|
|
-s EXCEPTION_DEBUG=1 \
|
|
|
|
-s DEMANGLE_SUPPORT=1 \
|
|
|
|
-s NO_DYNAMIC_EXECUTION=1 \
|
|
|
|
-s NODEJS_CATCH_EXIT=0 \
|
|
|
|
-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"UTF8ToString\"]' \
|
|
|
|
"
|
|
|
|
# • Disabling exception catching does not introduce silent failures
|
|
|
|
# • Probably don't need PRECISE_F32 but wouldn't want to not use it
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# -s SAFE_HEAP=1 \
|
|
|
|
# -g \
|
|
|
|
)
|
|
|
|
set(
|
|
|
|
EMCC_LINKER_FLAGS__ASMJS
|
|
|
|
"${EMCC_LINKER_FLAGS___BASE} \
|
|
|
|
-s WASM=0 \
|
|
|
|
-Os \
|
|
|
|
--separate-asm \
|
|
|
|
-s AGGRESSIVE_VARIABLE_ELIMINATION=1 \
|
|
|
|
-s ALLOW_MEMORY_GROWTH=0 \
|
|
|
|
--memory-init-file 0 \
|
|
|
|
-s SEPARATE_ASM_MODULE_NAME=asmjs \
|
|
|
|
"
|
|
|
|
# --memory-init-file is explicitly set to 0 because optimization level is Oz, and some clients like React Native have trouble loading .mem files
|
|
|
|
# .... it also didn't seem to have a giant impact on perf. but this should be tested again
|
|
|
|
#
|
|
|
|
# --closure 1 \
|
|
|
|
)
|
|
|
|
set(
|
|
|
|
EMCC_LINKER_FLAGS__WASM
|
|
|
|
"${EMCC_LINKER_FLAGS___BASE} \
|
|
|
|
-s WASM=1 \
|
|
|
|
-Oz \
|
|
|
|
-s ALLOW_MEMORY_GROWTH=1 \
|
|
|
|
--post-js ${CMAKE_CURRENT_LIST_DIR}/src/module-post.js \
|
|
|
|
"
|
|
|
|
# -g \
|
|
|
|
)
|
|
|
|
#
|
|
|
|
# -s EXPORTED_FUNCTIONS='[\"_sc_reduce\", \"_sc_reduce32\", \"_sc_check\", \"_sc_add\", \"_ge_fromfe_frombytes_vartime\", \"_ge_mul8\", \"_ge_p1p1_to_p3\", \"_ge_p3_tobytes\", \"_ge_scalarmult\", \"_ge_tobytes\", \"_sc_sub\", \"_sc_mulsub\", \"_ge_scalarmult_base\", \"_sc_0\", \"_ge_double_scalarmult_base_vartime\", \"_ge_double_scalarmult_precomp_vartime\", \"_ge_frombytes_vartime\", \"_ge_dsm_precomp\"]' \
|
|
|
|
#
|
|
|
|
#
|
|
|
|
message(STATUS "EMCC_LINKER_FLAGS__WASM ${EMCC_LINKER_FLAGS__WASM}")
|
|
|
|
message(STATUS "EMCC_LINKER_FLAGS__ASMJS ${EMCC_LINKER_FLAGS__ASMJS}")
|
|
|
|
#
|
|
|
|
add_executable(MyMoneroCoreCpp_WASM ${SRC_FILES})
|
|
|
|
add_executable(MyMoneroCoreCpp_ASMJS ${SRC_FILES})
|
|
|
|
#
|
|
|
|
set_target_properties(MyMoneroCoreCpp_WASM PROPERTIES LINK_FLAGS "${EMCC_LINKER_FLAGS__WASM}")
|
|
|
|
set_target_properties(MyMoneroCoreCpp_ASMJS PROPERTIES LINK_FLAGS "${EMCC_LINKER_FLAGS__ASMJS}")
|
|
|
|
#
|
|
|
|
# set_target_properties(MyMoneroCoreCpp_WASM PROPERTIES SUFFIX ".html")
|
|
|
|
# set_target_properties(MyMoneroCoreCpp_ASMJS PROPERTIES SUFFIX ".html")
|
|
|
|
#
|
|
|
|
# boost_atomic
|
|
|
|
# boost_date_time
|
|
|
|
# boost_filesystem
|
|
|
|
# boost_locale
|
|
|
|
# boost_program_options
|
|
|
|
# boost_regex
|
|
|
|
# boost_serialization
|
|
|
|
# boost_signals
|
|
|
|
# boost_timer
|
|
|
|
# boost_wserialization
|
|
|
|
#
|
|
|
|
target_link_libraries(
|
|
|
|
MyMoneroCoreCpp_WASM
|
|
|
|
#
|
|
|
|
boost_chrono
|
|
|
|
boost_system
|
|
|
|
boost_thread
|
|
|
|
#
|
|
|
|
${log-lib}
|
|
|
|
)
|
|
|
|
target_link_libraries(
|
|
|
|
MyMoneroCoreCpp_ASMJS
|
|
|
|
#
|
|
|
|
boost_chrono
|
|
|
|
boost_system
|
|
|
|
boost_thread
|
|
|
|
#
|
|
|
|
${log-lib}
|
|
|
|
)
|