mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-10 22:58:18 +00:00
Fix compilation bugs with webc
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@@ -3785,10 +3785,8 @@ dependencies = [
|
||||
"js-sys",
|
||||
"macro-wasmer-universal-test",
|
||||
"more-asserts",
|
||||
"nuke-dir",
|
||||
"serde",
|
||||
"serde-wasm-bindgen",
|
||||
"serde_cbor",
|
||||
"target-lexicon 0.12.4",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
@@ -3804,7 +3802,6 @@ dependencies = [
|
||||
"wasmer-vm",
|
||||
"wasmparser 0.83.0",
|
||||
"wat",
|
||||
"webc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
@@ -4219,6 +4216,7 @@ dependencies = [
|
||||
name = "wasmer-wasi"
|
||||
version = "3.0.0-rc.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
"bytes",
|
||||
"cfg-if 1.0.0",
|
||||
@@ -4227,7 +4225,9 @@ dependencies = [
|
||||
"generational-arena",
|
||||
"getrandom",
|
||||
"libc",
|
||||
"nuke-dir",
|
||||
"serde",
|
||||
"serde_cbor",
|
||||
"thiserror",
|
||||
"tracing",
|
||||
"tracing-wasm",
|
||||
@@ -4235,11 +4235,13 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-test",
|
||||
"wasmer",
|
||||
"wasmer-emscripten",
|
||||
"wasmer-vbus",
|
||||
"wasmer-vfs",
|
||||
"wasmer-vnet",
|
||||
"wasmer-wasi-local-networking",
|
||||
"wasmer-wasi-types",
|
||||
"webc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
|
||||
@@ -30,10 +30,6 @@ bytes = "1"
|
||||
# - Optional shared dependencies.
|
||||
wat = { version = "1.0", optional = true }
|
||||
tracing = { version = "0.1", optional = true }
|
||||
webc = { version = "3.0.0", optional = true, default-features = false, features = ["std", "mmap"] }
|
||||
serde_cbor = { version = "0.11.2", optional = true }
|
||||
nuke-dir = { version = "0.1.0", optional = true }
|
||||
anyhow = { version = "1.0.66", optional = true }
|
||||
|
||||
# Dependencies and Development Dependencies for `sys`.
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||
@@ -47,8 +43,6 @@ target-lexicon = { version = "0.12.2", default-features = false }
|
||||
wasmer-compiler-singlepass = { path = "../compiler-singlepass", version = "=3.0.0-rc.1", optional = true }
|
||||
wasmer-compiler-cranelift = { path = "../compiler-cranelift", version = "=3.0.0-rc.1", optional = true }
|
||||
wasmer-compiler-llvm = { path = "../compiler-llvm", version = "=3.0.0-rc.1", optional = true }
|
||||
wasmer-emscripten = { path = "../emscripten", version = "=3.0.0-rc.1", optional = true }
|
||||
wasmer-wasi = { path = "../wasi", version = "=3.0.0-rc.1", optional = true }
|
||||
|
||||
wasm-bindgen = { version = "0.2.74", optional = true }
|
||||
js-sys = { version = "0.3.51", optional = true }
|
||||
@@ -99,9 +93,6 @@ default = ["sys-default"]
|
||||
# default = ["js-default"]
|
||||
std = []
|
||||
core = ["hashbrown"]
|
||||
webc_runner = ["webc", "serde_cbor", "anyhow"]
|
||||
webc_runner_rt_emscripten = ["wasmer-emscripten"]
|
||||
webc_runner_rt_wasi = ["wasmer-wasi"]
|
||||
|
||||
# Features for `sys`.
|
||||
sys = [
|
||||
|
||||
@@ -437,7 +437,3 @@ mod js;
|
||||
|
||||
#[cfg(feature = "js")]
|
||||
pub use js::*;
|
||||
|
||||
/// Runners for WASI / Emscripten
|
||||
#[cfg(feature = "webc_runner")]
|
||||
pub mod runners;
|
||||
|
||||
@@ -92,7 +92,7 @@ wasmer-artifact-load = ["wasmer-compiler/wasmer-artifact-load"]
|
||||
wasmer-artifact-create = ["wasmer-compiler/wasmer-artifact-create"]
|
||||
static-artifact-load = ["wasmer-compiler/static-artifact-load"]
|
||||
static-artifact-create = ["wasmer-compiler/static-artifact-create"]
|
||||
webc_runner = ["wasmer-api/webc_runner", "wasmer-vfs", "webc"]
|
||||
webc_runner = ["wasmer-wasi/webc_runner", "wasmer-vfs", "webc"]
|
||||
# Deprecated features.
|
||||
jit = ["compiler"]
|
||||
|
||||
|
||||
@@ -1144,8 +1144,18 @@ unsafe fn wasi_get_imports_inner(
|
||||
|
||||
let import_object = c_try!(wasi_env.inner.import_object(&mut store_mut, &module.inner));
|
||||
|
||||
imports_set_buffer(&store, &module.inner, import_object, imports)?;
|
||||
|
||||
Some(())
|
||||
}
|
||||
|
||||
pub(crate) fn imports_set_buffer(
|
||||
store: &StoreRef,
|
||||
module: &wasmer_api::Module,
|
||||
import_object: wasmer_api::Imports,
|
||||
imports: &mut wasm_extern_vec_t,
|
||||
) -> Option<()> {
|
||||
imports.set_buffer(c_try!(module
|
||||
.inner
|
||||
.imports()
|
||||
.map(|import_type| {
|
||||
let ext = import_object
|
||||
|
||||
@@ -95,7 +95,7 @@ wast = ["wasmer-wast"]
|
||||
wasi = ["wasmer-wasi"]
|
||||
emscripten = ["wasmer-emscripten"]
|
||||
wat = ["wasmer/wat"]
|
||||
webc_runner = ["wasmer/webc_runner", "nuke-dir", "webc"]
|
||||
webc_runner = ["wasi", "wasmer-wasi/webc_runner", "wasmer-wasi/webc_runner_rt_wasi", "wasmer-wasi/webc_runner_rt_emscripten", "nuke-dir", "webc"]
|
||||
compiler = [
|
||||
"wasmer-compiler/translator",
|
||||
"wasmer-compiler/compiler",
|
||||
|
||||
@@ -15,7 +15,7 @@ use wasmer::*;
|
||||
use wasmer_cache::{Cache, FileSystemCache, Hash};
|
||||
use wasmer_types::Type as ValueType;
|
||||
#[cfg(feature = "webc_runner")]
|
||||
use wasmer::runners::WapmContainer;
|
||||
use wasmer_wasi::runners::{WapmContainer, Runner};
|
||||
use crate::cli::SplitVersion;
|
||||
use clap::Parser;
|
||||
use wasmer_registry::PackageDownloadInfo;
|
||||
@@ -371,7 +371,7 @@ impl Run {
|
||||
return r;
|
||||
}
|
||||
|
||||
let mut runner = wasmer::runners::wasi::WasiRunner::default();
|
||||
let mut runner = wasmer_wasi::runners::wasi::WasiRunner::default();
|
||||
runner.set_args(args.to_vec());
|
||||
result = Some(if id.is_empty() {
|
||||
runner.run(&container).map_err(|e| format!("{e}"))
|
||||
@@ -386,7 +386,7 @@ impl Run {
|
||||
return r;
|
||||
}
|
||||
|
||||
let mut runner = wasmer::runners::emscripten::EmscriptenRunner::default();
|
||||
let mut runner = wasmer_wasi::runners::emscripten::EmscriptenRunner::default();
|
||||
runner.set_args(args.to_vec());
|
||||
result = Some(if id.is_empty() {
|
||||
runner.run(&container).map_err(|e| format!("{e}"))
|
||||
|
||||
@@ -28,6 +28,11 @@ bincode = { version = "1.3", optional = true }
|
||||
chrono = { version = "^0.4", default-features = false, features = [ "wasmbind", "std", "clock" ], optional = true }
|
||||
derivative = { version = "^2" }
|
||||
bytes = "1"
|
||||
webc = { version = "3.0.0", optional = true, default-features = false, features = ["std", "mmap"] }
|
||||
serde_cbor = { version = "0.11.2", optional = true }
|
||||
nuke-dir = { version = "0.1.0", optional = true }
|
||||
anyhow = { version = "1.0.66", optional = true }
|
||||
wasmer-emscripten = { path = "../emscripten", version = "=3.0.0-rc.1", optional = true }
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
libc = { version = "^0.2", default-features = false }
|
||||
@@ -46,6 +51,10 @@ tracing-wasm = "0.2"
|
||||
default = ["sys-default"]
|
||||
wasix = []
|
||||
|
||||
webc_runner = ["webc", "serde_cbor", "anyhow", "serde", "wasmer/compiler", "wasmer/cranelift"]
|
||||
webc_runner_rt_emscripten = ["wasmer-emscripten"]
|
||||
webc_runner_rt_wasi = []
|
||||
|
||||
sys = ["wasmer/sys", "wasix", "wasmer-wasi-types/sys"]
|
||||
sys-default = ["wasmer/wat", "wasmer/compiler", "sys", "logging", "host-fs", "sys-poll", "host-vnet" ]
|
||||
sys-poll = []
|
||||
|
||||
@@ -40,6 +40,10 @@ mod state;
|
||||
mod syscalls;
|
||||
mod utils;
|
||||
|
||||
/// Runners for WASI / Emscripten
|
||||
#[cfg(feature = "webc_runner")]
|
||||
pub mod runners;
|
||||
|
||||
use crate::syscalls::*;
|
||||
|
||||
pub use crate::state::{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
use crate::runners::WapmContainer;
|
||||
use anyhow::anyhow;
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::error::Error as StdError;
|
||||
use std::sync::Arc;
|
||||
use wasmer::{Cranelift, FunctionEnv, Instance, Module, Store};
|
||||
@@ -24,7 +24,7 @@ impl EmscriptenRunner {
|
||||
}
|
||||
}
|
||||
|
||||
impl crate::Runner for EmscriptenRunner {
|
||||
impl crate::runners::Runner for EmscriptenRunner {
|
||||
type Output = ();
|
||||
|
||||
fn can_run_command(&self, _: &str, command: &Command) -> Result<bool, Box<dyn StdError>> {
|
||||
@@ -48,7 +48,7 @@ impl crate::Runner for EmscriptenRunner {
|
||||
let mut module = Module::new(&store, atom_bytes)?;
|
||||
module.set_name(&atom_name);
|
||||
|
||||
let (mut globals, mut env) =
|
||||
let (mut globals, env) =
|
||||
prepare_emscripten_env(&mut store, &module, container.webc.clone(), &atom_name)?;
|
||||
|
||||
exec_module(
|
||||
@@ -82,9 +82,9 @@ fn prepare_emscripten_env(
|
||||
));
|
||||
}
|
||||
|
||||
let mut env = FunctionEnv::new(store, EmEnv::new());
|
||||
let env = FunctionEnv::new(store, EmEnv::new());
|
||||
let emscripten_globals = EmscriptenGlobals::new(store, &env, &module);
|
||||
let mut emscripten_globals = emscripten_globals.map_err(|e| anyhow!("{}", e))?;
|
||||
let emscripten_globals = emscripten_globals.map_err(|e| anyhow!("{}", e))?;
|
||||
env.as_mut(store)
|
||||
.set_data(&emscripten_globals.data, Default::default());
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
use wasmer_vfs::webc_fs::WebcFileSystem;
|
||||
use crate::runners::WapmContainer;
|
||||
use anyhow::{anyhow, Context};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::error::Error as StdError;
|
||||
use std::sync::Arc;
|
||||
use wasmer::{Cranelift, FunctionEnv, Instance, Module, Store};
|
||||
use wasmer_wasi::{VirtualFile, WasiFunctionEnv, WasiState};
|
||||
use crate::{VirtualFile, WasiFunctionEnv, WasiState};
|
||||
use webc::{Command, WebCMmap};
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, PartialOrd, Hash, Serialize, Deserialize)]
|
||||
@@ -22,7 +22,7 @@ impl WasiRunner {
|
||||
}
|
||||
}
|
||||
|
||||
impl crate::Runner for WasiRunner {
|
||||
impl crate::runners::Runner for WasiRunner {
|
||||
type Output = ();
|
||||
|
||||
fn can_run_command(
|
||||
@@ -94,7 +94,7 @@ fn prepare_webc_env(
|
||||
pub(crate) fn exec_module(
|
||||
store: &mut Store,
|
||||
module: &Module,
|
||||
mut wasi_env: wasmer_wasi::WasiFunctionEnv,
|
||||
wasi_env: crate::WasiFunctionEnv,
|
||||
) -> Result<(), anyhow::Error> {
|
||||
let import_object = wasi_env.import_object(store, &module)?;
|
||||
let instance = Instance::new(store, &module, &import_object)?;
|
||||
|
||||
Reference in New Issue
Block a user