From 9c441d44d9af71d55972847bb3a2b4a75219e1ad Mon Sep 17 00:00:00 2001 From: vkensou Date: Sat, 30 Aug 2025 17:12:01 +0800 Subject: [PATCH 1/4] fix for msvc c++20 --- include/cmcpp/context.hpp | 4 ++-- include/cmcpp/lift.hpp | 2 +- include/cmcpp/lower.hpp | 2 +- include/cmcpp/traits.hpp | 36 ++++++++++++++++++++++++++---------- include/wamr.hpp | 2 +- 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/include/cmcpp/context.hpp b/include/cmcpp/context.hpp index 5eb1e4d..6b5f7c7 100644 --- a/include/cmcpp/context.hpp +++ b/include/cmcpp/context.hpp @@ -109,14 +109,14 @@ namespace cmcpp public: CanonicalOptions opts; ComponentInstance inst; - func_t ft; + func_t ft; std::optional supertask; std::optional> on_return; std::function(std::future)> on_block; int num_borrows = 0; ContextLocalStorage context(); - Task(CanonicalOptions &opts, ComponentInstance &inst, func_t &ft, std::optional &supertask = std::nullopt, std::optional> &on_return = std::nullopt, std::function(std::future)> &on_block = std::nullopt) + Task(CanonicalOptions &opts, ComponentInstance &inst, func_t &ft, std::optional &supertask = std::nullopt, std::optional> &on_return = std::nullopt, std::function(std::future)> &on_block = std::nullopt) : opts(opts), inst(inst), ft(ft), supertask(supertask), on_return(on_return), on_block(on_block) {} }; diff --git a/include/cmcpp/lift.hpp b/include/cmcpp/lift.hpp index bf89780..4316159 100644 --- a/include/cmcpp/lift.hpp +++ b/include/cmcpp/lift.hpp @@ -53,7 +53,7 @@ namespace cmcpp } template - inline T lift_flat_values(const LiftLowerContext &cx, uint max_flat, const CoreValueIter &vi) + inline T lift_flat_values(const LiftLowerContext &cx, uint32_t max_flat, const CoreValueIter &vi) { auto flat_types = ValTrait::flat_types; if (flat_types.size() > max_flat) diff --git a/include/cmcpp/lower.hpp b/include/cmcpp/lower.hpp index 563bfff..c4dbca8 100644 --- a/include/cmcpp/lower.hpp +++ b/include/cmcpp/lower.hpp @@ -76,7 +76,7 @@ namespace cmcpp } template - inline WasmValVector lower_flat_values(LiftLowerContext &cx, uint max_flat, uint32_t *out_param, Ts &&...vs) + inline WasmValVector lower_flat_values(LiftLowerContext &cx, uint32_t max_flat, uint32_t *out_param, Ts &&...vs) { WasmValVector retVal = {}; // cx.inst.may_leave=false; diff --git a/include/cmcpp/traits.hpp b/include/cmcpp/traits.hpp index 85e0909..3448ef8 100644 --- a/include/cmcpp/traits.hpp +++ b/include/cmcpp/traits.hpp @@ -23,6 +23,14 @@ namespace cmcpp using bytes = uint32_t; using size = uint32_t; + static constexpr int ceil_log2(std::size_t n) { + return (n <= 1) ? 0 : 1 + ceil_log2((n + 1) / 2); + } + + static constexpr int ceil_div8(int bits) { + return (bits + 7) / 8; + } + enum class WasmValType : uint8_t { UNKNOWN, @@ -666,7 +674,7 @@ namespace cmcpp static constexpr ValType type = ValType::Variant; using inner_type = typename std::variant; - static constexpr int match = static_cast(std::ceil(std::log2(std::variant_size_v) / 8.0)); + static constexpr int match = ceil_div8(ceil_log2(std::variant_size_v)); using discriminant_type = std::conditional_t>>>; static constexpr uint32_t max_case_alignment = []() constexpr { @@ -696,18 +704,26 @@ namespace cmcpp ((i = std::max(i, ValTrait::flat_types.size())), ...); return i + 1; }(); + template + static constexpr void process_types(std::array& flat) + { + for (auto& ft : ValTrait::flat_types) { + if (StartIndex < flat_types_len) { + flat[StartIndex] = join(flat[StartIndex], ft); + process_types(flat); + } + } + } + template + static constexpr void process_types(std::array& flat) + { + } static constexpr std::array flat_types = []() constexpr { std::array flat; flat.fill(WasmValType::i32); flat[0] = ValTrait::flat_types[0]; - ([&]() - { - size_t i = 1; - for (auto &ft : ValTrait::flat_types) { - flat[i] = join(flat[i], ft); - ++i; - } }(), ...); + process_types<1, Ts...>(flat); return flat; }(); }; @@ -739,8 +755,8 @@ namespace cmcpp using enum_t = uint32_t; // Func -------------------------------------------------------------------- - constexpr uint MAX_FLAT_PARAMS = 16; - constexpr uint MAX_FLAT_RESULTS = 1; + constexpr uint32_t MAX_FLAT_PARAMS = 16; + constexpr uint32_t MAX_FLAT_RESULTS = 1; template struct func_t_impl; diff --git a/include/wamr.hpp b/include/wamr.hpp index 952e8ee..daae934 100644 --- a/include/wamr.hpp +++ b/include/wamr.hpp @@ -94,7 +94,7 @@ namespace cmcpp std::vector inputs = wasmVal2wam_val_t(lowered_args); constexpr size_t output_size = std::is_same::value ? 0 : 1; - wasm_val_t outputs[output_size]; + wasm_val_t outputs[output_size == 0 ? 1 : output_size]; bool success = wasm_runtime_call_wasm_a(exec_env, guest_func, output_size, outputs, From d777668d266e12c953144989c2f885b4bf2184b4 Mon Sep 17 00:00:00 2001 From: vkensou Date: Sat, 30 Aug 2025 17:13:13 +0800 Subject: [PATCH 2/4] add header guard --- include/wamr.hpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/include/wamr.hpp b/include/wamr.hpp index daae934..211bc51 100644 --- a/include/wamr.hpp +++ b/include/wamr.hpp @@ -1,15 +1,18 @@ +#ifndef CMCPP_WAMR_HPP +#define CMCPP_WAMR_HPP + #include "wasm_export.h" #include "cmcpp.hpp" namespace cmcpp { - void trap(const char *msg) + inline void trap(const char *msg) { throw new std::runtime_error(msg); } - std::vector wasmVal2wam_val_t(const WasmValVector &values) + inline std::vector wasmVal2wam_val_t(const WasmValVector &values) { std::vector result; result.reserve(values.size()); @@ -41,7 +44,7 @@ namespace cmcpp return result; } - WasmValVector wam_val_t2wasmVal(size_t count, const wasm_val_t *values) + inline WasmValVector wam_val_t2wasmVal(size_t count, const wasm_val_t *values) { WasmValVector result; result.reserve(count); @@ -121,7 +124,7 @@ namespace cmcpp }; } - std::pair convert(void *dest, uint32_t dest_byte_len, const void *src, uint32_t src_byte_len, Encoding from_encoding, Encoding to_encoding) + inline std::pair convert(void *dest, uint32_t dest_byte_len, const void *src, uint32_t src_byte_len, Encoding from_encoding, Encoding to_encoding) { if (from_encoding == to_encoding) { @@ -236,9 +239,11 @@ namespace cmcpp return symbol; } - bool host_module(const char *module_name, NativeSymbol *native_symbols, uint32_t n_native_symbols) + inline bool host_module(const char *module_name, NativeSymbol *native_symbols, uint32_t n_native_symbols) { return wasm_runtime_register_natives_raw(module_name, native_symbols, n_native_symbols); } } + +#endif \ No newline at end of file From eae9cad5e92d1828d6c6cc96090a7d7f713eaa03 Mon Sep 17 00:00:00 2001 From: vkensou Date: Tue, 2 Sep 2025 19:33:37 +0800 Subject: [PATCH 3/4] try fix windows build --- .gitmodules | 4 ++-- vcpkg_overlays/wasi-sdk/portfile.cmake | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index e124c15..c543b70 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,7 +6,7 @@ url = https://github.com/WebAssembly/component-model.git [submodule "ref/vscode-wasm"] path = ref/vscode-wasm - url = git@github.com:microsoft/vscode-wasm.git + url = https://github.com/microsoft/vscode-wasm.git [submodule "ref/wasm-micro-runtime"] path = ref/wasm-micro-runtime - url = git@github.com:bytecodealliance/wasm-micro-runtime.git + url = https://github.com/bytecodealliance/wasm-micro-runtime.git diff --git a/vcpkg_overlays/wasi-sdk/portfile.cmake b/vcpkg_overlays/wasi-sdk/portfile.cmake index 8d16cd8..46b61cb 100644 --- a/vcpkg_overlays/wasi-sdk/portfile.cmake +++ b/vcpkg_overlays/wasi-sdk/portfile.cmake @@ -17,7 +17,7 @@ elseif(WIN32) vcpkg_download_distfile(ARCHIVE URLS "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-${VERSION}-x86_64-windows.tar.gz" FILENAME "wasi-sdk-${VERSION}-x86_64-windows.tar.gz" - SHA512 e8bdae827dbbb967bf9815603aeff76ac40344c79cf6a1c388e63931c77cdc5560860c6f2ec74f3c7895fab08b93940f60e9e26365b6f4ba354ca3a921803be7 + SHA512 ee91880d1be2a9d2f3bd90c1893448c8861130a0726811de0f55f90394260aa4693f7efbee81de5bd599c4395fe26809642741033e8e062894c9c4dea249bae4 ) endif() From c71d3413a36b7d824f5b2937bf7a08513c2442dc Mon Sep 17 00:00:00 2001 From: vkensou Date: Tue, 2 Sep 2025 19:56:19 +0800 Subject: [PATCH 4/4] Revert "try fix windows build" This reverts commit eae9cad5e92d1828d6c6cc96090a7d7f713eaa03. --- .gitmodules | 4 ++-- vcpkg_overlays/wasi-sdk/portfile.cmake | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index c543b70..e124c15 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,7 +6,7 @@ url = https://github.com/WebAssembly/component-model.git [submodule "ref/vscode-wasm"] path = ref/vscode-wasm - url = https://github.com/microsoft/vscode-wasm.git + url = git@github.com:microsoft/vscode-wasm.git [submodule "ref/wasm-micro-runtime"] path = ref/wasm-micro-runtime - url = https://github.com/bytecodealliance/wasm-micro-runtime.git + url = git@github.com:bytecodealliance/wasm-micro-runtime.git diff --git a/vcpkg_overlays/wasi-sdk/portfile.cmake b/vcpkg_overlays/wasi-sdk/portfile.cmake index 46b61cb..8d16cd8 100644 --- a/vcpkg_overlays/wasi-sdk/portfile.cmake +++ b/vcpkg_overlays/wasi-sdk/portfile.cmake @@ -17,7 +17,7 @@ elseif(WIN32) vcpkg_download_distfile(ARCHIVE URLS "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-${VERSION}-x86_64-windows.tar.gz" FILENAME "wasi-sdk-${VERSION}-x86_64-windows.tar.gz" - SHA512 ee91880d1be2a9d2f3bd90c1893448c8861130a0726811de0f55f90394260aa4693f7efbee81de5bd599c4395fe26809642741033e8e062894c9c4dea249bae4 + SHA512 e8bdae827dbbb967bf9815603aeff76ac40344c79cf6a1c388e63931c77cdc5560860c6f2ec74f3c7895fab08b93940f60e9e26365b6f4ba354ca3a921803be7 ) endif()