Skip to content

Migrate wasmtime to wasmtime-cpp-api#503

Draft
leonm1 wants to merge 14 commits intoproxy-wasm:mainfrom
leonm1:api/wasmtime
Draft

Migrate wasmtime to wasmtime-cpp-api#503
leonm1 wants to merge 14 commits intoproxy-wasm:mainfrom
leonm1:api/wasmtime

Conversation

@leonm1
Copy link
Contributor

@leonm1 leonm1 commented Mar 2, 2026

Hides many of the implementation details of the wasm-c-api.

Implements memory limiting and execution termination for wasmtime.

Built off of #502.

@leonm1 leonm1 force-pushed the api/wasmtime branch 3 times, most recently from 40e3040 to 68ebe57 Compare March 2, 2026 15:34
Copy link
Member

@PiotrSikora PiotrSikora left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implements memory limiting and execution termination for wasmtime.

Could you split this off into a separate PR? I think it's just a few lines, so it should be doable, and I think those changes warrant a proper review instead of being bundled in this mass refactor. Thanks!

leonm1 added 11 commits March 11, 2026 16:14
Always uses prefixed wasmtime-c-api-impl, otherwise the prefixed
implementation bitrots. Prefixes the headers in the repo rule to allow
for globbing, which is not possible in a genrule.

The crates_vendor-provided wasmtime-c-api-impl provided build allows us
to upgrade wasmtime solely by changing the version number in the
Cargo.toml file (and the corresponding repo in bazel/repositories.bzl
for the C headers).

Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
CMake is used by the wasm-c-api crate's build.rs.

Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
leonm1 added 3 commits March 11, 2026 22:32
Updating wasmtime updated a dependency used by wasmsign to an incompatible version. They're not used as part of the same build, so separate their dependency graphs by giving wasmsign its own repo name.

Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Hides many of the implementation details of the wasm-c-api.

Note: adds `wat` feature to wasmtime c headers to fix the following build error, but note that `wat` support is not enabled in the wasmtime build, this just adds the headers to allow the cpp api to compile.

```
external/com_github_bytecodealliance_wasmtime/crates/c-api/include/wasmtime/module.hh:39:17: error: use of undeclared identifier 'wat2wasm'
   39 |     auto wasm = wat2wasm(wat);
      |                 ^
1 error generated.
```

Signed-off-by: Matt Leon <mattleon@google.com>
Comment on lines -229 to -287
genrule(
name = "prefixed_wasmtime_sources",
srcs = [
"src/wasmtime/types.h",
"src/wasmtime/wasmtime.cc",
],
outs = [
"src/wasmtime/prefixed_types.h",
"src/wasmtime/prefixed_wasmtime.cc",
],
cmd = """
for file in $(SRCS); do
sed -e 's/wasm_/wasmtime_wasm_/g' \
-e 's/include\\/wasm.h/include\\/prefixed_wasm.h/g' \
-e 's/wasmtime\\/types.h/wasmtime\\/prefixed_types.h/g' \
$$file >$(@D)/$$(dirname $$file)/prefixed_$$(basename $$file)
done
""",
)

cc_library(
name = "prefixed_wasmtime_lib",
srcs = [
"src/common/types.h",
"src/wasmtime/prefixed_types.h",
"src/wasmtime/prefixed_wasmtime.cc",
],
hdrs = ["include/proxy-wasm/wasmtime.h"],
copts = [
"-DWASM_API_EXTERN=",
],
defines = [
"PROXY_WASM_HAS_RUNTIME_WASMTIME",
"PROXY_WASM_HOST_ENGINE_WASMTIME",
],
# See: https://bytecodealliance.github.io/wasmtime/c-api/
linkopts = select({
"@platforms//os:macos": [],
"@platforms//os:windows": [
"ws2_32.lib",
"advapi32.lib",
"userenv.lib",
"ntdll.lib",
"shell32.lib",
"ole32.lib",
"bcrypt.lib",
],
"//conditions:default": [
"-ldl",
"-lm",
"-lpthread",
],
}),
deps = [
":wasm_vm_headers",
"@com_github_bytecodealliance_wasmtime//:prefixed_wasmtime_lib",
],
)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sholdn't this be part of #501?

Copy link
Member

@PiotrSikora PiotrSikora left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uhm, looking at the passed arguments in failed tests, it seems like some endianness conversions are broken.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants