From ec6d3f2caef182fe57ddeca0117f3079ab8f1565 Mon Sep 17 00:00:00 2001 From: Matthew Tamayo-Rios Date: Tue, 17 Jan 2023 14:17:51 -0800 Subject: [PATCH] Update to wasmtime 3.0 and enable wasi-nn calls (#209) * Update to wasmtime 3.0 and enable wasi-nn calls * Refactor handle_request There are now two flavors of the handle request call. One is used for trap_test and the other is used by the Viceroy framework. Also extended the call to bubble up the error so it could be easily included in the response body. Co-authored-by: Matthew Tamayo Co-authored-by: Matthew Tamayo-Rios <100806329+mtr-fastly@users.noreply.github.com> --- Cargo.lock | 456 +++++++++++++++++++++----------- cli/src/main.rs | 2 +- cli/src/opts.rs | 51 +++- cli/tests/integration/common.rs | 8 +- cli/tests/trap-test/Cargo.lock | 448 ++++++++++++++++++++----------- cli/tests/trap-test/src/main.rs | 23 +- lib/Cargo.toml | 17 +- lib/src/config.rs | 12 + lib/src/error.rs | 2 +- lib/src/execute.rs | 141 +++++----- lib/src/linking.rs | 44 ++- lib/src/service.rs | 7 +- lib/src/wiggle_abi.rs | 4 +- 13 files changed, 804 insertions(+), 411 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc0f4dfd..193418a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,9 +30,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -57,9 +57,9 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "async-trait" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" dependencies = [ "proc-macro2", "quote", @@ -106,9 +106,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.9.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -127,9 +127,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "bytesize" @@ -204,9 +204,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.76" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" +checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" dependencies = [ "jobserver", ] @@ -219,14 +219,14 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.0.26" +version = "4.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2148adefda54e14492fb9bddcc600b4344c5d1a3123bd666dcb939c6f0e0e57e" +checksum = "4d63b9e9c07271b9957ad22c173bae2a4d9a81127680962039296abcd2f8251d" dependencies = [ - "atty", "bitflags", "clap_derive", "clap_lex", + "is-terminal 0.4.1", "once_cell", "strsim", "termcolor", @@ -290,25 +290,26 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "593b398dd0c5b1e2e3a9c3dae8584e287894ea84e361949ad506376e99196265" +checksum = "c200df7d943cd2b8cb3a67f6a56781c63849f122d74deff24d1767c3918b0bdc" dependencies = [ - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", ] [[package]] name = "cranelift-codegen" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc0d8faabd099ea15ab33d49d150e5572c04cfeb95d675fd41286739b754629" +checksum = "f365623f4c3d576f47f11868568d0c90e18ac169497a9ed73c433fe2d3f9f2fb" dependencies = [ "arrayvec", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", - "cranelift-entity 0.89.2", + "cranelift-egraph", + "cranelift-entity 0.90.0", "cranelift-isle", "gimli", "log", @@ -319,18 +320,32 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac1669e42579476f001571d6ba4b825fac686282c97b88b18f8e34242066a81" +checksum = "3cbaf79f8ae63bd86dc40a04417a7cc1691a217f6db204438026c164679b4694" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a1b1eef9640ab72c1e7b583ac678083855a509da34b4b4378bd99954127c20" +checksum = "587db55845c943d8211e9c7198a977fa6686b44f18df15f31cec9a12fcf5dda8" + +[[package]] +name = "cranelift-egraph" +version = "0.90.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6dccc0b16b7b8c1278162e436beebb35f3d321743b639d2b578138d630f43e" +dependencies = [ + "cranelift-entity 0.90.0", + "fxhash", + "hashbrown", + "indexmap", + "log", + "smallvec", +] [[package]] name = "cranelift-entity" @@ -340,18 +355,18 @@ checksum = "87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352" [[package]] name = "cranelift-entity" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea4e17c3791fd8134640b26242a9ddbd7c67db78f0bad98cb778bf563ef81a0" +checksum = "a1b062935d2c6dba87387d2ac163eb9c54967ed6143c3136fffaba8acb5eaa9e" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca1474b5302348799656d43a40eacd716a3b46169405a3af812832c9edf77b4" +checksum = "476ea81fe736b858d2d2c53b9d9fd28082589f57ebe4e1654a68af7359800a0c" dependencies = [ "cranelift-codegen", "log", @@ -361,15 +376,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77aa537f020ea43483100153278e7215d41695bdcef9eea6642d122675f64249" +checksum = "9c50a465703c15d3d913f6b0db8320c4e92c940f0f0cad874c7fcf5aecc066c0" [[package]] name = "cranelift-native" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bdc6b65241a95b7d8eafbf4e114c082e49b80162a2dcd9c6bcc5989c3310c9e" +checksum = "d7d9e0d1382584b8d454ec12c86fd562b64ccd454c1199846c1b7d158db9ed38" dependencies = [ "cranelift-codegen", "libc", @@ -378,12 +393,12 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb6359f606a1c80ccaa04fae9dbbb504615ec7a49b6c212b341080fff7a65dd" +checksum = "1f54959195c47437544a1a4d2602381949a12918e0179bcc82d909cc34cf08dd" dependencies = [ "cranelift-codegen", - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "cranelift-frontend", "itertools", "log", @@ -424,33 +439,44 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.11" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.7.1", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if", ] [[package]] -name = "digest" -version = "0.9.0" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", ] [[package]] @@ -500,6 +526,19 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "atty", + "humantime 1.3.0", + "log", + "regex", + "termcolor", +] + [[package]] name = "env_logger" version = "0.9.3" @@ -507,7 +546,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", - "humantime", + "humantime 2.1.0", "log", "regex", "termcolor", @@ -566,15 +605,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" dependencies = [ - "env_logger", + "env_logger 0.9.3", "log", ] [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", "miniz_oxide", @@ -822,6 +861,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + [[package]] name = "humantime" version = "2.1.0" @@ -864,9 +912,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", @@ -904,9 +952,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d367024b3f3414d8e01f437f704f41a9f64ab36f9067fa73e526ad4c763c87" +checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" dependencies = [ "libc", "windows-sys 0.42.0", @@ -930,6 +978,18 @@ dependencies = [ "windows-sys 0.36.1", ] +[[package]] +name = "is-terminal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330" +dependencies = [ + "hermit-abi 0.2.6", + "io-lifetimes 1.0.3", + "rustix 0.36.4", + "windows-sys 0.42.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -1001,6 +1061,16 @@ version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "linux-raw-sys" version = "0.0.46" @@ -1009,9 +1079,9 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "linux-raw-sys" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb68f22743a3fb35785f1e7f844ca5a3de2dde5bd0c0ef5b372065814699b121" +checksum = "8f9f08d8963a6c613f4b1a78f4f4a4dbfadf8e6545b2d72861731e4858b8b47f" [[package]] name = "lock_api" @@ -1068,7 +1138,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.1", + "rustix 0.36.4", ] [[package]] @@ -1080,11 +1150,20 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] @@ -1139,23 +1218,49 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openvino" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7336c11cad0eb45f65436cdbf073c697397a1bfe53836cef997129d69443c77" +dependencies = [ + "openvino-sys", + "thiserror", +] + +[[package]] +name = "openvino-finder" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c650edf39ea54dfbe18f0ad513858ff0bed3f6a308b677e0d5f71b330f476ccf" +dependencies = [ + "cfg-if", + "log", +] + +[[package]] +name = "openvino-sys" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d003d61f18f7bf6dd965b4e913cbd3e7cda6a3c179115c8ee59e5c29b390f45" +dependencies = [ + "libloading", + "once_cell", + "openvino-finder", + "pretty_env_logger", +] + [[package]] name = "os_str_bytes" -version = "6.4.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5bf27447411e9ee3ff51186bf7a08e16c341efdde93f4d823e8844429bed7e" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "overload" @@ -1175,9 +1280,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ "cfg-if", "libc", @@ -1236,6 +1341,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "pretty_env_logger" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +dependencies = [ + "env_logger 0.7.1", + "log", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -1278,6 +1393,12 @@ dependencies = [ "cc", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.21" @@ -1319,11 +1440,10 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b" dependencies = [ - "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -1331,9 +1451,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1447,15 +1567,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.1" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812a2ec2043c4d6bc6482f5be2ab8244613cac2493d128d36c0759e52a626ab3" +checksum = "cb93e85278e08bb5788653183213d3a60fc242b10cb9be96586f5a73dcb67c23" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.1", + "io-lifetimes 1.0.3", "libc", - "linux-raw-sys 0.1.2", + "linux-raw-sys 0.1.3", "windows-sys 0.42.0", ] @@ -1490,6 +1610,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.20" @@ -1556,18 +1685,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "e53f64bb4ba0191d6d0676e1b141ca55047d83b74f5607e6d8eb88126c52c2dc" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "a55492425aa53521babf6137309e7d34c20bbfbbfcfe2c7f3a047fd1f6b92c0c" dependencies = [ "proc-macro2", "quote", @@ -1576,9 +1705,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" dependencies = [ "itoa", "ryu", @@ -1587,15 +1716,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "block-buffer", "cfg-if", "cpufeatures", "digest", - "opaque-debug", ] [[package]] @@ -1676,9 +1803,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce" dependencies = [ "proc-macro2", "quote", @@ -1776,9 +1903,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.21.2" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" dependencies = [ "autocfg", "bytes", @@ -2040,10 +2167,22 @@ dependencies = [ "wasi-common", "wasmtime", "wasmtime-wasi", + "wasmtime-wasi-nn", "webpki", "wiggle", ] +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -2062,9 +2201,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi-cap-std-sync" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b4953999c746173c263b81e9e5e3e335ff47face7187ba2a5ecc91c716e6f3" +checksum = "5fe15d7e9ee5bb76cb64b9c29ff00c62642e8552e7f2a8b4758897b0a89a582d" dependencies = [ "anyhow", "async-trait", @@ -2075,7 +2214,7 @@ dependencies = [ "fs-set-times", "io-extras", "io-lifetimes 0.7.5", - "is-terminal", + "is-terminal 0.3.0", "once_cell", "rustix 0.35.13", "system-interface", @@ -2086,9 +2225,9 @@ dependencies = [ [[package]] name = "wasi-common" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d47faf4f76ebfdeb1f3346a949c6fbf2f2471afc68280b00c76d6c02221d80ad" +checksum = "42e0ef82a2154554def1a220afd48f95cb0f22be343b16930e8957113bd3d967" dependencies = [ "anyhow", "bitflags", @@ -2098,27 +2237,11 @@ dependencies = [ "rustix 0.35.13", "thiserror", "tracing", + "wasmtime", "wiggle", "windows-sys 0.36.1", ] -[[package]] -name = "wasi-tokio" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec5c029f1e04f7e2d87af3cd978c4d3f05f06ab84f4e6d31ad7e6505d4b5e9c" -dependencies = [ - "anyhow", - "cap-std", - "io-extras", - "io-lifetimes 0.7.5", - "rustix 0.35.13", - "tokio", - "wasi-cap-std-sync", - "wasi-common", - "wiggle", -] - [[package]] name = "wasm-bindgen" version = "0.2.83" @@ -2175,27 +2298,27 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9424cdab516a16d4ea03c8f4a01b14e7b2d04a129dcc2bcdde5bcc5f68f06c41" +checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" dependencies = [ "leb128", ] [[package]] name = "wasmparser" -version = "0.92.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da34cec2a8c23db906cdf8b26e988d7a7f0d549eb5d51299129647af61a1b37" +checksum = "c5a4460aa3e271fa180b6a5d003e728f3963fb30e3ba0fa7c9634caa06049328" dependencies = [ "indexmap", ] [[package]] name = "wasmtime" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743d37c265fa134a76de653c7e66be22590eaccd03da13cee99f3ac7a59cb826" +checksum = "9ad9bd12d0823195f6c833f340d8d1df39e2bbf40f5767416560ca7476b97e47" dependencies = [ "anyhow", "async-trait", @@ -2224,18 +2347,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de327cf46d5218315957138131ed904621e6f99018aa2da508c0dcf0c65f1bf2" +checksum = "3b6694b753be856b36d47744cdf2bd525bac53d0de5981132d5430bb62c496e4" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bd53d27df1076100519b680b45d8209aed62b4bbaf0913732810cb216f7b2b" +checksum = "68f467d67ad8295d34de2840dde47e60ef83b88bce08f4bdb371503e8e1e5c55" dependencies = [ "anyhow", "base64", @@ -2253,13 +2376,13 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017c3605ccce867b3ba7f71d95e5652acc22b9dc2971ad6a6f9df4a8d7af2648" +checksum = "9c55d30708ebc24b6fa2a247807821642967487388845c7fc5320fef1010abe8" dependencies = [ "anyhow", "cranelift-codegen", - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "cranelift-frontend", "cranelift-native", "cranelift-wasm", @@ -2274,12 +2397,12 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aec5c1f81aab9bb35997113c171b6bb9093afc90e3757c55e0c08dc9ac612e4" +checksum = "01be016d65ec9200a2d4efbc2ca983bbb7264332e49c11179aaf7587e57d854d" dependencies = [ "anyhow", - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "gimli", "indexmap", "log", @@ -2293,9 +2416,9 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1075aa43857086ef89afbe87602fe2dae98ad212582e722b6d3d2676bb5ee141" +checksum = "edf27540165d5fd3af99cb04a05b8ccc8d04bbdf380d2fd87fd5cb3f1093c08c" dependencies = [ "cc", "cfg-if", @@ -2306,9 +2429,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c683893dbba3986aa71582a5332b87157fb95d34098de2e5f077c7f078726d" +checksum = "5d36042d7962fa1b2a6bfb96d3b33e2283138e7396bc29b2c6970f2a1e80a0ed" dependencies = [ "addr2line", "anyhow", @@ -2320,32 +2443,43 @@ dependencies = [ "log", "object", "rustc-demangle", - "rustix 0.35.13", "serde", "target-lexicon", "thiserror", "wasmtime-environ", "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", "wasmtime-runtime", "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit-debug" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f8f15a81292eec468c79a4f887a37a3d02eb0c610f34ddbec607d3e9022f18" +checksum = "ad4511b8abbdbaf3e9aaa4044ead8bd31b70e2da5e43e2cb91605f871ca23d56" dependencies = [ "object", "once_cell", "rustix 0.35.13", ] +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb7b3e58024d8d395dfc4efbe2a58360a1998565b118b0342b3cf62a4084bde" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.36.1", +] + [[package]] name = "wasmtime-runtime" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09af6238c962e8220424c815a7b1a9a6d0ba0694f0ab0ae12a6cda1923935a0d" +checksum = "4034f371135e9e2e81430dda14f6f5a49a222c6557ec4f65301edc093b216d38" dependencies = [ "anyhow", "cc", @@ -2355,7 +2489,7 @@ dependencies = [ "log", "mach", "memfd", - "memoffset", + "memoffset 0.6.5", "paste", "rand", "rustix 0.35.13", @@ -2369,11 +2503,11 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc3dd9521815984b35d6362f79e6b9c72475027cd1c71c44eb8df8fbf33a9fb" +checksum = "a770de14a3b5676dfd8a3c06bcab829d9cb58b113911634f3ec3b6960b1d79e3" dependencies = [ - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "serde", "thiserror", "wasmparser", @@ -2381,18 +2515,30 @@ dependencies = [ [[package]] name = "wasmtime-wasi" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3bba5cc0a940cef3fbbfa7291c7e5fe0f7ec6fb2efa7bd1504032ed6202a1c0" +checksum = "648d6b4360af358bf2a0688ef7e35d4b413f7185257bf8de6a58f09fb4d7eca1" dependencies = [ "anyhow", "wasi-cap-std-sync", "wasi-common", - "wasi-tokio", "wasmtime", "wiggle", ] +[[package]] +name = "wasmtime-wasi-nn" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c94beb987aca4c4c84646b1fd245bf21c86ac51f0830fda4d596eeac8366b3" +dependencies = [ + "anyhow", + "openvino", + "thiserror", + "walkdir", + "wiggle", +] + [[package]] name = "wast" version = "35.0.2" @@ -2404,9 +2550,9 @@ dependencies = [ [[package]] name = "wast" -version = "49.0.0" +version = "50.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ef81fcd60d244cafffeafac3d17615fdb2fddda6aca18f34a8ae233353587c" +checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" dependencies = [ "leb128", "memchr", @@ -2416,11 +2562,11 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c347c4460ffb311e95aafccd8c29e4888f241b9e4b3bb0e0ccbd998de2c8c0d" +checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" dependencies = [ - "wast 49.0.0", + "wast 50.0.0", ] [[package]] @@ -2445,9 +2591,9 @@ dependencies = [ [[package]] name = "wiggle" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "211ef4d238fd83bbe6f1bc57f3e2e20dc8b1f999188be252e7a535b696c6f84f" +checksum = "ff29f3353b12c949adc6ad6d89edd87f3fa227b1ee1a26f437ae5e9dfe42ba5f" dependencies = [ "anyhow", "async-trait", @@ -2461,9 +2607,9 @@ dependencies = [ [[package]] name = "wiggle-generate" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63feec26b2fc3708c7a63316949ca75dd96988f03a17e4cb8d533dc62587ada4" +checksum = "f03743b2f04849564d6a2cd6ba32861d93f2d46baddad449473ec399d58b78e3" dependencies = [ "anyhow", "heck", @@ -2476,9 +2622,9 @@ dependencies = [ [[package]] name = "wiggle-macro" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494dc2646618c2b7fb0ec5e1d27dbac5ca31194c00a64698a4b5b35a83d80c21" +checksum = "544319bbf95f2e0fc2c410b2098aff28a885e6cf59d02a67f5647eec1679d4ec" dependencies = [ "proc-macro2", "quote", @@ -2661,9 +2807,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" +version = "2.0.4+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +checksum = "4fa202f2ef00074143e219d15b62ffc317d17cc33909feac471c044087cad7b0" dependencies = [ "cc", "libc", diff --git a/cli/src/main.rs b/cli/src/main.rs index 3856af85..bfd0dca8 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -35,7 +35,7 @@ use { /// Create a new server, bind it to an address, and serve responses until an error occurs. pub async fn serve(opts: Opts) -> Result<(), Error> { // Load the wasm module into an execution context - let mut ctx = ExecuteCtx::new(opts.input(), opts.profiling_strategy())? + let mut ctx = ExecuteCtx::new(opts.input(), opts.profiling_strategy(), opts.wasi_modules())? .with_log_stderr(opts.log_stderr()) .with_log_stdout(opts.log_stdout()); diff --git a/cli/src/opts.rs b/cli/src/opts.rs index 5a0c5c19..a5af89f0 100644 --- a/cli/src/opts.rs +++ b/cli/src/opts.rs @@ -1,13 +1,14 @@ //! Command line arguments. use { - clap::Parser, + clap::{Parser, ValueEnum}, std::net::{IpAddr, Ipv4Addr}, std::{ + collections::HashSet, net::SocketAddr, path::{Path, PathBuf}, }, - viceroy_lib::{Error, ProfilingStrategy}, + viceroy_lib::{config::ExperimentalModule, Error, ProfilingStrategy}, }; // Command-line arguments for the Viceroy CLI. @@ -43,6 +44,9 @@ pub struct Opts { // Whether to enable wasmtime's builtin profiler. #[arg(long = "profiler", value_parser = check_wasmtime_profiler_mode)] profiler: Option, + /// Set of experimental WASI modules to link against. + #[arg(value_enum, long = "experimental_modules", required = false)] + experimental_modules: Vec, } impl Opts { @@ -83,6 +87,49 @@ impl Opts { pub fn profiling_strategy(&self) -> ProfilingStrategy { self.profiler.unwrap_or(ProfilingStrategy::None) } + + // Set of experimental wasi modules to link against. + pub fn wasi_modules(&self) -> HashSet { + self.experimental_modules.iter().map(|x| x.into()).collect() + } +} + +/// Enum of available (experimental) wasi modules +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Hash)] +pub enum ExperimentalModuleArg { + WasiNn, +} + +impl From for ExperimentalModule { + fn from(arg: ExperimentalModuleArg) -> ExperimentalModule { + match arg { + ExperimentalModuleArg::WasiNn => ExperimentalModule::WasiNn, + } + } +} + +impl From<&ExperimentalModuleArg> for ExperimentalModule { + fn from(arg: &ExperimentalModuleArg) -> ExperimentalModule { + match arg { + ExperimentalModuleArg::WasiNn => ExperimentalModule::WasiNn, + } + } +} + +impl From for ExperimentalModuleArg { + fn from(module: ExperimentalModule) -> ExperimentalModuleArg { + match module { + ExperimentalModule::WasiNn => ExperimentalModuleArg::WasiNn, + } + } +} + +impl From<&ExperimentalModule> for ExperimentalModuleArg { + fn from(module: &ExperimentalModule) -> ExperimentalModuleArg { + match module { + ExperimentalModule::WasiNn => ExperimentalModuleArg::WasiNn, + } + } } /// A parsing function used by [`Opts`][opts] to check that the input is a valid Wasm module in diff --git a/cli/tests/integration/common.rs b/cli/tests/integration/common.rs index 3e3e097d..7651b5d1 100644 --- a/cli/tests/integration/common.rs +++ b/cli/tests/integration/common.rs @@ -3,7 +3,10 @@ use futures::stream::StreamExt; use hyper::{service, Body as HyperBody, Request, Response, Server}; -use std::{convert::Infallible, future::Future, net::SocketAddr, path::PathBuf, sync::Arc}; +use std::{ + collections::HashSet, convert::Infallible, future::Future, net::SocketAddr, path::PathBuf, + sync::Arc, +}; use tokio::sync::Mutex; use tracing_subscriber::filter::EnvFilter; use viceroy_lib::{ @@ -197,7 +200,7 @@ impl Test { .try_init() .ok(); - let ctx = ExecuteCtx::new(&self.module_path, ProfilingStrategy::None) + let ctx = ExecuteCtx::new(&self.module_path, ProfilingStrategy::None, HashSet::new()) .expect("failed to set up execution context") .with_backends(self.backends.clone()) .with_dictionaries(self.dictionaries.clone()) @@ -250,6 +253,7 @@ impl Test { .clone() .handle_request(req.map(Into::into), addr.ip()) .await + .map(|result| result.0) .expect("failed to handle the request"); responses.push(resp); } diff --git a/cli/tests/trap-test/Cargo.lock b/cli/tests/trap-test/Cargo.lock index 9d4c28de..404fcb5a 100644 --- a/cli/tests/trap-test/Cargo.lock +++ b/cli/tests/trap-test/Cargo.lock @@ -30,9 +30,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -75,9 +75,9 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "async-trait" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" dependencies = [ "proc-macro2", "quote", @@ -124,9 +124,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.9.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -145,9 +145,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "bytesize" @@ -222,9 +222,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.76" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" +checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" dependencies = [ "jobserver", ] @@ -293,25 +293,26 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "593b398dd0c5b1e2e3a9c3dae8584e287894ea84e361949ad506376e99196265" +checksum = "c200df7d943cd2b8cb3a67f6a56781c63849f122d74deff24d1767c3918b0bdc" dependencies = [ - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", ] [[package]] name = "cranelift-codegen" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc0d8faabd099ea15ab33d49d150e5572c04cfeb95d675fd41286739b754629" +checksum = "f365623f4c3d576f47f11868568d0c90e18ac169497a9ed73c433fe2d3f9f2fb" dependencies = [ "arrayvec", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", - "cranelift-entity 0.89.2", + "cranelift-egraph", + "cranelift-entity 0.90.0", "cranelift-isle", "gimli", "log", @@ -322,18 +323,32 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac1669e42579476f001571d6ba4b825fac686282c97b88b18f8e34242066a81" +checksum = "3cbaf79f8ae63bd86dc40a04417a7cc1691a217f6db204438026c164679b4694" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a1b1eef9640ab72c1e7b583ac678083855a509da34b4b4378bd99954127c20" +checksum = "587db55845c943d8211e9c7198a977fa6686b44f18df15f31cec9a12fcf5dda8" + +[[package]] +name = "cranelift-egraph" +version = "0.90.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6dccc0b16b7b8c1278162e436beebb35f3d321743b639d2b578138d630f43e" +dependencies = [ + "cranelift-entity 0.90.0", + "fxhash", + "hashbrown", + "indexmap", + "log", + "smallvec", +] [[package]] name = "cranelift-entity" @@ -343,18 +358,18 @@ checksum = "87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352" [[package]] name = "cranelift-entity" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea4e17c3791fd8134640b26242a9ddbd7c67db78f0bad98cb778bf563ef81a0" +checksum = "a1b062935d2c6dba87387d2ac163eb9c54967ed6143c3136fffaba8acb5eaa9e" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca1474b5302348799656d43a40eacd716a3b46169405a3af812832c9edf77b4" +checksum = "476ea81fe736b858d2d2c53b9d9fd28082589f57ebe4e1654a68af7359800a0c" dependencies = [ "cranelift-codegen", "log", @@ -364,15 +379,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77aa537f020ea43483100153278e7215d41695bdcef9eea6642d122675f64249" +checksum = "9c50a465703c15d3d913f6b0db8320c4e92c940f0f0cad874c7fcf5aecc066c0" [[package]] name = "cranelift-native" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bdc6b65241a95b7d8eafbf4e114c082e49b80162a2dcd9c6bcc5989c3310c9e" +checksum = "d7d9e0d1382584b8d454ec12c86fd562b64ccd454c1199846c1b7d158db9ed38" dependencies = [ "cranelift-codegen", "libc", @@ -381,12 +396,12 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.89.2" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb6359f606a1c80ccaa04fae9dbbb504615ec7a49b6c212b341080fff7a65dd" +checksum = "1f54959195c47437544a1a4d2602381949a12918e0179bcc82d909cc34cf08dd" dependencies = [ "cranelift-codegen", - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "cranelift-frontend", "itertools", "log", @@ -427,31 +442,41 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.11" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.7.1", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if", ] +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "cxx" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97abf9f0eca9e52b7f81b945524e76710e6cb2366aead23b7d4fbf72e281f888" +checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453" dependencies = [ "cc", "cxxbridge-flags", @@ -461,9 +486,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc32cc5fea1d894b77d269ddb9f192110069a8a9c1f1d441195fba90553dea3" +checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0" dependencies = [ "cc", "codespan-reporting", @@ -476,15 +501,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca220e4794c934dc6b1207c3b42856ad4c302f2df1712e9f8d2eec5afaacf1f" +checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71" [[package]] name = "cxxbridge-macro" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b846f081361125bfc8dc9d3940c84e1fd83ba54bbca7b17cd29483c828be0704" +checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470" dependencies = [ "proc-macro2", "quote", @@ -493,11 +518,12 @@ dependencies = [ [[package]] name = "digest" -version = "0.9.0" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "generic-array", + "block-buffer", + "crypto-common", ] [[package]] @@ -547,6 +573,19 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "atty", + "humantime 1.3.0", + "log", + "regex", + "termcolor", +] + [[package]] name = "env_logger" version = "0.9.3" @@ -554,7 +593,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", - "humantime", + "humantime 2.1.0", "log", "regex", "termcolor", @@ -604,15 +643,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" dependencies = [ - "env_logger", + "env_logger 0.9.3", "log", ] [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", "miniz_oxide", @@ -860,6 +899,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + [[package]] name = "humantime" version = "2.1.0" @@ -926,9 +974,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", @@ -957,9 +1005,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d367024b3f3414d8e01f437f704f41a9f64ab36f9067fa73e526ad4c763c87" +checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" dependencies = [ "libc", "windows-sys 0.42.0", @@ -1054,6 +1102,16 @@ version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "link-cplusplus" version = "1.0.7" @@ -1071,9 +1129,9 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "linux-raw-sys" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb68f22743a3fb35785f1e7f844ca5a3de2dde5bd0c0ef5b372065814699b121" +checksum = "8f9f08d8963a6c613f4b1a78f4f4a4dbfadf8e6545b2d72861731e4858b8b47f" [[package]] name = "lock_api" @@ -1130,7 +1188,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.1", + "rustix 0.36.4", ] [[package]] @@ -1142,11 +1200,20 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] @@ -1210,18 +1277,44 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openvino" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7336c11cad0eb45f65436cdbf073c697397a1bfe53836cef997129d69443c77" +dependencies = [ + "openvino-sys", + "thiserror", +] + +[[package]] +name = "openvino-finder" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c650edf39ea54dfbe18f0ad513858ff0bed3f6a308b677e0d5f71b330f476ccf" +dependencies = [ + "cfg-if", + "log", +] + +[[package]] +name = "openvino-sys" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d003d61f18f7bf6dd965b4e913cbd3e7cda6a3c179115c8ee59e5c29b390f45" +dependencies = [ + "libloading", + "once_cell", + "openvino-finder", + "pretty_env_logger", +] + [[package]] name = "parking_lot" version = "0.12.1" @@ -1234,9 +1327,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ "cfg-if", "libc", @@ -1295,6 +1388,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "pretty_env_logger" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +dependencies = [ + "env_logger 0.7.1", + "log", +] + [[package]] name = "proc-macro2" version = "1.0.47" @@ -1313,6 +1416,12 @@ dependencies = [ "cc", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.21" @@ -1354,11 +1463,10 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b" dependencies = [ - "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -1366,9 +1474,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1473,15 +1581,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.1" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812a2ec2043c4d6bc6482f5be2ab8244613cac2493d128d36c0759e52a626ab3" +checksum = "cb93e85278e08bb5788653183213d3a60fc242b10cb9be96586f5a73dcb67c23" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.1", + "io-lifetimes 1.0.3", "libc", - "linux-raw-sys 0.1.2", + "linux-raw-sys 0.1.3", "windows-sys 0.42.0", ] @@ -1516,6 +1624,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.20" @@ -1588,18 +1705,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "e53f64bb4ba0191d6d0676e1b141ca55047d83b74f5607e6d8eb88126c52c2dc" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "a55492425aa53521babf6137309e7d34c20bbfbbfcfe2c7f3a047fd1f6b92c0c" dependencies = [ "proc-macro2", "quote", @@ -1608,9 +1725,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" dependencies = [ "itoa", "ryu", @@ -1619,15 +1736,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "block-buffer", "cfg-if", "cpufeatures", "digest", - "opaque-debug", ] [[package]] @@ -1702,9 +1817,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "syn" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce" dependencies = [ "proc-macro2", "quote", @@ -1788,9 +1903,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.21.2" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" dependencies = [ "autocfg", "bytes", @@ -2059,10 +2174,22 @@ dependencies = [ "wasi-common", "wasmtime", "wasmtime-wasi", + "wasmtime-wasi-nn", "webpki", "wiggle", ] +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -2081,9 +2208,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi-cap-std-sync" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b4953999c746173c263b81e9e5e3e335ff47face7187ba2a5ecc91c716e6f3" +checksum = "5fe15d7e9ee5bb76cb64b9c29ff00c62642e8552e7f2a8b4758897b0a89a582d" dependencies = [ "anyhow", "async-trait", @@ -2105,9 +2232,9 @@ dependencies = [ [[package]] name = "wasi-common" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d47faf4f76ebfdeb1f3346a949c6fbf2f2471afc68280b00c76d6c02221d80ad" +checksum = "42e0ef82a2154554def1a220afd48f95cb0f22be343b16930e8957113bd3d967" dependencies = [ "anyhow", "bitflags", @@ -2117,27 +2244,11 @@ dependencies = [ "rustix 0.35.13", "thiserror", "tracing", + "wasmtime", "wiggle", "windows-sys 0.36.1", ] -[[package]] -name = "wasi-tokio" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec5c029f1e04f7e2d87af3cd978c4d3f05f06ab84f4e6d31ad7e6505d4b5e9c" -dependencies = [ - "anyhow", - "cap-std", - "io-extras", - "io-lifetimes 0.7.5", - "rustix 0.35.13", - "tokio", - "wasi-cap-std-sync", - "wasi-common", - "wiggle", -] - [[package]] name = "wasm-bindgen" version = "0.2.83" @@ -2194,27 +2305,27 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9424cdab516a16d4ea03c8f4a01b14e7b2d04a129dcc2bcdde5bcc5f68f06c41" +checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" dependencies = [ "leb128", ] [[package]] name = "wasmparser" -version = "0.92.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da34cec2a8c23db906cdf8b26e988d7a7f0d549eb5d51299129647af61a1b37" +checksum = "c5a4460aa3e271fa180b6a5d003e728f3963fb30e3ba0fa7c9634caa06049328" dependencies = [ "indexmap", ] [[package]] name = "wasmtime" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743d37c265fa134a76de653c7e66be22590eaccd03da13cee99f3ac7a59cb826" +checksum = "9ad9bd12d0823195f6c833f340d8d1df39e2bbf40f5767416560ca7476b97e47" dependencies = [ "anyhow", "async-trait", @@ -2243,18 +2354,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de327cf46d5218315957138131ed904621e6f99018aa2da508c0dcf0c65f1bf2" +checksum = "3b6694b753be856b36d47744cdf2bd525bac53d0de5981132d5430bb62c496e4" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bd53d27df1076100519b680b45d8209aed62b4bbaf0913732810cb216f7b2b" +checksum = "68f467d67ad8295d34de2840dde47e60ef83b88bce08f4bdb371503e8e1e5c55" dependencies = [ "anyhow", "base64", @@ -2272,13 +2383,13 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017c3605ccce867b3ba7f71d95e5652acc22b9dc2971ad6a6f9df4a8d7af2648" +checksum = "9c55d30708ebc24b6fa2a247807821642967487388845c7fc5320fef1010abe8" dependencies = [ "anyhow", "cranelift-codegen", - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "cranelift-frontend", "cranelift-native", "cranelift-wasm", @@ -2293,12 +2404,12 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aec5c1f81aab9bb35997113c171b6bb9093afc90e3757c55e0c08dc9ac612e4" +checksum = "01be016d65ec9200a2d4efbc2ca983bbb7264332e49c11179aaf7587e57d854d" dependencies = [ "anyhow", - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "gimli", "indexmap", "log", @@ -2312,9 +2423,9 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1075aa43857086ef89afbe87602fe2dae98ad212582e722b6d3d2676bb5ee141" +checksum = "edf27540165d5fd3af99cb04a05b8ccc8d04bbdf380d2fd87fd5cb3f1093c08c" dependencies = [ "cc", "cfg-if", @@ -2325,9 +2436,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c683893dbba3986aa71582a5332b87157fb95d34098de2e5f077c7f078726d" +checksum = "5d36042d7962fa1b2a6bfb96d3b33e2283138e7396bc29b2c6970f2a1e80a0ed" dependencies = [ "addr2line", "anyhow", @@ -2339,32 +2450,43 @@ dependencies = [ "log", "object", "rustc-demangle", - "rustix 0.35.13", "serde", "target-lexicon", "thiserror", "wasmtime-environ", "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", "wasmtime-runtime", "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit-debug" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f8f15a81292eec468c79a4f887a37a3d02eb0c610f34ddbec607d3e9022f18" +checksum = "ad4511b8abbdbaf3e9aaa4044ead8bd31b70e2da5e43e2cb91605f871ca23d56" dependencies = [ "object", "once_cell", "rustix 0.35.13", ] +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb7b3e58024d8d395dfc4efbe2a58360a1998565b118b0342b3cf62a4084bde" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.36.1", +] + [[package]] name = "wasmtime-runtime" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09af6238c962e8220424c815a7b1a9a6d0ba0694f0ab0ae12a6cda1923935a0d" +checksum = "4034f371135e9e2e81430dda14f6f5a49a222c6557ec4f65301edc093b216d38" dependencies = [ "anyhow", "cc", @@ -2374,7 +2496,7 @@ dependencies = [ "log", "mach", "memfd", - "memoffset", + "memoffset 0.6.5", "paste", "rand", "rustix 0.35.13", @@ -2388,11 +2510,11 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc3dd9521815984b35d6362f79e6b9c72475027cd1c71c44eb8df8fbf33a9fb" +checksum = "a770de14a3b5676dfd8a3c06bcab829d9cb58b113911634f3ec3b6960b1d79e3" dependencies = [ - "cranelift-entity 0.89.2", + "cranelift-entity 0.90.0", "serde", "thiserror", "wasmparser", @@ -2400,18 +2522,30 @@ dependencies = [ [[package]] name = "wasmtime-wasi" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3bba5cc0a940cef3fbbfa7291c7e5fe0f7ec6fb2efa7bd1504032ed6202a1c0" +checksum = "648d6b4360af358bf2a0688ef7e35d4b413f7185257bf8de6a58f09fb4d7eca1" dependencies = [ "anyhow", "wasi-cap-std-sync", "wasi-common", - "wasi-tokio", "wasmtime", "wiggle", ] +[[package]] +name = "wasmtime-wasi-nn" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c94beb987aca4c4c84646b1fd245bf21c86ac51f0830fda4d596eeac8366b3" +dependencies = [ + "anyhow", + "openvino", + "thiserror", + "walkdir", + "wiggle", +] + [[package]] name = "wast" version = "35.0.2" @@ -2423,9 +2557,9 @@ dependencies = [ [[package]] name = "wast" -version = "49.0.0" +version = "50.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ef81fcd60d244cafffeafac3d17615fdb2fddda6aca18f34a8ae233353587c" +checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" dependencies = [ "leb128", "memchr", @@ -2435,11 +2569,11 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c347c4460ffb311e95aafccd8c29e4888f241b9e4b3bb0e0ccbd998de2c8c0d" +checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" dependencies = [ - "wast 49.0.0", + "wast 50.0.0", ] [[package]] @@ -2464,9 +2598,9 @@ dependencies = [ [[package]] name = "wiggle" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "211ef4d238fd83bbe6f1bc57f3e2e20dc8b1f999188be252e7a535b696c6f84f" +checksum = "ff29f3353b12c949adc6ad6d89edd87f3fa227b1ee1a26f437ae5e9dfe42ba5f" dependencies = [ "anyhow", "async-trait", @@ -2480,9 +2614,9 @@ dependencies = [ [[package]] name = "wiggle-generate" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63feec26b2fc3708c7a63316949ca75dd96988f03a17e4cb8d533dc62587ada4" +checksum = "f03743b2f04849564d6a2cd6ba32861d93f2d46baddad449473ec399d58b78e3" dependencies = [ "anyhow", "heck", @@ -2495,9 +2629,9 @@ dependencies = [ [[package]] name = "wiggle-macro" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494dc2646618c2b7fb0ec5e1d27dbac5ca31194c00a64698a4b5b35a83d80c21" +checksum = "544319bbf95f2e0fc2c410b2098aff28a885e6cf59d02a67f5647eec1679d4ec" dependencies = [ "proc-macro2", "quote", @@ -2680,9 +2814,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" +version = "2.0.4+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +checksum = "4fa202f2ef00074143e219d15b62ffc317d17cc33909feac471c044087cad7b0" dependencies = [ "cc", "libc", diff --git a/cli/tests/trap-test/src/main.rs b/cli/tests/trap-test/src/main.rs index b3221097..9a665a02 100644 --- a/cli/tests/trap-test/src/main.rs +++ b/cli/tests/trap-test/src/main.rs @@ -1,6 +1,6 @@ +use std::collections::HashSet; use { crate::common::{TestResult, RUST_FIXTURE_PATH}, - http::header::WARNING, hyper::{Body, Request, StatusCode}, viceroy_lib::{ExecuteCtx, ProfilingStrategy}, }; @@ -11,25 +11,24 @@ mod common; #[tokio::test(flavor = "multi_thread")] async fn fatal_error_traps() -> TestResult { let module_path = format!("../../{}/response.wasm", RUST_FIXTURE_PATH); - let ctx = ExecuteCtx::new(module_path, ProfilingStrategy::None)?; + let ctx = ExecuteCtx::new(module_path, ProfilingStrategy::None, HashSet::new())?; let req = Request::get("http://127.0.0.1:7878/").body(Body::from(""))?; let resp = ctx - .handle_request(req, "127.0.0.1".parse().unwrap()) + .handle_request_with_runtime_error(req, "127.0.0.1".parse().unwrap()) .await?; // The Guest was terminated and so should return a 500. assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR); - // Examine the WARNING message in the response headers and assert that it is the expected + // Examine the cause in the body and assert that it is the expected // Trap error supplied by the Guest. - if let Some(warning) = resp.headers().get(WARNING) { - assert_eq!( - warning, - "A fatal error occurred in the test-only implementation of header_values_get" - ); - } else { - panic!("The response did not contain the expected warning header"); - } + let body = resp.into_body().read_into_string().await?; + + assert_eq!( + body, + "Fatal error: [A fatal error occurred in the test-only implementation of header_values_get]" + ); + Ok(()) } diff --git a/lib/Cargo.toml b/lib/Cargo.toml index d261840d..89b82ae7 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -10,10 +10,10 @@ homepage = "https://github.com/fastly/Viceroy" repository = "https://github.com/fastly/Viceroy" keywords = ["wasm", "fastly"] categories = [ - "development-tools", - "network-programming", - "simulation", - "wasm" + "development-tools", + "network-programming", + "simulation", + "wasm" ] include = [ "../CHANGELOG.md", @@ -50,11 +50,12 @@ toml = "^0.5.9" tracing = "^0.1.37" tracing-futures = "^0.2.5" url = "^2.3.1" -wasi-common = "^2.0.0" -wasmtime = "^2.0.0" -wasmtime-wasi = { version = "^2.0.0", features = ["tokio"] } +wasi-common = "^3.0.0" +wasmtime = "^3.0.0" +wasmtime-wasi = "^3.0.0" +wasmtime-wasi-nn = "^3.0.0" webpki = "^0.21.0" -wiggle = { version = "^2.0.0", features = ["wasmtime_async"] } +wiggle = "^3.0.0" [dev-dependencies] tempfile = "^3.2.0" diff --git a/lib/src/config.rs b/lib/src/config.rs index 55b8b7ad..f8a053e1 100644 --- a/lib/src/config.rs +++ b/lib/src/config.rs @@ -19,21 +19,27 @@ mod limits; /// Types and deserializers for dictionaries configuration settings. mod dictionaries; + pub use self::dictionaries::Dictionary; pub use self::dictionaries::DictionaryName; + pub type Dictionaries = HashMap; /// Types and deserializers for backend configuration settings. mod backends; + pub use self::backends::Backend; + pub type Backends = HashMap>; /// Types and deserializers for geolocation configuration settings. mod geolocation; + pub use self::geolocation::Geolocation; /// Types and deserializers for object store configuration settings. mod object_store; + pub use crate::object_store::ObjectStore; /// Fastly-specific configuration information. @@ -171,6 +177,12 @@ pub struct LocalServerConfig { object_store: ObjectStoreConfig, } +/// Enum of available (experimental) wasi modules +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +pub enum ExperimentalModule { + WasiNn, +} + /// Internal deserializer used to read the `[testing]` section of a `fastly.toml` file. /// /// Once a TOML file has been read using [`toml::from_str`], this can be converted into diff --git a/lib/src/error.rs b/lib/src/error.rs index 5156c77d..f6729c5b 100644 --- a/lib/src/error.rs +++ b/lib/src/error.rs @@ -245,7 +245,7 @@ pub(crate) enum ExecutionError { /// /// [call]: https://docs.rs/wasmtime/latest/wasmtime/struct.Func.html#method.call #[error("WebAssembly execution trapped: {0}")] - WasmTrap(wasmtime::Trap), + WasmTrap(anyhow::Error), /// Errors thrown when trying to instantiate a guest context. #[error("Error creating context: {0}")] diff --git a/lib/src/execute.rs b/lib/src/execute.rs index f9712531..eb9b3b5e 100644 --- a/lib/src/execute.rs +++ b/lib/src/execute.rs @@ -3,7 +3,7 @@ use { crate::{ body::Body, - config::{Backends, Dictionaries, Geolocation}, + config::{Backends, Dictionaries, ExperimentalModule, Geolocation}, downstream::prepare_request, error::ExecutionError, linking::{create_store, dummy_store, link_host_functions, WasmCtx}, @@ -12,9 +12,9 @@ use { upstream::TlsConfig, Error, }, - cfg_if::cfg_if, hyper::{Request, Response}, std::{ + collections::HashSet, net::IpAddr, path::{Path, PathBuf}, sync::atomic::AtomicU64, @@ -23,6 +23,7 @@ use { }, tokio::sync::oneshot::{self, Sender}, tracing::{event, info, info_span, Instrument, Level}, + wasi_common::I32Exit, wasmtime::{Engine, InstancePre, Linker, Module, ProfilingStrategy}, }; @@ -58,15 +59,16 @@ pub struct ExecuteCtx { } impl ExecuteCtx { - /// Create a new execution context, given the path to a module. + /// Create a new execution context, given the path to a module and a set of experimental wasi modules. pub fn new( module_path: impl AsRef, profiling_strategy: ProfilingStrategy, + wasi_modules: HashSet, ) -> Result { let config = &configure_wasmtime(profiling_strategy); let engine = Engine::new(config)?; let mut linker = Linker::new(&engine); - link_host_functions(&mut linker)?; + link_host_functions(&mut linker, &wasi_modules)?; let module = Module::from_file(&engine, module_path)?; let mut dummy_store = dummy_store(&engine); @@ -186,11 +188,12 @@ impl ExecuteCtx { /// # Example /// /// ```no_run - /// # use hyper::{Body, http::Request}; + /// # use std::collections::HashSet; + /// use hyper::{Body, http::Request}; /// # use viceroy_lib::{Error, ExecuteCtx, ProfilingStrategy, ViceroyService}; /// # async fn f() -> Result<(), Error> { /// # let req = Request::new(Body::from("")); - /// let ctx = ExecuteCtx::new("path/to/a/file.wasm", ProfilingStrategy::None)?; + /// let ctx = ExecuteCtx::new("path/to/a/file.wasm", ProfilingStrategy::None, HashSet::new())?; /// let resp = ctx.handle_request(req, "127.0.0.1".parse().unwrap()).await?; /// # Ok(()) /// # } @@ -199,7 +202,7 @@ impl ExecuteCtx { self, incoming_req: Request, remote: IpAddr, - ) -> Result, Error> { + ) -> Result<(Response, Option), Error> { let req = prepare_request(incoming_req)?; let (sender, receiver) = oneshot::channel(); @@ -215,37 +218,24 @@ impl ExecuteCtx { ); let resp = match receiver.await { - Ok(resp) => resp, + Ok(resp) => (resp, None), Err(_) => match guest_handle .await .expect("guest worker finished without panicking") { - Ok(_) => Response::new(Body::empty()), + Ok(_) => (Response::new(Body::empty()), None), Err(ExecutionError::WasmTrap(_e)) => { + event!( + Level::ERROR, + "There was an error handling the request {}", + _e.to_string() + ); #[allow(unused_mut)] let mut response = Response::builder() .status(hyper::StatusCode::INTERNAL_SERVER_ERROR) .body(Body::empty()) .unwrap(); - - cfg_if! { - // The special functionality sequestered here in this cfg_if! block allows the trap-test - // fixture to affirm that the FatalError was experienced by the Guest. - if #[cfg(feature = "test-fatalerror-config")] { - - // Slice off the first line of the error message returned in the GuestError. - let error_msg = _e.to_string(); - let msg = error_msg.split('\n').next().unwrap(); - - // Create a HeaderValue from the error message and place it in the response. - let hdr_val = - http::header::HeaderValue::from_str(&msg).expect("error message is a valid header"); - - response.headers_mut().insert(http::header::WARNING, hdr_val); - } - } - - response + (response, Some(_e)) } Err(e) => panic!("failed to run guest: {}", e), }, @@ -254,6 +244,26 @@ impl ExecuteCtx { Ok(resp) } + pub async fn handle_request_with_runtime_error( + self, + incoming_req: Request, + remote: IpAddr, + ) -> Result, Error> { + let result = self.handle_request(incoming_req, remote).await?; + let resp = match result.1 { + None => result.0, + Some(err) => { + let body = err.root_cause().to_string(); + Response::builder() + .status(hyper::StatusCode::INTERNAL_SERVER_ERROR) + .body(Body::from(body.as_bytes())) + .unwrap() + } + }; + + Ok(resp) + } + async fn run_guest( self, req: Request, @@ -294,17 +304,22 @@ impl ExecuteCtx { .map_err(ExecutionError::Typechecking)?; // Invoke the entrypoint function, which may or may not send a downstream response. - let outcome = main_func - .call_async(&mut store, ()) - .await - .map(|_| ()) - .map_err(|trap| { - // Be sure that we only log non-zero status codes. - if trap.i32_exit_status() != Some(0) { - event!(Level::ERROR, "WebAssembly trapped: {}", trap); + let outcome = match main_func.call_async(&mut store, ()).await { + Ok(_) => Ok(()), + Err(e) => { + if let Some(exit) = e.downcast_ref::() { + if exit.0 == 0 { + Ok(()) + } else { + event!(Level::ERROR, "WebAssembly exited with error: {:?}", e); + Err(ExecutionError::WasmTrap(e)) + } + } else { + event!(Level::ERROR, "WebAssembly trapped: {:?}", e); + Err(ExecutionError::WasmTrap(e)) } - ExecutionError::WasmTrap(trap) - }); + } + }; // Ensure the downstream response channel is closed, whether or not a response was // sent during execution. @@ -330,7 +345,7 @@ impl ExecuteCtx { fn configure_wasmtime(profiling_strategy: ProfilingStrategy) -> wasmtime::Config { use wasmtime::{ - Config, InstanceAllocationStrategy, InstanceLimits, PoolingAllocationStrategy, + Config, InstanceAllocationStrategy, PoolingAllocationConfig, PoolingAllocationStrategy, WasmBacktraceDetails, }; @@ -342,31 +357,33 @@ fn configure_wasmtime(profiling_strategy: ProfilingStrategy) -> wasmtime::Config config.profiler(profiling_strategy); const MB: usize = 1 << 20; + let mut pooling_allocation_config = PoolingAllocationConfig::default(); - let instance_limits = InstanceLimits { - // This number matches C@E production - size: MB, - - // Core wasm programs have 1 memory - memories: 1, - // allow for up to 128MiB of linear memory. Wasm pages are 64k - memory_pages: 128 * (MB as u64) / (64 * 1024), - // Core wasm programs have 1 table - tables: 1, - // Some applications create a large number of functions, in particular - // when compiled in debug mode or applications written in swift. Every - // function can end up in the table - table_elements: 98765, - // Number of instances: the pool will allocate virtual memory for this - // many instances, which limits the number of requests which can be - // handled concurrently. - count: InstanceLimits::default().count, - }; + // This number matches C@E production + pooling_allocation_config.instance_size(MB); + + // Core wasm programs have 1 memory + pooling_allocation_config.instance_memories(1); + + // allow for up to 128MiB of linear memory. Wasm pages are 64k + pooling_allocation_config.instance_memory_pages(128 * (MB as u64) / (64 * 1024)); + + // Core wasm programs have 1 table + pooling_allocation_config.instance_tables(1); + + // Some applications create a large number of functions, in particular + // when compiled in debug mode or applications written in swift. Every + // function can end up in the table + pooling_allocation_config.instance_table_elements(98765); + + // Number of instances: the pool will allocate virtual memory for this + // many instances, which limits the number of requests which can be + // handled concurrently. + pooling_allocation_config.strategy(PoolingAllocationStrategy::NextAvailable); - config.allocation_strategy(InstanceAllocationStrategy::Pooling { - strategy: PoolingAllocationStrategy::NextAvailable, - instance_limits, - }); + config.allocation_strategy(InstanceAllocationStrategy::Pooling( + pooling_allocation_config, + )); config } diff --git a/lib/src/linking.rs b/lib/src/linking.rs index 55197202..495d27eb 100644 --- a/lib/src/linking.rs +++ b/lib/src/linking.rs @@ -1,15 +1,21 @@ //! Linking and name resolution. use { - crate::{execute::ExecuteCtx, logging::LogEndpoint, session::Session, wiggle_abi, Error}, + crate::{ + config::ExperimentalModule, execute::ExecuteCtx, logging::LogEndpoint, session::Session, + wiggle_abi, Error, + }, anyhow::Context, + std::collections::HashSet, wasi_common::{pipe::WritePipe, WasiCtx}, wasmtime::{Engine, Linker, Store}, - wasmtime_wasi::tokio::WasiCtxBuilder, + wasmtime_wasi::WasiCtxBuilder, + wasmtime_wasi_nn::WasiNnCtx, }; pub struct WasmCtx { wasi: WasiCtx, + wasi_nn: WasiNnCtx, session: Session, } @@ -17,6 +23,11 @@ impl WasmCtx { fn wasi(&mut self) -> &mut WasiCtx { &mut self.wasi } + + fn wasi_nn(&mut self) -> &mut WasiNnCtx { + &mut self.wasi_nn + } + fn session(&mut self) -> &mut Session { &mut self.session } @@ -37,7 +48,12 @@ pub(crate) fn create_store( session: Session, ) -> Result, anyhow::Error> { let wasi = make_wasi_ctx(ctx, &session).context("creating Wasi context")?; - let wasm_ctx = WasmCtx { wasi, session }; + let wasi_nn = WasiNnCtx::new().unwrap(); + let wasm_ctx = WasmCtx { + wasi, + wasi_nn, + session, + }; let mut store = Store::new(ctx.engine(), wasm_ctx); store.out_of_fuel_async_yield(u64::MAX, 10000); Ok(store) @@ -47,8 +63,16 @@ pub(crate) fn create_store( /// possible, and never used to execute code pub(crate) fn dummy_store(engine: &Engine) -> Store { let wasi = WasiCtxBuilder::new().build(); + let wasi_nn = WasiNnCtx::new().unwrap(); let session = Session::mock(); - Store::new(engine, WasmCtx { wasi, session }) + Store::new( + engine, + WasmCtx { + wasi, + wasi_nn, + session, + }, + ) } /// Constructs a fresh `WasiCtx` for _each_ incoming request. @@ -78,8 +102,16 @@ fn make_wasi_ctx(ctx: &ExecuteCtx, session: &Session) -> Result) -> Result<(), Error> { - wasmtime_wasi::tokio::add_to_linker(linker, WasmCtx::wasi)?; +pub fn link_host_functions( + linker: &mut Linker, + experimental_modules: &HashSet, +) -> Result<(), Error> { + experimental_modules + .iter() + .try_for_each(|experimental_module| match experimental_module { + ExperimentalModule::WasiNn => wasmtime_wasi_nn::add_to_linker(linker, WasmCtx::wasi_nn), + })?; + wasmtime_wasi::add_to_linker(linker, WasmCtx::wasi)?; wiggle_abi::fastly_abi::add_to_linker(linker, WasmCtx::session)?; wiggle_abi::fastly_dictionary::add_to_linker(linker, WasmCtx::session)?; wiggle_abi::fastly_geo::add_to_linker(linker, WasmCtx::session)?; diff --git a/lib/src/service.rs b/lib/src/service.rs index e37bed67..57628059 100644 --- a/lib/src/service.rs +++ b/lib/src/service.rs @@ -40,9 +40,10 @@ impl ViceroyService { /// # Example /// /// ```no_run - /// # use viceroy_lib::{Error, ExecuteCtx, ProfilingStrategy, ViceroyService}; + /// # use std::collections::HashSet; + /// use viceroy_lib::{Error, ExecuteCtx, ProfilingStrategy, ViceroyService}; /// # fn f() -> Result<(), Error> { - /// let ctx = ExecuteCtx::new("path/to/a/file.wasm", ProfilingStrategy::None)?; + /// let ctx = ExecuteCtx::new("path/to/a/file.wasm", ProfilingStrategy::None, HashSet::new())?; /// let svc = ViceroyService::new(ctx); /// # Ok(()) /// # } @@ -127,6 +128,6 @@ impl Service> for RequestService { let remote = self.remote_addr; // Now, use the execution context to handle the request. - Box::pin(async move { ctx.handle_request(req, remote).await }) + Box::pin(async move { ctx.handle_request(req, remote).await.map(|result| result.0) }) } } diff --git a/lib/src/wiggle_abi.rs b/lib/src/wiggle_abi.rs index 707872c3..64742dc7 100644 --- a/lib/src/wiggle_abi.rs +++ b/lib/src/wiggle_abi.rs @@ -111,7 +111,7 @@ impl FastlyAbi for Session { } impl UserErrorConversion for Session { - fn fastly_status_from_error(&mut self, e: Error) -> Result { + fn fastly_status_from_error(&mut self, e: Error) -> Result { match e { Error::UnknownBackend(ref backend) => { let config_path = &self.config_path(); @@ -154,7 +154,7 @@ impl UserErrorConversion for Session { match e { // If a Fatal Error was encountered, propagate the error message out. - Error::FatalError(msg) => Err(wiggle::Trap::String(msg)), + Error::FatalError(msg) => Err(anyhow::Error::new(Error::FatalError(msg))), // Propagate the actionable error to the guest. _ => Ok(e.to_fastly_status()), }