From 05d595054ee8af093cc898954d2be910d09d9d15 Mon Sep 17 00:00:00 2001 From: Todd Fleming Date: Thu, 1 Jul 2021 22:40:12 -0400 Subject: [PATCH 01/90] wasm: zlib, gmp, openssl --- wasm/CMakeLists.txt | 97 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/wasm/CMakeLists.txt b/wasm/CMakeLists.txt index d23b2be43..434b05439 100644 --- a/wasm/CMakeLists.txt +++ b/wasm/CMakeLists.txt @@ -62,9 +62,104 @@ endfunction() add_clsdk_base_lib("") add_clsdk_base_lib("-debug") +set(DEP_URL https://github.com/eoscommunity/Eden/releases/download/deps) +set(GMP_ARCHIVE gmp-6.2.1.tar.zst) +set(GMP_EXTRACTED gmp-6.2.1) +set(OPENSSL_ARCHIVE openssl-1.1.1k.tar.gz) +set(OPENSSL_EXTRACTED openssl-1.1.1k) +set(ZLIB_ARCHIVE zlib-1.2.11.tar.gz) +set(ZLIB_EXTRACTED zlib-1.2.11) +set(DEP_PREFIX ${CMAKE_BINARY_DIR}/deps) + +function(download url archive) + if(NOT EXISTS ${archive}) + message("Downloading ${url}") + file(DOWNLOAD ${url} ${archive} + STATUS download_status + TIMEOUT 60 + SHOW_PROGRESS + TLS_VERIFY ON) + list(POP_BACK download_status BOOST_DOWNLOAD_STATUS_MSG) + if(NOT download_status EQUAL 0) + file(REMOVE ${archive}) + message(FATAL_ERROR "Download ${url} failed. ${BOOST_DOWNLOAD_STATUS_MSG}") + endif() + endif() +endfunction() + +# These builds are done at generation time so cmake's find_* commands can find them + +if(NOT EXISTS ${DEP_PREFIX}/lib/libz.a) + download(${DEP_URL}/${ZLIB_ARCHIVE} ${DEP_PREFIX}/${ZLIB_ARCHIVE}) + message("building zlib") + execute_process( + WORKING_DIRECTORY ${DEP_PREFIX} + COMMAND bash -c "\ + rm -rf ${ZLIB_EXTRACTED} \ + && tar xf ${ZLIB_ARCHIVE} \ + && cd ${ZLIB_EXTRACTED} \ + && export CC=${CMAKE_C_COMPILER} \ + && export CXX=${CMAKE_CXX_COMPILER} \ + && export AR=${CMAKE_AR} \ + && export RANLIB=${CMAKE_RANLIB} \ + && export CFLAGS=\"--sysroot=${CMAKE_SYSROOT}\" \ + && ./configure --prefix=${DEP_PREFIX} --static \ + && make -j \ + && make -j install \ + " + ) +endif() + +if(NOT EXISTS ${DEP_PREFIX}/lib/libgmp.a) + download(${DEP_URL}/${GMP_ARCHIVE} ${DEP_PREFIX}/${GMP_ARCHIVE}) + message("building gmp") + execute_process( + WORKING_DIRECTORY ${DEP_PREFIX} + COMMAND bash -c "\ + rm -rf ${GMP_EXTRACTED} \ + && tar xf ${GMP_ARCHIVE} \ + && cd ${GMP_EXTRACTED} \ + && ./configure \ + CC=${CMAKE_C_COMPILER} \ + CFLAGS=\"--sysroot=${CMAKE_SYSROOT} -D_WASI_EMULATED_SIGNAL\" \ + LDFLAGS=-lwasi-emulated-signal \ + --prefix=${DEP_PREFIX} \ + --host none \ + --disable-assembly \ \ + && make -j \ + && make -j install \ + " + ) +endif() + +if(NOT EXISTS ${DEP_PREFIX}/lib/libssl.a) + download(${DEP_URL}/${OPENSSL_ARCHIVE} ${DEP_PREFIX}/${OPENSSL_ARCHIVE}) + message("building openssl") + set(OPENSSL_BUILD_FLAGS "--sysroot=${CMAKE_SYSROOT} -D_WASI_EMULATED_SIGNAL -DNO_SYSLOG -DOPENSSL_NO_SECURE_MEMORY") + execute_process( + WORKING_DIRECTORY ${DEP_PREFIX} + COMMAND bash -c "\ + rm -rf ${OPENSSL_EXTRACTED} \ + && tar xf ${OPENSSL_ARCHIVE} \ + && cd ${OPENSSL_EXTRACTED} \ + && ./Configure linux-generic32 \ + --prefix=${DEP_PREFIX} \ + no-afalgeng no-asm no-dso no-shared no-sock no-tests no-threads no-ui \ + CC=${CMAKE_C_COMPILER} \ + CXX=${CMAKE_CXX_COMPILER} \ + AR=${CMAKE_AR} \ + RANLIB=${CMAKE_RANLIB} \ + CFLAGS=\"${OPENSSL_BUILD_FLAGS}\" \ + CXXFLAGS=\"${OPENSSL_BUILD_FLAGS}\" \ + && make -j install_dev install_engines \ + " + ) +endif() + add_subdirectory(../contracts contracts) -add_subdirectory(../libraries libraries) add_subdirectory(../external external) +add_subdirectory(../libraries libraries) +add_subdirectory(../programs programs) add_subdirectory(boost) add_subdirectory(atomicassets) add_subdirectory(atomicmarket) From 76c6f5f1e069302d4d82d5caaaf4cf274e12432d Mon Sep 17 00:00:00 2001 From: Todd Fleming Date: Thu, 1 Jul 2021 22:52:16 -0400 Subject: [PATCH 02/90] time_point: optional Z in json form --- libraries/abieos/include/eosio/stream.hpp | 11 ++++++++--- libraries/abieos/include/eosio/time.hpp | 10 ++++++++-- libraries/abieos/include/eosio/to_json.hpp | 14 ++++++++++---- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/libraries/abieos/include/eosio/stream.hpp b/libraries/abieos/include/eosio/stream.hpp index aef07aef9..e2b217903 100644 --- a/libraries/abieos/include/eosio/stream.hpp +++ b/libraries/abieos/include/eosio/stream.hpp @@ -81,7 +81,12 @@ namespace eosio void reverse() { std::reverse(data, pos); } }; - struct vector_stream + struct stream_base + { + static constexpr bool time_point_include_z = false; + }; + + struct vector_stream : stream_base { std::vector& data; vector_stream(std::vector& data) : data(data) {} @@ -99,7 +104,7 @@ namespace eosio } }; - struct fixed_buf_stream + struct fixed_buf_stream : stream_base { char* pos; char* end; @@ -132,7 +137,7 @@ namespace eosio } }; - struct size_stream + struct size_stream : stream_base { size_t size = 0; diff --git a/libraries/abieos/include/eosio/time.hpp b/libraries/abieos/include/eosio/time.hpp index 2e0c3019c..8497ce1b6 100644 --- a/libraries/abieos/include/eosio/time.hpp +++ b/libraries/abieos/include/eosio/time.hpp @@ -103,8 +103,11 @@ namespace eosio void from_json(time_point& obj, S& stream) { auto s = stream.get_string(); + auto pos = s.data(); + auto end = pos + s.size(); uint64_t utc_microseconds; - if (!eosio::string_to_utc_microseconds(utc_microseconds, s.data(), s.data() + s.size())) + if (!eosio::string_to_utc_microseconds(utc_microseconds, pos, end, false) || + !(pos == end || pos + 1 == end && *pos == 'Z')) { check(false, convert_json_error(eosio::from_json_error::expected_time_point)); } @@ -114,7 +117,10 @@ namespace eosio template void to_json(const time_point& obj, S& stream) { - return to_json(eosio::microseconds_to_str(obj.elapsed._count), stream); + if constexpr (S::time_point_include_z) + return to_json(eosio::microseconds_to_str(obj.elapsed._count) + "Z", stream); + else + return to_json(eosio::microseconds_to_str(obj.elapsed._count), stream); } /** diff --git a/libraries/abieos/include/eosio/to_json.hpp b/libraries/abieos/include/eosio/to_json.hpp index b4258399c..7ae85bb65 100644 --- a/libraries/abieos/include/eosio/to_json.hpp +++ b/libraries/abieos/include/eosio/to_json.hpp @@ -331,16 +331,22 @@ template void to_json(__int128 value, S& stream) { return int_to_js return result; } - template - std::string format_json(const T& t) + template