From a6542da98c0e0973a8a12d68667987ee94295f6b Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 26 Mar 2024 01:58:41 -0500 Subject: [PATCH 1/2] Attempt wasmer 3 --- Cargo.lock | 501 +++++++++++++++++++++++++++------------------------- Cargo.toml | 28 ++- build.rs | 18 +- src/main.rs | 15 +- 4 files changed, 280 insertions(+), 282 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a843e4b..04fc9e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -103,9 +103,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "backtrace" @@ -356,56 +356,57 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.82.3" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38faa2a16616c8e78a18d37b4726b98bfd2de192f2fdc8a39ddf568a408a0f75" +checksum = "529ffacce2249ac60edba2941672dfedf3d96558b415d0d8083cd007456e0f55" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.82.3" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f192472a3ba23860afd07d2b0217dc628f21fcc72617aa1336d98e1671f33b" +checksum = "427d105f617efc8cb55f8d036a7fded2e227892d8780b4985e5551f8d27c4a92" dependencies = [ "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", + "cranelift-isle", "gimli 0.26.2", "log", - "regalloc", + "regalloc2", "smallvec", "target-lexicon", ] [[package]] name = "cranelift-codegen-meta" -version = "0.82.3" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32ddb89e9b89d3d9b36a5b7d7ea3261c98235a76ac95ba46826b8ec40b1a24" +checksum = "551674bed85b838d45358e3eab4f0ffaa6790c70dc08184204b9a54b41cdb7d1" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.82.3" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fd0d9f288cc1b42d9333b7a776b17e278fc888c28e6a0f09b5573d45a150bc" +checksum = "2b3a63ae57498c3eb495360944a33571754241e15e47e3bcae6082f40fec5866" [[package]] name = "cranelift-entity" -version = "0.82.3" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3bfe172b83167604601faf9dc60453e0d0a93415b57a9c4d1a7ae6849185cf" +checksum = "11aa8aa624c72cc1c94ea3d0739fa61248260b5b14d3646f51593a88d67f3e6e" [[package]] name = "cranelift-frontend" -version = "0.82.3" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a006e3e32d80ce0e4ba7f1f9ddf66066d052a8c884a110b91d05404d6ce26dce" +checksum = "544ee8f4d1c9559c9aa6d46e7aaeac4a13856d620561094f35527356c7d21bd0" dependencies = [ "cranelift-codegen", "log", @@ -414,13 +415,10 @@ dependencies = [ ] [[package]] -name = "crc32fast" -version = "1.4.0" +name = "cranelift-isle" +version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" -dependencies = [ - "cfg-if", -] +checksum = "ed16b14363d929b8c37e3c557d0a7396791b383ecc302141643c054343170aad" [[package]] name = "crossbeam-deque" @@ -518,6 +516,17 @@ dependencies = [ "serde", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "digest" version = "0.10.7" @@ -768,6 +777,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generational-arena" version = "0.2.9" @@ -855,15 +873,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -1143,6 +1152,12 @@ dependencies = [ "cc", ] +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + [[package]] name = "ident_case" version = "1.0.1" @@ -1275,9 +1290,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jni" @@ -1328,16 +1343,6 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" -[[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 = "libredox" version = "0.0.1" @@ -1401,27 +1406,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "loupe" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6a72dfa44fe15b5e76b94307eeb2ff995a8c5b283b55008940c02e0c5b634d" -dependencies = [ - "indexmap 1.9.3", - "loupe-derive", - "rustversion", -] - -[[package]] -name = "loupe-derive" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fbfc88337168279f2e9ae06e157cfed4efd3316e14dc96ed074d4f2e6c5952" -dependencies = [ - "quote", - "syn 1.0.109", -] - [[package]] name = "mach" version = "0.3.2" @@ -1639,9 +1623,6 @@ version = "0.28.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" dependencies = [ - "crc32fast", - "hashbrown 0.11.2", - "indexmap 1.9.3", "memchr", ] @@ -1901,6 +1882,17 @@ dependencies = [ "psl-types", ] +[[package]] +name = "pulldown-cmark" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" +dependencies = [ + "bitflags 1.3.2", + "memchr", + "unicase", +] + [[package]] name = "quote" version = "1.0.35" @@ -2002,13 +1994,14 @@ dependencies = [ ] [[package]] -name = "regalloc" -version = "0.0.34" +name = "regalloc2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62446b1d3ebf980bdc68837700af1d77b37bc430e524bf95319c6eada2a4cc02" +checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" dependencies = [ + "fxhash", "log", - "rustc-hash", + "slice-group-by", "smallvec", ] @@ -2156,6 +2149,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.12.3", + "indexmap 1.9.3", "ptr_meta", "rend", "rkyv_derive", @@ -2195,7 +2189,6 @@ dependencies = [ "directories-next", "env_logger", "futures-util", - "inkwell", "itertools 0.12.1", "llvm-sys", "log", @@ -2224,9 +2217,9 @@ dependencies = [ "wasi-process2", "wasmer", "wasmer-cache", + "wasmer-compiler", "wasmer-compiler-cranelift", "wasmer-compiler-llvm", - "wasmer-engine", "wasmer-wasi", "webbrowser", ] @@ -2237,12 +2230,6 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc_version" version = "0.2.3" @@ -2511,12 +2498,14 @@ dependencies = [ ] [[package]] -name = "serde_bytes" -version = "0.11.14" +name = "serde-wasm-bindgen" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" dependencies = [ + "js-sys", "serde", + "wasm-bindgen", ] [[package]] @@ -2532,9 +2521,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.114" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ "itoa", "ryu", @@ -2648,6 +2637,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + [[package]] name = "smallvec" version = "1.13.2" @@ -3278,6 +3273,12 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + [[package]] name = "ureq" version = "2.9.6" @@ -3406,11 +3407,12 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi-process2" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8fe1653edf7a01e98425b81b12936445f802030eaa6331a9ebe73f6db4e5fb4" +checksum = "b27336676369a4611aabb4d1a007d111dcdfeb16c86dcec449106a9285b6a0b9" dependencies = [ "bytes", + "once_cell", "parking_lot", "serde", "tokio", @@ -3443,6 +3445,29 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-downcast" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dac026d43bcca6e7ce1c0956ba68f59edf6403e8e930a5d891be72c31a44340" +dependencies = [ + "js-sys", + "once_cell", + "wasm-bindgen", + "wasm-bindgen-downcast-macros", +] + +[[package]] +name = "wasm-bindgen-downcast-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5020cfa87c7cecefef118055d44e3c1fc122c7ec25701d528ee458a0b45f38f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "wasm-bindgen-futures" version = "0.4.42" @@ -3495,49 +3520,34 @@ dependencies = [ [[package]] name = "wasmer" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea8d8361c9d006ea3d7797de7bd6b1492ffd0f91a22430cfda6c1658ad57bedf" +checksum = "840af6d21701220cb805dc7201af301cb99e9b4f646f48a41befbc1d949f0f90" dependencies = [ + "bytes", "cfg-if", "indexmap 1.9.3", "js-sys", - "loupe", "more-asserts", + "serde", + "serde-wasm-bindgen", "target-lexicon", "thiserror", "wasm-bindgen", - "wasmer-artifact", + "wasm-bindgen-downcast", "wasmer-compiler", - "wasmer-compiler-cranelift", "wasmer-derive", - "wasmer-engine", - "wasmer-engine-dylib", - "wasmer-engine-universal", "wasmer-types", "wasmer-vm", "wat", "winapi", ] -[[package]] -name = "wasmer-artifact" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aaf9428c29c1d8ad2ac0e45889ba8a568a835e33fd058964e5e500f2f7ce325" -dependencies = [ - "enumset", - "loupe", - "thiserror", - "wasmer-compiler", - "wasmer-types", -] - [[package]] name = "wasmer-cache" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0def391ee1631deac5ac1e6ce919c07a5ccb936ad0fd44708cdc2365c49561a4" +checksum = "08890d685fc8ab91936f1463707adcd21e886b24383487fae7d19fc681c31358" dependencies = [ "blake3", "hex", @@ -3547,33 +3557,38 @@ dependencies = [ [[package]] name = "wasmer-compiler" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67a6cd866aed456656db2cfea96c18baabbd33f676578482b85c51e1ee19d2c" +checksum = "b86fab98beaaace77380cb04e681773739473860d1b8499ea6b14f920923e0c5" dependencies = [ + "backtrace", + "cfg-if", + "enum-iterator", "enumset", - "loupe", - "rkyv", - "serde", - "serde_bytes", + "lazy_static", + "leb128", + "memmap2", + "more-asserts", + "region", + "rustc-demangle", "smallvec", - "target-lexicon", "thiserror", "wasmer-types", + "wasmer-vm", "wasmparser", + "winapi", ] [[package]] name = "wasmer-compiler-cranelift" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48be2f9f6495f08649e4f8b946a2cbbe119faf5a654aa1457f9504a99d23dae0" +checksum = "015eef629fc84889540dc1686bd7fa524b93da9fd2d275b16c49dbe96268e58f" dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", "gimli 0.26.2", - "loupe", "more-asserts", "rayon", "smallvec", @@ -3585,9 +3600,9 @@ dependencies = [ [[package]] name = "wasmer-compiler-llvm" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69f50825c69be2efb71e3059a3222de6e5d06552da51907cac761f701bde83" +checksum = "2f6488bd5a2ddb5aa9bc9f8d5da8015b1e13aa4592911471e76088ceddcfee94" dependencies = [ "byteorder", "cc", @@ -3595,7 +3610,6 @@ dependencies = [ "itertools 0.10.5", "lazy_static", "libc", - "loupe", "object 0.28.4", "rayon", "regex", @@ -3610,9 +3624,9 @@ dependencies = [ [[package]] name = "wasmer-derive" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e50405cc2a2f74ff574584710a5f2c1d5c93744acce2ca0866084739284b51" +checksum = "1ff577b7c1cfcd3d7c5b3a09fe1a499b73f7c17084845ff71225c8250a6a63a9" dependencies = [ "proc-macro-error", "proc-macro2", @@ -3621,123 +3635,35 @@ dependencies = [ ] [[package]] -name = "wasmer-engine" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f98f010978c244db431b392aeab0661df7ea0822343334f8f2a920763548e45" -dependencies = [ - "backtrace", - "enumset", - "lazy_static", - "loupe", - "memmap2", - "more-asserts", - "rustc-demangle", - "serde", - "serde_bytes", - "target-lexicon", - "thiserror", - "wasmer-artifact", - "wasmer-compiler", - "wasmer-types", - "wasmer-vm", -] - -[[package]] -name = "wasmer-engine-dylib" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0358af9c154724587731175553805648d9acb8f6657880d165e378672b7e53" -dependencies = [ - "cfg-if", - "enum-iterator", - "enumset", - "leb128", - "libloading", - "loupe", - "object 0.28.4", - "rkyv", - "serde", - "tempfile", - "tracing", - "wasmer-artifact", - "wasmer-compiler", - "wasmer-engine", - "wasmer-object", - "wasmer-types", - "wasmer-vm", - "which", -] - -[[package]] -name = "wasmer-engine-universal" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440dc3d93c9ca47865a4f4edd037ea81bf983b5796b59b3d712d844b32dbef15" -dependencies = [ - "cfg-if", - "enumset", - "leb128", - "loupe", - "region", - "rkyv", - "wasmer-compiler", - "wasmer-engine", - "wasmer-engine-universal-artifact", - "wasmer-types", - "wasmer-vm", - "winapi", -] - -[[package]] -name = "wasmer-engine-universal-artifact" -version = "2.3.0" +name = "wasmer-types" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f1db3f54152657eb6e86c44b66525ff7801dad8328fe677da48dd06af9ad41" +checksum = "8b9600f9da966abae3be0b0a4560e7d1f2c88415a2d01ce362ac06063cb1c473" dependencies = [ "enum-iterator", "enumset", - "loupe", + "indexmap 1.9.3", + "more-asserts", "rkyv", + "target-lexicon", "thiserror", - "wasmer-artifact", - "wasmer-compiler", - "wasmer-types", -] - -[[package]] -name = "wasmer-object" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d831335ff3a44ecf451303f6f891175c642488036b92ceceb24ac8623a8fa8b" -dependencies = [ - "object 0.28.4", - "thiserror", - "wasmer-compiler", - "wasmer-types", ] [[package]] -name = "wasmer-types" -version = "2.3.0" +name = "wasmer-vbus" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39df01ea05dc0a9bab67e054c7cb01521e53b35a7bb90bd02eca564ed0b2667f" +checksum = "72b42f76b9f09c68084de3a35fdf4907609f4b5005ecf3767fa1839a669dcbdb" dependencies = [ - "backtrace", - "enum-iterator", - "indexmap 1.9.3", - "loupe", - "more-asserts", - "rkyv", - "serde", "thiserror", + "wasmer-vfs", ] [[package]] name = "wasmer-vfs" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9302eae3edc53cb540c2d681e7f16d8274918c1ce207591f04fed351649e97c0" +checksum = "34bfbd243503d64aed4fc8a194657a561cae6c2d782dbcf649211d7f4db9e413" dependencies = [ "libc", "thiserror", @@ -3746,9 +3672,9 @@ dependencies = [ [[package]] name = "wasmer-vm" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d965fa61f4dc4cdb35a54daaf7ecec3563fbb94154a6c35433f879466247dd" +checksum = "9fc68a7f0a003e6cb63845b7510065097d289553201d64afb9a5e1744da3c6a0" dependencies = [ "backtrace", "cc", @@ -3758,27 +3684,36 @@ dependencies = [ "indexmap 1.9.3", "lazy_static", "libc", - "loupe", "mach", "memoffset", "more-asserts", "region", - "rkyv", "scopeguard", - "serde", "thiserror", - "wasmer-artifact", "wasmer-types", "winapi", ] +[[package]] +name = "wasmer-vnet" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bc4fe3b48ccc620901bdcdfac98d8a76ef3487412c221752814750c2e7db4c1" +dependencies = [ + "bytes", + "thiserror", + "wasmer-vfs", +] + [[package]] name = "wasmer-wasi" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadbe31e3c1b6f3e398ad172b169152ae1a743ae6efd5f9ffb34019983319d99" +checksum = "e893ecd57c63db83b17dacfaee90f660e1d7f5b26d2f9d88ea6aa2e8c4bc301d" dependencies = [ + "bytes", "cfg-if", + "derivative", "generational-arena", "getrandom", "libc", @@ -3786,20 +3721,108 @@ dependencies = [ "tracing", "wasm-bindgen", "wasmer", + "wasmer-vbus", "wasmer-vfs", + "wasmer-vnet", + "wasmer-wasi-local-networking", "wasmer-wasi-types", "winapi", ] +[[package]] +name = "wasmer-wasi-local-networking" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd65882d8cee793848776f26e979b7ff3e139d927947d87304c940c89527a730" +dependencies = [ + "bytes", + "tracing", + "wasmer-vfs", + "wasmer-vnet", +] + [[package]] name = "wasmer-wasi-types" -version = "2.3.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22dc83aadbdf97388de3211cb6f105374f245a3cf2a5c65a16776e7a087a8468" +checksum = "e1afdec83c62d22bf7110b83d662a08f708332fd728a213399919a045a1061d4" dependencies = [ "byteorder", "time 0.2.27", + "wasmer", + "wasmer-derive", "wasmer-types", + "wasmer-wit-bindgen-gen-core", + "wasmer-wit-bindgen-gen-rust-wasm", + "wasmer-wit-bindgen-rust", + "wasmer-wit-parser", +] + +[[package]] +name = "wasmer-wit-bindgen-gen-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff8aa5be5ae5d61f5e151dc2c0e603093fe28395d2083b65ef7a3547844054fe" +dependencies = [ + "anyhow", + "wasmer-wit-parser", +] + +[[package]] +name = "wasmer-wit-bindgen-gen-rust" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "438bce7c4589842bf100cc9b312443a9b5fc6440e58ab0b8c114e460219c3c3b" +dependencies = [ + "heck 0.3.3", + "wasmer-wit-bindgen-gen-core", +] + +[[package]] +name = "wasmer-wit-bindgen-gen-rust-wasm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505f5168cfee591840e13e158a5c5e2f95d6df1df710839021564f36bee7bafc" +dependencies = [ + "heck 0.3.3", + "wasmer-wit-bindgen-gen-core", + "wasmer-wit-bindgen-gen-rust", +] + +[[package]] +name = "wasmer-wit-bindgen-rust" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "968747f1271f74aab9b70d9c5d4921db9bd13b4ec3ba5506506e6e7dc58c918c" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "wasmer-wit-bindgen-rust-impl", +] + +[[package]] +name = "wasmer-wit-bindgen-rust-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd26fe00d08bd2119870b017d13413dfbd51e7750b6634d649fc7a7bbc057b85" +dependencies = [ + "proc-macro2", + "syn 1.0.109", + "wasmer-wit-bindgen-gen-core", + "wasmer-wit-bindgen-gen-rust-wasm", +] + +[[package]] +name = "wasmer-wit-parser" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46c9a15086be8a2eb3790613902b9d3a9a687833b17cd021de263a20378585a" +dependencies = [ + "anyhow", + "id-arena", + "pulldown-cmark", + "unicode-normalization", + "unicode-xid", ] [[package]] @@ -3857,18 +3880,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 1aa2412..07ad016 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,8 @@ name = "rumblebot" version = "0.1.0" authors = ["Anton ", "Noa "] edition = "2018" +# https://github.com/wasmerio/wasmer/issues/3377 +resolver = "2" [dependencies] logic = { path = "../logic/logic" } @@ -25,12 +27,9 @@ reqwest = { version = "0.12", features = [ native-runner = { path = "../logic/env-runners/native" } wasi-process2 = "0.3" -wasmer = { version = "2.0", default-features = false, features = [ - "default-universal", - "default-cranelift", -] } -wasmer-cache = "2.0" -wasmer-wasi = "2.0" +wasmer = { version = "3", default-features = false } +wasmer-cache = "3" +wasmer-wasi = "3" anyhow = "1.0.81" itertools = "0.12.1" @@ -56,21 +55,14 @@ sentry = "0.32.2" [features] default = ["build-cranelift"] build-cranelift = ["wasmer-compiler-cranelift"] -build-llvm = ["wasmer-compiler-llvm", "inkwell", "llvm-sys-120"] +build-llvm = ["wasmer-compiler-llvm", "llvm-sys-120"] [build-dependencies] -wasmer = { version = "2.0", default-features = false, features = ["universal"] } -wasmer-engine = "2.0" -wasmer-compiler-cranelift = { version = "2.0", optional = true } -wasmer-compiler-llvm = { version = "2.0", optional = true } +wasmer = { version = "3", default-features = false, features = ["compiler"] } +wasmer-compiler = "3" +wasmer-compiler-cranelift = { version = "3", optional = true } +wasmer-compiler-llvm = { version = "3", optional = true } llvm-sys-120 = { package = "llvm-sys", version = "120.3.2", features = ["prefer-static"], optional = true } -[dependencies.inkwell] -package = "inkwell" -version = "=0.1.0-beta.4" -default-features = false -features = ["llvm12-0"] -optional = true - [patch.crates-io] multipart = { git = "https://github.com/coolreader18/multipart", rev = "ee033794ada7c322e3cef50713854dff873f546d" } diff --git a/build.rs b/build.rs index 3755e44..b950ffb 100644 --- a/build.rs +++ b/build.rs @@ -1,7 +1,7 @@ use std::io::Write; use std::path::PathBuf; use std::{env, fs}; -use wasmer_engine::ArtifactCreate; +use wasmer_compiler::ArtifactCreate; #[cfg(feature = "build-cranelift")] use wasmer_compiler_cranelift::Cranelift as Compiler; @@ -12,9 +12,8 @@ enum CompilationSource { Precompiled(PathBuf), #[cfg(any(feature = "build-cranelift", feature = "build-llvm"))] Compiler { - engine: wasmer::UniversalEngine, + engine: wasmer::Engine, runners_dir: PathBuf, - universal_ext: &'static str, tunables: wasmer::BaseTunables, }, } @@ -37,10 +36,7 @@ fn main() { let target = wasmer::Target::new(env::var("TARGET").unwrap().parse().unwrap(), features); let tunables = wasmer::BaseTunables::for_target(&target); - let universal_ext = wasmer::UniversalArtifact::get_default_extension(target.triple()); - let engine = wasmer::Universal::new(Compiler::new()) - .target(target) - .engine(); + let engine = wasmer::EngineBuilder::new(Compiler::default()).engine(); let runners_dir = fs::canonicalize("../logic/wasm-dist/lang-runners") .expect("need to run logic/build-wasm.sh"); @@ -48,7 +44,6 @@ fn main() { CompilationSource::Compiler { engine, runners_dir, - universal_ext, tunables, } } @@ -72,13 +67,12 @@ fn main() { CompilationSource::Compiler { engine, runners_dir, - universal_ext, tunables, } => { let mut src = runners_dir.join(runner); src.set_extension("wasm"); let mut dst = out_dir.join(runner); - dst.set_extension(*universal_ext); + dst.set_extension("wasmu"); println!("compiling {}", runner); @@ -93,7 +87,7 @@ fn main() { if needs_updating { let wasm_source = fs::read(&src).unwrap(); let artifact = - wasmer::UniversalArtifact::new(engine, &wasm_source, tunables).unwrap(); + wasmer::Artifact::new(engine, &wasm_source, tunables).unwrap(); fs::write(&dst, artifact.serialize().unwrap()).unwrap(); } @@ -109,7 +103,7 @@ fn main() { if include_bin { "include_bytes!" } else { - "&std::fs::read" + "std::fs::read" }, path, if include_bin { diff --git a/src/main.rs b/src/main.rs index 470bccb..07265dc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,9 +11,10 @@ use tokio::{ io::{self, AsyncBufReadExt}, time, }; -use wasi_process2::WasiProcess; use wasmer_cache::{Cache, FileSystemCache}; -use wasmer_wasi::WasiVersion; +use wasi_process2::WasiProcess; +use wasmer_wasi::{WasiState, WasiVersion, WasiEnv}; +use wasmer::{AsStoreMut, AsStoreRef, Instance, FunctionEnv}; use logic::{GameMode, MainOutput, RobotRunner}; @@ -239,14 +240,14 @@ impl Runner { .unwrap() .args(args) .arg("/source/sourcecode"); - let env = wasmer_wasi::WasiEnv::new(state.build()?); + let env = FunctionEnv::new(&mut STORE.as_store_mut(), WasiEnv::new(state.build()?)); let instance = { // imports isn't Send - let imports = wasmer_wasi::generate_import_object_from_env(store, env, version); - wasmer::Instance::new(module, &imports)? + let imports = wasmer_wasi::generate_import_object_from_env(&mut store.as_store_mut(), &env, version); + wasmer::Instance::new(&mut store.as_store_mut(), module, &imports)? }; let memory = instance.exports.get::("memory").unwrap(); - let mut proc = WasiProcess::new(&instance, Default::default())?; + let mut proc = WasiProcess::new(&mut store, &instance, Default::default())?; let stdin = io::BufWriter::new(proc.stdin.take().unwrap()); let stdout = io::BufReader::new(proc.stdout.take().unwrap()); @@ -325,7 +326,7 @@ impl Runner { } static STORE: Lazy = Lazy::new(|| { - let engine = wasmer::UniversalEngine::headless(); + let engine = wasmer::Engine::headless(); wasmer::Store::new(&engine) }); From 541ee25f0a690c3c2807ef44791832130cf29c4d Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 29 Mar 2024 00:59:01 -0500 Subject: [PATCH 2/2] Make wasmer 3 work --- Cargo.lock | 32 ++++++++++++------------- Cargo.toml | 2 +- src/main.rs | 67 +++++++++++++++++++++-------------------------------- 3 files changed, 44 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 04fc9e6..b13f3a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -240,9 +240,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.35" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1456,9 +1456,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memmap2" @@ -1684,9 +1684,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.101" +version = "0.9.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" dependencies = [ "cc", "libc", @@ -2030,9 +2030,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "region" @@ -3007,9 +3007,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" dependencies = [ "backtrace", "bytes", @@ -3511,9 +3511,9 @@ checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-encoder" -version = "0.201.0" +version = "0.202.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9c7d2731df60006819b013f64ccc2019691deccf6e11a1804bc850cd6748f1a" +checksum = "bfd106365a7f5f7aa3c1916a98cbb3ad477f5ff96ddb130285a91c6e7429e67a" dependencies = [ "leb128", ] @@ -3833,9 +3833,9 @@ checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a" [[package]] name = "wast" -version = "201.0.0" +version = "202.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef6e1ef34d7da3e2b374fd2b1a9c0227aff6cad596e1b24df9b58d0f6222faa" +checksum = "1fbcb11204515c953c9b42ede0a46a1c5e17f82af05c4fae201a8efff1b0f4fe" dependencies = [ "bumpalo", "leb128", @@ -3846,9 +3846,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.201.0" +version = "1.202.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453d5b37a45b98dee4f4cb68015fc73634d7883bbef1c65e6e9c78d454cf3f32" +checksum = "4de4b15a47135c56a3573406e9977b9518787a6154459b4842a9b9d3d1684848" dependencies = [ "wast", ] diff --git a/Cargo.toml b/Cargo.toml index 07ad016..6fc678f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ reqwest = { version = "0.12", features = [ ] } native-runner = { path = "../logic/env-runners/native" } -wasi-process2 = "0.3" +wasi-process2 = "=0.3.5" wasmer = { version = "3", default-features = false } wasmer-cache = "3" wasmer-wasi = "3" diff --git a/src/main.rs b/src/main.rs index 07265dc..e065d48 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ use tokio::{ }; use wasmer_cache::{Cache, FileSystemCache}; use wasi_process2::WasiProcess; -use wasmer_wasi::{WasiState, WasiVersion, WasiEnv}; +use wasmer_wasi::{WasiFunctionEnv, WasiVersion, WasiEnv}; use wasmer::{AsStoreMut, AsStoreRef, Instance, FunctionEnv}; use logic::{GameMode, MainOutput, RobotRunner}; @@ -181,7 +181,6 @@ enum RunnerKind { runner: WasiRunner, /// the directory that we store the source file in; we need to keep it open _dir: tempfile::TempDir, - memory: wasmer::Memory, }, } @@ -197,12 +196,11 @@ impl RobotRunner for Runner { let inner = async move { match kind { RunnerKind::Command(r) => r.run(input).await, - RunnerKind::Wasi { runner, memory, .. } => { + RunnerKind::Wasi { runner, .. } => { log::debug!( - "start of turn {} w/ {} units: {:?} allocated", + "start of turn {} w/ {} units", input.state.turn, input.state.objs.len(), - memory.size() ); runner.run(input).await } @@ -227,7 +225,6 @@ impl Runner { } async fn new_wasm( - store: &wasmer::Store, module: &wasmer::Module, version: WasiVersion, args: &[String], @@ -240,14 +237,17 @@ impl Runner { .unwrap() .args(args) .arg("/source/sourcecode"); - let env = FunctionEnv::new(&mut STORE.as_store_mut(), WasiEnv::new(state.build()?)); - let instance = { - // imports isn't Send - let imports = wasmer_wasi::generate_import_object_from_env(&mut store.as_store_mut(), &env, version); - wasmer::Instance::new(&mut store.as_store_mut(), module, &imports)? + let mut proc = unsafe { + let wasi_env = WasiEnv::new(state.build()?); + let mut env = WasiFunctionEnv::new(&mut STORE.as_store_mut(), wasi_env); + let instance = { + // imports isn't Send + let imports = wasmer_wasi::generate_import_object_from_env(&mut STORE.as_store_mut(), &env.env, version); + wasmer::Instance::new(&mut STORE.as_store_mut(), module, &imports)? + }; + env.initialize(&mut STORE.as_store_mut(), &instance)?; + WasiProcess::new(&mut STORE, &instance, Default::default())? }; - let memory = instance.exports.get::("memory").unwrap(); - let mut proc = WasiProcess::new(&mut store, &instance, Default::default())?; let stdin = io::BufWriter::new(proc.stdin.take().unwrap()); let stdout = io::BufReader::new(proc.stdout.take().unwrap()); @@ -263,7 +263,6 @@ impl Runner { kind: RunnerKind::Wasi { runner, _dir: dir, - memory: memory.clone(), }, timeout: None, }); @@ -279,18 +278,13 @@ impl Runner { anyhow!("robot {}/{} has no open source published code", user, robot) })?; let sourcedir = make_sourcedir_inline(&code)?; - let store = &*STORE; - let (module, version) = info.lang.get_wasm(store)?; - Runner::new_wasm(store, module, version, &[], sourcedir).await + let (module, version) = info.lang.get_wasm()?; + Runner::new_wasm(module, version, &[], sourcedir).await } RobotId::Local { source, lang } => { let sourcedir = make_sourcedir(source)?; - let store = &*STORE; - let (module, version) = lang.get_wasm(store)?; - // This is very strange, but this exactly println in this exact place is necessary to avoid - // error: "corrupted binary: misaligned metadata" - println!("IT worked"); - Runner::new_wasm(store, module, version, &[], sourcedir).await + let (module, version) = lang.get_wasm()?; + Runner::new_wasm(module, version, &[], sourcedir).await } RobotId::Command { command, args } => { let mut cmd = Command::new(command); @@ -310,22 +304,20 @@ impl Runner { let wasm = tokio::fs::read(runner) .await .with_context(|| format!("couldn't read {}", runner))?; - let store = &*STORE; - let (module, version) = wasm_from_cache_or_compile(store, &wasm) + let (module, version) = wasm_from_cache_or_compile(&wasm) .with_context(|| format!("couldn't compile wasm module at {}", runner))?; - Runner::new_wasm(store, &module, version, &runner_args, sourcedir).await + Runner::new_wasm(&module, version, &runner_args, sourcedir).await } RobotId::Inline { lang, source } => { let sourcedir = make_sourcedir_inline(source)?; - let store = &*STORE; - let (module, version) = lang.get_wasm(store)?; - Runner::new_wasm(store, module, version, &[], sourcedir).await + let (module, version) = lang.get_wasm()?; + Runner::new_wasm(module, version, &[], sourcedir).await } } } } -static STORE: Lazy = Lazy::new(|| { +static mut STORE: Lazy = Lazy::new(|| { let engine = wasmer::Engine::headless(); wasmer::Store::new(&engine) }); @@ -583,7 +575,6 @@ fn get_wasm_cache() -> anyhow::Result { } fn wasm_from_cache_or_compile( - store: &wasmer::Store, wasm: &[u8], ) -> anyhow::Result<(wasmer::Module, WasiVersion)> { let module = match get_wasm_cache() { @@ -591,17 +582,17 @@ fn wasm_from_cache_or_compile( let hash = wasmer_cache::Hash::generate(wasm); // unsafe because wasmer loads arbitrary code from this directory, but the wasmer // cli does the same thing, and there's no cve for it ¯\_(ツ)_/¯ - let module = unsafe { cache.load(store, hash) }; + let module = unsafe { cache.load(&*STORE, hash) }; match module { Ok(m) => m, Err(_) => { - let module = wasmer::Module::new(store, wasm)?; + let module = unsafe { wasmer::Module::new(&*STORE, wasm)? }; let _ = cache.store(hash, &module); module } } } - Err(_) => wasmer::Module::new(store, wasm)?, + Err(_) => unsafe { wasmer::Module::new(&*STORE, wasm)? } }; let version = wasmer_wasi::get_wasi_version(&module, false).unwrap_or(WasiVersion::Latest); Ok((module, version)) @@ -623,14 +614,13 @@ impl Lang { } } fn get_wasm( - self, - store: &wasmer::Store, + self ) -> anyhow::Result<(&'static wasmer::Module, WasiVersion)> { macro_rules! lang_runner { ($bytes:expr) => {{ static MODULE: OnceCell<(wasmer::Module, WasiVersion)> = OnceCell::new(); let (module, version) = MODULE.get_or_try_init(|| { - let module = unsafe { wasmer::Module::deserialize(store, $bytes)? }; + let module = unsafe { wasmer::Module::deserialize(&*STORE, $bytes)? }; let version = wasmer_wasi::get_wasi_version(&module, false) .unwrap_or(WasiVersion::Latest); Ok::<_, anyhow::Error>((module, version)) @@ -639,9 +629,6 @@ impl Lang { }}; } let lang = self; - // This is very strange, but this exactly println in this exact place is necessary to avoid - // error: "corrupted binary: misaligned metadata" - println!("ATTEMPTING"); Ok(include!(concat!(env!("OUT_DIR"), "/lang_runners.rs"))) } }