runkernel: add simple host kernel runner

This commit is contained in:
Sebastien Bourdeauducq 2021-10-31 23:52:43 +08:00
parent 443b95d909
commit 137efebb33
5 changed files with 72 additions and 0 deletions

17
Cargo.lock generated
View File

@ -421,6 +421,16 @@ version = "0.2.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103"
[[package]]
name = "libloading"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0cf036d15402bea3c5d4de17b3fce76b3e4a56ebc1f577be0e7a72f7c607cf0"
dependencies = [
"cfg-if",
"winapi",
]
[[package]]
name = "linked-hash-map"
version = "0.5.4"
@ -881,6 +891,13 @@ version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]]
name = "runkernel"
version = "0.1.0"
dependencies = [
"libloading",
]
[[package]]
name = "rustpython-ast"
version = "0.1.0"

View File

@ -3,6 +3,7 @@ members = [
"nac3core",
"nac3standalone",
"nac3artiq",
"runkernel",
]
[profile.release]

3
runkernel/.cargo/config Normal file
View File

@ -0,0 +1,3 @@
[build]
rustflags = ["-C", "link-args=-rdynamic"]

8
runkernel/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "runkernel"
version = "0.1.0"
authors = ["M-Labs"]
edition = "2018"
[dependencies]
libloading = "0.7"

43
runkernel/src/main.rs Normal file
View File

@ -0,0 +1,43 @@
use std::env;
use libloading;
static mut NOW: i64 = 0;
#[no_mangle]
pub extern "C" fn now_mu() -> i64 {
unsafe { NOW }
}
#[no_mangle]
pub extern "C" fn at_mu(t: i64) {
unsafe { NOW = t }
}
#[no_mangle]
pub extern "C" fn delay_mu(dt: i64) {
unsafe { NOW += dt }
}
#[no_mangle]
pub extern "C" fn rtio_init() {
println!("rtio_init");
}
#[no_mangle]
pub extern "C" fn rtio_get_counter() -> i64 {
0
}
#[no_mangle]
pub extern "C" fn rtio_output(target: i32, data: i32) {
println!("rtio_output @{} target={:04x} data={}", unsafe { NOW }, target, data);
}
fn main() {
let filename = env::args().nth(1).unwrap();
unsafe {
let lib = libloading::Library::new(filename).unwrap();
let func: libloading::Symbol<unsafe extern fn()> = lib.get(b"__modinit__").unwrap();
func()
}
}