Commit Graph
100 Commits
Author SHA1 Message Date
YAMAMOTO TakashiandGitHub 46d4e248bb posix os_socket_accept: stop assuming socklen_t is unsigned int (#4488) 2025-07-17 08:04:13 +08:00
YAMAMOTO TakashiandMarcin Kolny db942f3aaf wasi_socket_ext.c: fix error reporting
do not return __WASI_ERRNO_xxx error code where 0/-1 is more appropriate.

most of them were not harmful because the value of
__WASI_ERRNO_SUCCESS is 0.

the one with __WASI_ERRNO_NOPROTOOPT in socket() is
a user-visible bug.

tested with wamr-wasi-extensions/samples/socket-tcp-udp.

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4474
2025-07-15 09:23:46 +02:00
YAMAMOTO TakashiandGitHub 2a952b371a wasi_socket_ext.c: fix the number of getaddrinfo results (#4466)
the case of zero results was especially broken.
2025-07-14 13:12:32 +08:00
YAMAMOTO TakashiandGitHub 2c4a660c4c posix os_socket_addr_resolve: relax compatibility check (#4469)
some getaddrinfo implementations sometimes return results with
ai_protocol=0.

cf. https://github.com/apache/nuttx/issues/16693

standard-wise, i couldn't find anything about ai_protocol in
susv4-2018 except the following text:

> The fields ai_family, ai_socktype, and ai_protocol shall be usable
> as the arguments to the socket() function to create a socket suitable
> for use with the returned address.

because ai_protocol is usually merely used to feed socket() and
socket() usually accepts 0, it's probably standard-wise ok for
getaddrinfo to return ai_protocol=0.
the major implementations of getaddrinfo (eg. kame) seem to return
specific values like ai_protocol=IPPROTO_TCP though.

anyway, for the purpose of this function, there is little point to
be strict on the host getaddrinfo behavior. this commit just relaxes
the check to be friendly to those getaddrinfo implementations.
2025-07-14 13:06:40 +08:00
YAMAMOTO TakashiandGitHub 53feadc2b0 lib-socket: implement getsockopt(SOL_SOCKET,SO_TYPE) (#4458)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4456
2025-07-14 13:06:33 +08:00
YAMAMOTO TakashiandGitHub 5d48cfdbc0 introduce wasm_runtime_instantiate_ex2 (#4444)
* introduce wasm_runtime_instantiate_ex2

at this point, just a slightly inefficiant functionality
equivalent of wasm_runtime_instantiate_ex.
however, unlike wasm_runtime_instantiate_ex, this one is designed
to be extendable without breaking the user-visible ABI.
because the definition of InstantiationArgs2 is not exposed to
users, we can safely add new members to it.

this commit also makes wasm_runtime_instantiate_ex a wrapper
of wasm_runtime_instantiate_ex2.

if this goes well, maybe it's a good idea to apply a similar
pattern to RuntimeInitArgs, LoadArgs, SharedHeapInitArgs, etc.
i started with InstantiationArgs just because i happen to have
a need to extend it for wasi-nn.

cf.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/4364
https://github.com/bytecodealliance/wasm-micro-runtime/issues/4331

* product-mini/platforms/posix: use wasm_runtime_instantiate_ex2
2025-07-14 13:06:23 +08:00
YAMAMOTO TakashiandGitHub 17be90d8f0 posix os_socket_addr_resolve: return the consistent max_info_size (#4467)
return the same value for max_info_size regardless of addr_info_size.
2025-07-10 13:42:57 +08:00
YAMAMOTO TakashiandGitHub 56f87b7ee9 wasi-nn: do not pretend to support legacy abi in openvino and llamacpp (#4468)
as tested by core/iwasm/libraries/wasi-nn/test/test_tensorflow.c,
the legacy "wasi_nn" abi uses the number of fp32 for get_output.
because these backends don't implement the abi, bail out explicitly
in build time.

cf.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/4376
2025-07-10 08:28:08 +08:00
YAMAMOTO TakashiandGitHub 933e49df18 appease a few compiler warnings (-Wstrict-prototypes) (#4465) 2025-07-10 08:28:00 +08:00
YAMAMOTO TakashiandGitHub fbd27e5e03 wasi_nn_llamacpp.c: explicitly reject unimplemented input index (#4446)
note: wasmedge seems to accept index 1 for metadata. we don't
implement it.
2025-07-09 10:35:46 +08:00
YAMAMOTO TakashiandGitHub 0eceed2ba9 wasi: avoid user-triggerable 0-sized allocations (#4452)
might fix https://github.com/bytecodealliance/wasm-micro-runtime/issues/4451
2025-07-08 09:25:50 +08:00
YAMAMOTO TakashiandGitHub ee056d8076 wasi_nn_llamacpp.c: validate input tensor type/dimensions (#4442) 2025-07-03 10:17:19 +08:00
YAMAMOTO TakashiandGitHub d598c0d0d3 CI: add wamr_wasi_extensions to the release assets (#4425)
you can find an example of the release asset at:
https://github.com/yamt/wasm-micro-runtime/releases/download/WAMR-2.3.999/wamr-wasi-extensions-2.3.999.zip

note: this is a static library for wasm32-wasi. no need to provide
per host OS (macOS, ubuntu, etc) binaries.
2025-07-01 19:32:01 +08:00
YAMAMOTO TakashiandGitHub da6019f749 wasi_nn_llamacpp.c: reject invalid graph and execution context (#4422)
* return valid graph and execution context instead of using stack garbage.
  (always 0 for now because we don't implement multiple graph/context
  for this backend.)

* validate user-given graph and execution context values. reject
  invalid ones.
2025-07-01 19:31:00 +08:00
YAMAMOTO TakashiandGitHub ebf1404ad1 wasi_nn_openvino.c: avoid self-assignment warning (#4434) 2025-07-01 19:19:36 +08:00
YAMAMOTO TakashiandGitHub 38fe056cc6 wasi-nn: reduce code duplication a bit (#4433) 2025-07-01 10:37:12 +08:00
YAMAMOTO TakashiandGitHub 4fbb372f15 CI: revert SGX retry attempts (#4421)
* Revert "Improve spec test execution by adding retry logic for transient errors (#4393)"

This reverts commit 64cafaff1e.

* Revert "Add error handling for sgx ci (#4222)"

This reverts commit 8ad47897d1.
2025-06-30 12:58:20 +08:00
YAMAMOTO TakashiandGitHub 7a6a6a39e9 wasi_nn_openvino.c: fix a debug build (#4416)
after "wasi_nn_openvino.c: implement multiple models per instance" change.
(https://github.com/bytecodealliance/wasm-micro-runtime/pull/4380)
2025-06-30 12:57:44 +08:00
YAMAMOTO TakashiandGitHub 18d4227ab6 CI: build wamr-wasi-extensions (#4394)
* wamr-wasi-extensions: separate test scripts
also, allow to specify the prefix directory.
for the convenience of the CI.

* CI: build wamr-wasi-extensions
fragments are copied from compilation_on_macos.yml.
(thus intel copyright notice)
2025-06-27 12:28:46 +08:00
YAMAMOTO TakashiandGitHub 8ed89e2ab2 wasi_nn_llamacpp.c: remove an unused variable (#4415) 2025-06-27 11:55:08 +08:00
YAMAMOTO TakashiandGitHub d6876f1e9f wasi_nn_llamacpp.c: fix buffer overruns in set_input (#4420)
note: for some reasons, wasmedge seems to ignore type/dimensions
for the input of ggml. some user code relies on it.
cf. https://github.com/second-state/WasmEdge-WASINN-examples/issues/196

note: despite the comment in our code, the input doesn't seem
nul-terminated.
2025-06-27 11:51:03 +08:00
YAMAMOTO TakashiandGitHub 2372a472aa wasi-nn: make the host use the wasi_ephemeral_nn version of tensor_data (#4411)
the motivations:

* make the actual input size available to the backends.
  (currently the backends have to make a guess from shape/type.)

* make the host logic look a bit similar to wasi_ephemeral_nn.

this is a backend api/abi change.
2025-06-27 07:41:42 +08:00
YAMAMOTO TakashiandGitHub a7aae9d2cc wasi_nn_llamacpp.c: make this compilable (#4403) 2025-06-26 07:05:45 +08:00
YAMAMOTO TakashiandGitHub 8289452abb wasi_nn_tensorflowlite.cpp: fix get_output return size (#4390)
it should be byte size, not the number of (fp32) values.

i'm ambivalent about how to deal with the compatibility for
the legacy wamr-specific "wasi_nn". for now, i avoided changing it.
(so that existing tests using the legacy abi, namely test_tensorflow.c
and test_tensorflow_quantized.c, passes as they are.)
if we have any users who still want to use the legacy abi,
i suppose they consider the compatibility is more important
than the consistency with other backends.

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4376
2025-06-24 20:38:19 +08:00
YAMAMOTO TakashiandGitHub 70c39bae77 wasi-nn: fix context lifetime issues (#4396)
* wasi-nn: fix context lifetime issues

use the module instance context api instead of trying to roll
our own with a hashmap. this fixes context lifetime problems mentioned in
https://github.com/bytecodealliance/wasm-micro-runtime/issues/4313.

namely,

* wasi-nn resources will be freed earlier now. before this change,
  they used to be kept until the runtime shutdown. (wasm_runtime_destroy)
  after this change, they will be freed together with the associated
  instances.

* wasm_module_inst_t pointer uniqueness assumption (which is wrong
  after wasm_runtime_deinstantiate) was lifted.

as a side effect, this change also makes a context shared among threads
within a cluster. note that this is a user-visible api/abi breaking change.
before this change, wasi-nn "handles" like wasi_ephemeral_nn_graph were
thread-local. after this change, they are shared among threads within
a cluster, similarly to wasi file descriptors. spec-wise, either behavior
should be ok simply because wasi officially doesn't have threads yet.
althogh i feel the latter semantics is more intuitive, if your application
depends on the thread-local behavior, this change breaks your application.

tested with wamr-wasi-extensions/samples/nn-cli, modified to
call each wasi-nn operations on different threads. (if you are
interested, you can find the modification at
https://github.com/yamt/wasm-micro-runtime/tree/yamt-nn-wip-20250619.)

cf.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/4313
https://github.com/bytecodealliance/wasm-micro-runtime/issues/2430

* runtime_lib.cmake: enable WAMR_BUILD_MODULE_INST_CONTEXT for wasi-nn

as we do for wasi (WAMR_BUILD_LIBC_WASI)
2025-06-24 20:37:56 +08:00
YAMAMOTO TakashiandGitHub 92e5f5f123 CI: fix the description of upload_url (#4407) 2025-06-24 20:35:19 +08:00
YAMAMOTO TakashiandGitHub 7471d5a5d0 wamr-wasi-extensions/socket: disable reference-types (#4392)
and add a comment to explain why.
2025-06-20 15:50:48 +08:00
YAMAMOTO TakashiandGitHub f449b79a31 wasi_nn_openvino.c: implement multiple models per instance (#4380)
tested with two models:
```
--load-graph=id=graph1,file=public/license-plate-recognition-barrier-0007/FP32/license-plate-recognition-barrier-0007.xml,file=public/license-plate-recognition-barrier-0007/FP32/license-plate-recognition-barrier-0007.bin \
--load-graph=id=graph2,file=classify/model.xml,file=classify/model.bin \
--init-execution-context=id=exec1,graph-id=graph1 \
--init-execution-context=id=exec2,graph-id=graph2 \
--set-input=context-id=exec1,dim=1,dim=24,dim=94,dim=3,file=out.bin \
--set-input=context-id=exec2,file=classify/banana-3x224x224-bgr.bin,dim=1,dim=3,dim=224,dim=224 \
--compute=context-id=exec1 \
--compute=context-id=exec2 \
--get-output=context-id=exec1,file=exec1-result.bin \
--get-output=context-id=exec2,file=exec2-result.bin
```

a detailed HOWTO: https://github.com/bytecodealliance/wasm-micro-runtime/pull/4380#issuecomment-2986882718
2025-06-20 15:50:29 +08:00
YAMAMOTO TakashiandGitHub ea408ab6c0 wasi-nn: add minimum serialization on WASINNContext (#4387)
currently this is not necessary because context (WASINNContext) is
local to instance. (wasm_module_instance_t)

i plan to make a context shared among instances in a cluster when
fixing https://github.com/bytecodealliance/wasm-micro-runtime/issues/4313.
this is a preparation for that direction.

an obvious alternative is to tweak the module instance context APIs
to allow declaring some kind of contexts instance-local. but i feel,
in this particular case, it's more natural to make "wasi-nn handles"
shared among threads within a "process".

note that, spec-wise, how wasi-nn behaves wrt threads is not defined
at all because wasi officially doesn't have threads yet. i suppose, at
this point, that how wasi-nn interacts with wasi-threads is something
we need to define by ourselves, especially when we are using an outdated
wasi-nn version.

with this change, if a thread attempts to access a context while
another thread is using it, we simply make the operation fail with
the "busy" error. this is intended for the mimimum serialization to
avoid problems like crashes/leaks/etc. this is not intended to allow
parallelism or such.

no functional changes are intended at this point yet.

cf.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/4313
https://github.com/bytecodealliance/wasm-micro-runtime/issues/2430
2025-06-20 09:48:55 +08:00
YAMAMOTO TakashiandGitHub 71c07f3e4e deprecate legacy WAMR-specific "wasi_nn" module (#4382)
wasi_nn.h: deprecate legacy "wasi_nn"

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4326
2025-06-19 14:32:26 +08:00
YAMAMOTO TakashiandGitHub e5091e47ea enable WAMR_BUILD_WASI_EPHEMERAL_NN by default (#4381)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4326
2025-06-19 14:30:44 +08:00
YAMAMOTO TakashiandGitHub aa53d648fa wasi-nn: fix tensor_data abi for wasi_ephemeral_nn (#4379)
it's "(list u8)" in the witx definition.

the new definition matches both of our own host definition
(struct tensor_wasm) and wasmtime.

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4352
2025-06-19 14:18:36 +08:00
YAMAMOTO TakashiandGitHub a29f3943ef core/iwasm/libraries/wasi-nn/test: use the correct version of keras (#4383) 2025-06-18 19:24:06 +08:00
YAMAMOTO TakashiandGitHub db7714f0f5 wasi_nn_tensorflowlite.cpp: reject non-fp32 input earlier (#4388)
this backend assumes fp32 here and there.
it's safer to reject unexpected inputs explicitly.
2025-06-18 19:08:57 +08:00
YAMAMOTO TakashiandGitHub 4bf799c3af core/iwasm/libraries/wasi-nn/test/build.sh: add a tip for intel mac (#4389)
i keep forgetting this and had to re-investigate it at least twice.
hopefully this can be helpful for others too.
2025-06-18 19:06:57 +08:00
YAMAMOTO TakashiandGitHub cba9001749 wasi-nn: don't try to deinit uninitialized backend (#4375)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4339
2025-06-17 17:40:53 +08:00
YAMAMOTO TakashiandGitHub 4ebd1bb597 wasi-nn: apply the shared library hack to darwin as well (#4374)
copied from the linux version.

i'm a bit skeptical with this workaround though.
it might be simpler to prohibit the use of wamr api in these
shared libraries. after all, what these libraries do is nothing
specific to wasm.
2025-06-17 17:40:23 +08:00
YAMAMOTO TakashiandGitHub b3ce192e1a add nn-cli example (#4373)
an example application with flexible cli options which
aims to allow us to perform any wasi-nn operations.

eg.
```
--load-graph=file=fixture/model.xml,file=fixture/model.bin,id=graph
--init-execution-context=graph-id=graph,id=ctx
--set-input=file=fixture/tensor.bgr,context-id=ctx,dim=1,dim=3,dim=224,dim=224
--compute=context-id=ctx
--get-output=context-id=ctx,file=output.bin
```
2025-06-17 17:39:34 +08:00
YAMAMOTO TakashiandGitHub c9b8c16088 wasi_nn_openvino.c: remove pre/postprocessing and layout assumptions (#4361)
as wasi-nn doesn't have these concepts, the best we can do without
risking breaking certain applications here is to pass through tensors
as they are.

this matches wasmtime's behavior.

tested with:

* wasmtime classification-example
  (with this change, this example fails on tensor size mismatch
  instead of implicitly resizing it.)

* license-plate-recognition-barrier-0007, a converted version
  with non-fp32 output. [1]
  (with this change, this model outputs integers as expected.)

[1] https://github.com/openvinotoolkit/open_model_zoo/tree/cd7ebe313b69372763e76b82e5d24935308fece4/models/public/license-plate-recognition-barrier-0007
2025-06-17 13:01:46 +08:00
YAMAMOTO TakashiandGitHub 2f0750a6fe wasi_nn_openvino.c: add a missing buffer overflow check in get_output (#4353)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4351
2025-06-17 11:17:00 +08:00
YAMAMOTO TakashiandGitHub 20be1d33fe wasi_ephemeral_nn.h: prefix identfiers to avoid too generic names (#4358) 2025-06-17 11:15:01 +08:00
YAMAMOTO TakashiandGitHub 05e3a09150 wamr-wasi-extensions: add lib-socket things (#4360) 2025-06-17 11:13:43 +08:00
YAMAMOTO TakashiandGitHub 745da82cd6 wasi_nn_openvino.c: remove broken xml check (#4365)
`xml.buf[xml.size]` check is broken because it accesses past
the end of the buffer.

anyway, openvino doesn't seem to care the NUL termination.
2025-06-17 11:02:36 +08:00
YAMAMOTO TakashiandGitHub 0d001c4c38 wasi-nn: fix backend leak on multiple loads (#4366)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4340
2025-06-17 11:01:07 +08:00
YAMAMOTO TakashiandGitHub 5478d267f4 wasi_nn_openvino.c: remove the tensor layout adjustment logic (#4308)
the logic in question seems like an attempt to work around
some application bugs.
my wild guess is that it was for classification-example.
cf. https://github.com/bytecodealliance/wasmtime/issues/10867
2025-06-12 09:34:14 +08:00
YAMAMOTO TakashiandGitHub 3a087c4244 wamr-wasi-extensions: add a cmake package to provide our wasi extension (#4344)
* wasi_ephemeral_nn.h: add a convenience wrapper header
* wamr-wasi-extensions: add a cmake package to provide our wasi extension

the sample app was tested with:
* wasmtime
* iwasm with https://github.com/bytecodealliance/wasm-micro-runtime/pull/4308

currently only contains wasi-nn.
maybe it makes sense to add lib-socket things as well.

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4288
2025-06-12 09:33:25 +08:00
YAMAMOTO TakashiandGitHub c932597057 wasi_nn_types.h: remove a seemingly stale comment (#4348) 2025-06-12 09:29:59 +08:00
YAMAMOTO TakashiandGitHub 7f968f5926 wasi_socket_ext.c: avoid tls to make this library-friendly (#4338) 2025-06-11 07:46:35 +08:00
YAMAMOTO TakashiandGitHub ea5757f1d7 wasi-nn: do not assign wasi_nn_ctx->backend multiple times (#4329) 2025-06-09 11:36:31 +08:00
YAMAMOTO TakashiandGitHub 4d6b8dcd5d wasi_nn.h: make this compatible with wasi_ephemeral_nn (#4330)
- wasi_nn.h: make this compatible with wasi_ephemeral_nn
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4323

- fix WASM_ENABLE_WASI_EPHEMERAL_NN build
this structure is used by host logic as well.
ideally definitions for wasm and host should be separated.
until it happens, check __wasm__ to avoid the breakage.
2025-06-09 11:36:05 +08:00
YAMAMOTO TakashiandGitHub 933f8124b0 wasi-nn: fix the size of tensor->type (#4333)
* this enum is (@witx tag u8) in witx
* it seems that some wasm modules actually use non-zero padding
  and cause errors
* it's a bad practice to use C enum for ABI description anyway
2025-06-06 15:08:18 +08:00
YAMAMOTO TakashiandGitHub 769d16eaab wasi-nn: move some host-only things out of wasi_nn_types.h (#4334)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4324
2025-06-06 15:07:29 +08:00
YAMAMOTO TakashiandGitHub 79cb4366ae wasi-nn: remove unused wasi_nn_dump_tensor_dimension prototype (#4325) 2025-06-05 09:48:28 +08:00
YAMAMOTO TakashiandGitHub b20ebc2724 wasi_nn.h: add import_name attribute (#4328)
this would fix undefined symbol errors by making it clear
these functions are imported.

references:
https://github.com/llvm/llvm-project/blob/e2c698c7e836306f1a25c67597ae9e25a1fcc575/llvm/lib/MC/WasmObjectWriter.cpp#L1798-L1799
https://github.com/llvm/llvm-project/blob/e2c698c7e836306f1a25c67597ae9e25a1fcc575/llvm/lib/Object/WasmObjectFile.cpp#L749-L752
https://github.com/llvm/llvm-project/blob/e2c698c7e836306f1a25c67597ae9e25a1fcc575/lld/wasm/Symbols.cpp#L203
https://github.com/llvm/llvm-project/blob/e2c698c7e836306f1a25c67597ae9e25a1fcc575/lld/wasm/Relocations.cpp#L36-L40
2025-06-05 09:48:00 +08:00
YAMAMOTO TakashiandGitHub 85efe08431 wasi-nn: protect the backend lookup table with a lock (#4319)
this would avoid potential issues when multiple instances happen to
make an attempt to load a backend at the same time.

Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/4314
2025-06-05 09:19:46 +08:00
YAMAMOTO TakashiandGitHub 6a00874f2f wasi_nn_openvino.c: make this buildable (#4305) 2025-06-03 13:28:13 +08:00
YAMAMOTO TakashiandGitHub 61cb97221e wasi-nn: fix shared library filenames for macOS (#4306)
tested with openvino
2025-06-03 13:23:19 +08:00
YAMAMOTO TakashiandGitHub ae6e490ad5 fix wasi-nn abi definitions (#4307)
sync with a more appropriate version of the definitions.

as we use the "wasi_ephemeral_nn", which is p1-based, it seems
more appropriate to use definitions from witx, not wit.

it's a bit unfortunate p2-based wasi-nn made gratuitous changes
like this from p1.

note: this is an ABI change.
2025-06-03 13:22:48 +08:00
YAMAMOTO TakashiandGitHub 16c46751ac wasi-nn: remove "backends" argument from detect_and_load_backend() (#4309)
it seems meaningless and quite confusing to access a table with
two aliases ("lookup" and "backends") within a function.

no functional changes are intended.
2025-06-03 13:22:27 +08:00
YAMAMOTO TakashiandGitHub 1c12a32066 wasi_nn_openvino.c: fix a few printf formats (#4310) 2025-06-03 13:21:32 +08:00
YAMAMOTO TakashiandGitHub 782c69fe8a Revert the location to install public headers (#4295)
This partly reverts "Cmake improvements".
(https://github.com/bytecodealliance/wasm-micro-runtime/pull/4076)

Recently we changed the location to install public headers.
For example,
Old: include/wasm_export.h
New: include/iwasm/wasm_export.h

For cmake-based user applications using find_package(iwasm),
the cmake package, namely target_include_directories(INSTALL_INTERFACE),
is expected to add necessary compiler options like -isystem automatically.
(See samples/printversion for an example of such user applications.)

However, in reality, not every user application uses cmake.
This commit reverts the location to install public headers
for now, to avoid breakage for non-cmake user applications.

In case we want to re-apply the location change in future,
we should better communicate to the users. (eg. document
migration proceduces in release notes.)

Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/4290

References:
https://cmake.org/cmake/help/latest/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.html
2025-05-28 09:05:29 +08:00
YAMAMOTO TakashiandGitHub 6659a312cf add a sample to use cmake package (#4291)
- add a sample to use cmake package
2025-05-23 16:56:21 +08:00
YAMAMOTO TakashiandGitHub 477d66d00f product-mini/platforms/windows: set C++17 explicitly (#4269)
The recent LLVM uses std::optional, which is C++17.
2025-05-13 12:40:24 +08:00
YAMAMOTO TakashiandGitHub 510bb11f4a CI: make macos' build_samples_wasm_c_api similar to ubuntu (#4253) 2025-05-09 17:38:48 +08:00
YAMAMOTO TakashiandGitHub 908838a5b5 build-scripts/build_llvm.py: bump to llvm 18 (#4259)
* build-scripts/build_llvm.py: bump to llvm 18

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4210

why not 20?
because, as of writing this, 19 is the latest released version for
the xtensa fork of llvm: https://github.com/espressif/llvm-project

why not 19?
because of a bug in the xtensa fork of llvm:
https://github.com/espressif/llvm-project/issues/112

while we can use different versions for different targets,
it's nicer to use the same version everywhere when possible.

* spec-test-script/runtest.py: --size-level=0 for x86-64

with the recent version of LLVM, wamrc --size-level=1 often
generates R_X86_64_32S relocations which fail on load with
the infamous error:

"relocation truncated to fit R_X86_64_32S failed"

it seems that these relocations are often for jump tables.

this commit workarounds it with --size-level=0.

an alternative is to disable jump tables. (although it seems that
jump tables are not the only source of these relocations.)

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3035

it might be better to do this in wamrc itself. however, currently
target info is not available there in case of native compilation.
related: https://github.com/bytecodealliance/wasm-micro-runtime/issues/3356

* wamr-compiler: size_level=0 for sgx mode

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3035
2025-05-09 17:14:02 +08:00
YAMAMOTO TakashiandGitHub 6aa223dbf3 Stop pretending to support extended-const proposal (#4258)
As far as I know, we don't implement the proposal at all.

```
spacetanuki% wasm2wat --enable-all data.28.wasm
(module
  (memory (;0;) 1)
  (data (;0;) (i32.const 42
    i32.const 0
    i32.sub) ""))
spacetanuki% toywasm --load data.28.wasm
spacetanuki% ~/git/wasm-micro-runtime/product-mini/platforms/darwin/b.classic/iwasm data.28.wasm
WASM module load failed: illegal opcode or constant expression required or type mismatch
spacetanuki%
```

data.28.wasm in the above example is a binary version of:
https://github.com/WebAssembly/extended-const/blob/8d4f6aa2b00a8e7c0174410028625c6a176db8a1/test/core/data.wast#L184-L187
2025-05-09 09:29:06 +08:00
YAMAMOTO TakashiandGitHub 0a8994a2d5 aot_resolve_object_relocation_group: adapt to LLVM 19 (#4254)
cf.
https://github.com/llvm/llvm-project/pull/95031
https://github.com/llvm/llvm-project/pull/89693
2025-05-08 10:34:04 +08:00
YAMAMOTO TakashiandGitHub f88718d705 JIT: don't join worker threads twice (#4252)
in case of WASM_ENABLE_LAZY_JIT==0, compile_jit_functions should
have already joined these threads. joining them again here is
an undefined behavior.
2025-05-08 10:24:55 +08:00
YAMAMOTO TakashiandGitHub 88b5f6a535 samples/wasm-c-api: remove unused valgrind detection (#4249)
- it's unused
- valgrind is basically a linux-only software.
  it isn't a good idea to make it a hard requirement.
  if we want to use valgrind, it's better to introduce
  a separate option to control it.
2025-05-07 11:32:29 +08:00
YAMAMOTO TakashiandGitHub ac2fe552d5 aot_resolve_object_relocation_group: adapt to LLVM 16 (#4250)
cf. https://reviews.llvm.org/D123264
2025-05-07 11:32:14 +08:00
YAMAMOTO TakashiandGitHub bb36a43fa4 riscv: avoid llvm.cttz.i32/i64 for xip (#4248)
LLVM 16 and later expands cttz intrinsic to a table lookup,
which involves some relocations. (unless ZBB is available,
in which case the native instructions are preferred over
the table-based lowering.)

cf. https://reviews.llvm.org/D128911
2025-05-07 09:42:51 +08:00
YAMAMOTO TakashiandGitHub 1996c18c4b samples/wasm-c-api: skip aot compilation unless necessary (#4239) 2025-05-07 07:09:44 +08:00
YAMAMOTO TakashiandGitHub 4735956eeb fix return types of our 64-bit clz/ctz/popcount intrinsics (#4238)
the corresponding LLVM intrinsics' return types are same as
their first argument. eg. i64 for llvm.cttz.i64.
cf. https://llvm.org/docs/LangRef.html#llvm-cttz-intrinsic

this commit changes the return types of our versions of the
intrinsics to match llvm versions as our aot compiler,
specifically __call_llvm_intrinsic, assumes.

strictly speaking, this is a potential AOT ABI change.
however, I suppose it isn't a problem for many of 64-bit ABIs
out there, where (lower half of) a 64-bit register is used to
return a 32-bit value anyway.  (for such ABIs, this commit
would fix the upper 32-bit value of the register.)
2025-05-06 10:15:00 +08:00
YAMAMOTO TakashiandGitHub 382aa9e6c3 run_clang_format_diff: mention homebrew for clang-format installation (#4237) 2025-05-06 06:55:42 +08:00
YAMAMOTO TakashiandGitHub 3232bdf2f7 teach aot emitter/loader about .srodata and .srodata.cst* sections (#4240)
LLVM 19 and later started to use srodata ("small read only data")
sections for RISCV.  cf. https://github.com/llvm/llvm-project/pull/82214
this commit makes our aot emitter/loader deal with those sections.

an alternative would be to disable small data sections completely by
setting the "SmallDataLimit" module attribute to zero. however, i feel
this commit is more straightforward and consisitent as we are already
dealing with sdata sections.
2025-05-06 06:55:35 +08:00
YAMAMOTO TakashiandGitHub 84767f9121 wamrc: add --disable-llvm-jump-tables option (#4224)
while ideally a user should not need to care this kind of
optimization details, in reality i guess it's sometimes useful.
both of clang and GCC expose a similar option.  (-fno-jump-tables)
2025-04-28 16:43:53 +08:00
YAMAMOTO TakashiandGitHub 6593b3f347 LLVMCreateTargetMachineWithOpts: disable large data (#4220)
for x86-64, llvm 17 and later sometimes uses "l" prefix
for data sections.
cf. https://github.com/llvm/llvm-project/commit/43249378da67319906cf04f2c6cd38df141f3bf6

because our aot file emitter/loader doesn't support such
sections, it ends up with load-time errors solving symbols like ".lrodata".

this commit fixes it by avoid placing data in the large data sections.

references:
https://groups.google.com/g/x86-64-abi/c/jnQdJeabxiU
https://github.com/llvm/llvm-project/commit/1feb00a28c9fdab162da08a15fcc9d088a36c352
2025-04-27 11:48:57 +08:00
YAMAMOTO TakashiandGitHub c2d7fa30df LLVM: don't verify instcombine fixpoint (#4219)
LLVM 18 and later, instcombine perfoms only one iteration.
it performs extra "verify fixpoint" operation when instcombine
is specified in certain ways, including how we do so here.
a problem is that the verification raises a fatal error when it
finds we didn't reach a fixpoint:

    LLVM ERROR: Instruction Combining did not reach a fixpoint
    after 1 iterations

while it should be rare, it's quite normal not to reach a fixpoint.
this commit fixes the issue by simply disabing the verification.

cf. https://github.com/llvm/llvm-project/commit/41895843b5915bb78e9d02aa711fa10f7174db43
2025-04-27 11:30:35 +08:00
YAMAMOTO TakashiandGitHub 0ba6532636 debug-engine: fix a few type mismatches (#4189)
- use strict prototypes complained by GCC `-Wstrict-prototypes`
- use `int*` instead of `int32*`

Note: on some targets, int32_t is a long.
for example, GCC shipped with the recent ESP-IDF has such a
configuration.

- https://github.com/apache/nuttx/issues/15755#issuecomment-2635652808
- https://github.com/apache/nuttx/pull/16022
- https://docs.espressif.com/projects/esp-idf/en/stable/esp32/migration-guides/release-5.x/5.0/gcc.html#espressif-toolchain-changes
2025-04-17 00:07:08 +08:00
YAMAMOTO TakashiandGitHub 46ec863da3 fix false native stack overflow detections with HW_BOUND_CHECK (#4196)
In call_wasm_with_hw_bound_check/call_native_with_hw_bound_check,
ensure to set up the stack boundary (wasm_exec_env_set_thread_info)
before checking the overflow.

It seems that the problem was introduced by:
https://github.com/bytecodealliance/wasm-micro-runtime/pull/2940
2025-04-15 11:48:48 +08:00
YAMAMOTO TakashiandGitHub 040e776162 top-level cmake: link llvm libraries to our shared library (#3973)
This fixes link errors seen on my environment.
(macOS 15.2, x86-64, Xcode 16.2)

Tested as:
```
mkdir b
cd b
cmake -D WAMR_BUILD_JIT=1 -D LLVM_DIR=/usr/local/opt/llvm@19/lib/cmake/llvm ..
make
```
2024-12-23 13:38:48 +08:00
YAMAMOTO TakashiandGitHub 9916813a34 top-level cmakefile: fix macOS build (#3968)
At least fast-jit seems to require a bit new C++ standard.
C++17 was chosen to match product-mini/platforms/darwin.
2024-12-19 16:49:25 +08:00
YAMAMOTO TakashiandGitHub 95edef3185 Bump AOT_CURRENT_VERSION for WAMR 2.x (gc, memory64) (#3880)
* Bump AOT_CURRENT_VERSION for WAMR 2.x (gc, memory64)

Maybe it's too late because we have already made a few releases
since then.
But this might still help users who haven't upgraded to WAMR 2.x yet.
Also, for the purpose of the versioning, it's safer to bump
needlessly than missing necessary bumps.

Fixes https://github.com/bytecodealliance/wasm-micro-runtime/issues/3837

* test-tools/aot-analyzer/include/config.h: bump AOT_CURRENT_VERSION
2024-10-29 11:26:06 +08:00
YAMAMOTO TakashiandGitHub 1a61cb75e1 Appease GCC -Wformat (#3783)
I'm not sure we want to use C99 %tu here.
While C99 %zu is more widely used in WAMR, %tu is rare (if any)
and I'm not sure if it's ubiquitously implemented in platforms
we support.
2024-09-10 14:53:11 +08:00
YAMAMOTO TakashiandGitHub cd47438af9 spec_test_on_nuttx.yml: Disable riscv32_ilp32f for now (#3777)
It seems failing too frequently.

cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3776
2024-09-10 10:58:22 +08:00
YAMAMOTO TakashiandGitHub f453d9d5ce Appease GCC strict prototypes warning (#3775) 2024-09-10 09:42:23 +08:00
YAMAMOTO TakashiandGitHub b00904b092 Add a comment on AOT_SECTION_TYPE_SIGNATURE (#3746)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3744
2024-08-22 12:35:25 +08:00
YAMAMOTO TakashiandGitHub 581e1d9767 compilation: Use the dedicated stack-sizes section only for AOT (#3732)
For JIT, we naturally use mach-o on macOS, where the section name
we currently use is not valid and ends up with the errors like:

```
LLVM ERROR: Global variable '__orc_lcl.aot_stack_sizes.0' has an invalid section specifier '.aot_stack_sizes': mach-o section specifier requires a segment and section separated by a comma.
```

Because the dedicated section is not necessary for JIT,
this commit simply stops using it.

Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/3730
2024-08-20 10:26:26 +08:00
YAMAMOTO TakashiandGitHub 6ddaecafb3 wamrc: Add some help text for --size-level (#3689) 2024-08-07 13:43:47 +08:00
YAMAMOTO TakashiandGitHub 3ce242b5db spec-test-script/runtest.py: Use wamrc --xip option for xip (#3683) 2024-08-02 21:26:18 +08:00
YAMAMOTO TakashiandGitHub 08fad88d75 spec_test_on_nuttx.yml: Retire CONFIG_EOL_IS_LF (#3676)
It has been removed in nuttx while ago:
https://github.com/apache/nuttx/pull/8628
2024-08-02 09:54:07 +08:00
YAMAMOTO TakashiandGitHub c3bd6b495b spec_test_on_nuttx.yml: Replace sed with kconfig-tweak (#3672)
Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/3646
2024-07-31 09:45:11 +08:00
YAMAMOTO TakashiandGitHub 3b56e7c607 spec_test_on_nuttx.yml: Record more logs (#3670)
Upload artifacts including nuttx config/image and wasm/aot modules
for post-mortem investigations.
2024-07-27 15:38:24 +08:00
YAMAMOTO TakashiandGitHub 84b5221517 spec_test_on_nuttx.yml: Enable xip (#3671)
Related changes:
https://github.com/bytecodealliance/wasm-micro-runtime/pull/3662
https://github.com/bytecodealliance/wasm-micro-runtime/pull/3666
2024-07-27 15:31:31 +08:00
YAMAMOTO TakashiandGitHub 22df091603 spec_test_on_nuttx.yml: Add xtensa (#3665)
Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/3608.
2024-07-26 14:14:04 +08:00
YAMAMOTO TakashiandGitHub 4dfdbbb5a5 spec-test-script: Use -mtext-section-literals for xtensa xip (#3666) 2024-07-26 09:40:22 +08:00
YAMAMOTO TakashiandGitHub 83b36558a7 spec-test-script: Skip a few tests for xtensa qemu (#3664)
Because these test cases require more memory than what nuttx on esp32s3 qemu can afford.
2024-07-25 11:59:31 +08:00
YAMAMOTO TakashiandGitHub 2f147fae96 aot compiler: Bail out on too long native symbol names (#3663)
The old code was silently truncating long names.
2024-07-25 11:38:29 +08:00
YAMAMOTO TakashiandGitHub a055e0b26f aot compiler: Enlarge AOTNativeSymbol->symbol (#3662)
The old value was not enough for wasm_externref_obj_to_internal_obj,
which is 34 characters long.
2024-07-25 11:21:07 +08:00
YAMAMOTO TakashiandGitHub b21e3fd2fa wamr-compiler: Avoid size-level tweak if target is specified (#3659)
If target is specified, assume a cross-build.

Partly fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/3356
2024-07-25 10:39:48 +08:00