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