plugins 2.0 update
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "sample_wasm_platform_note"
|
||||
version = "0.1.0"
|
||||
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "sample_wasm_platform_note"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
path = "src/lib.rs"
|
||||
@@ -0,0 +1,131 @@
|
||||
use std::alloc::{alloc, dealloc, Layout};
|
||||
use std::ptr;
|
||||
use std::slice;
|
||||
use std::str;
|
||||
|
||||
extern "C" {
|
||||
fn overlord_emit(event: *const u8, event_len: i32, payload: *const u8, payload_len: i32) -> i32;
|
||||
fn overlord_host_info(out: *mut u8, out_len: i32) -> i32;
|
||||
fn overlord_fs_mkdir(bucket: *const u8, bucket_len: i32, path: *const u8, path_len: i32) -> i32;
|
||||
fn overlord_fs_write(
|
||||
bucket: *const u8,
|
||||
bucket_len: i32,
|
||||
path: *const u8,
|
||||
path_len: i32,
|
||||
data: *const u8,
|
||||
data_len: i32,
|
||||
) -> i32;
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn overlord_alloc(size: u32) -> *mut u8 {
|
||||
let size = size.max(1) as usize;
|
||||
let layout = Layout::from_size_align(size, 8).unwrap();
|
||||
unsafe { alloc(layout) }
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn overlord_free(ptr: *mut u8, size: u32) {
|
||||
if ptr.is_null() {
|
||||
return;
|
||||
}
|
||||
let layout = Layout::from_size_align((size.max(1)) as usize, 8).unwrap();
|
||||
unsafe { dealloc(ptr, layout) };
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn overlord_on_load(_host: *const u8, _host_len: u32) -> i32 {
|
||||
emit("ready", br#"{"sample":"platform-note"}"#);
|
||||
0
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn overlord_on_event(
|
||||
event: *const u8,
|
||||
event_len: u32,
|
||||
_payload: *const u8,
|
||||
_payload_len: u32,
|
||||
) -> i32 {
|
||||
let event = unsafe { slice::from_raw_parts(event, event_len as usize) };
|
||||
if event != b"write_note" {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let mut host = [0u8; 1024];
|
||||
let host_len = unsafe { overlord_host_info(host.as_mut_ptr(), host.len() as i32) };
|
||||
let host = if host_len > 0 {
|
||||
str::from_utf8(&host[..host_len as usize]).unwrap_or("")
|
||||
} else {
|
||||
""
|
||||
};
|
||||
|
||||
let os = if host.contains(r#""os":"windows""#) {
|
||||
"windows"
|
||||
} else if host.contains(r#""os":"darwin""#) {
|
||||
"darwin"
|
||||
} else if host.contains(r#""os":"linux""#) {
|
||||
"linux"
|
||||
} else {
|
||||
"unknown"
|
||||
};
|
||||
|
||||
let arch = if host.contains(r#""arch":"arm64""#) {
|
||||
"arm64"
|
||||
} else if host.contains(r#""arch":"amd64""#) {
|
||||
"amd64"
|
||||
} else if host.contains(r#""arch":"386""#) {
|
||||
"386"
|
||||
} else {
|
||||
"unknown"
|
||||
};
|
||||
|
||||
let bucket = "pluginData";
|
||||
let dir = "platform";
|
||||
let file = format!("platform/{os}-{arch}.txt");
|
||||
let note = format!("single WASM plugin running on os={os} arch={arch}\n");
|
||||
|
||||
let mkdir_result = unsafe {
|
||||
overlord_fs_mkdir(
|
||||
bucket.as_ptr(),
|
||||
bucket.len() as i32,
|
||||
dir.as_ptr(),
|
||||
dir.len() as i32,
|
||||
)
|
||||
};
|
||||
let write_result = unsafe {
|
||||
overlord_fs_write(
|
||||
bucket.as_ptr(),
|
||||
bucket.len() as i32,
|
||||
file.as_ptr(),
|
||||
file.len() as i32,
|
||||
note.as_ptr(),
|
||||
note.len() as i32,
|
||||
)
|
||||
};
|
||||
|
||||
let response = format!(
|
||||
r#"{{"os":"{os}","arch":"{arch}","mkdir":{mkdir_result},"write":{write_result}}}"#
|
||||
);
|
||||
emit("platform_note", response.as_bytes());
|
||||
0
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn overlord_on_unload() {}
|
||||
|
||||
fn emit(event: &str, payload: &[u8]) {
|
||||
unsafe {
|
||||
overlord_emit(
|
||||
event.as_ptr(),
|
||||
event.len() as i32,
|
||||
payload.as_ptr(),
|
||||
payload.len() as i32,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn memset(dest: *mut u8, value: i32, len: usize) -> *mut u8 {
|
||||
unsafe { ptr::write_bytes(dest, value as u8, len) };
|
||||
dest
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc_fingerprint":2568544898921049753,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\n___.lib\n___.dll\nC:\\Users\\this1\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\npacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"msvc\"\ntarget_family=\"windows\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""},"5946400966674136012":{"success":true,"status":"","code":0,"stdout":"___.wasm\nlib___.rlib\n___.wasm\nlib___.a\nC:\\Users\\this1\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\noff\n___\ndebug_assertions\npanic=\"abort\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"wasm32\"\ntarget_endian=\"little\"\ntarget_env=\"p1\"\ntarget_family=\"wasm\"\ntarget_feature=\"bulk-memory\"\ntarget_feature=\"multivalue\"\ntarget_feature=\"mutable-globals\"\ntarget_feature=\"nontrapping-fptoint\"\ntarget_feature=\"reference-types\"\ntarget_feature=\"sign-ext\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"wasi\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\n","stderr":"warning: dropping unsupported crate type `dylib` for target `wasm32-wasip1`\n\nwarning: dropping unsupported crate type `proc-macro` for target `wasm32-wasip1`\n\nwarning: 2 warnings emitted\n\n"},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.94.0 (4a4ef493e 2026-03-02)\nbinary: rustc\ncommit-hash: 4a4ef493e3a1488c6e321570238084b38948f6db\ncommit-date: 2026-03-02\nhost: x86_64-pc-windows-msvc\nrelease: 1.94.0\nLLVM version: 21.1.8\n","stderr":""}},"successes":{}}
|
||||
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
Reference in New Issue
Block a user