Hello Kent,
I extended the rumprun+rust example (available in
this PR) with a simple camkes connection between the rumprum camkes component and a serial server component, as shown below (full code
here):
composition {
component rumprun_platform_layer rrpl;
component rumprun_rust hello1;
RUMPRUN_META_CONNECTION(hello1, rrpl)
component rumprun hello2;
RUMPRUN_META_CONNECTION(hello2, rrpl)
component Server server;
connection seL4SharedData conn(from hello1.camkes_buffer, to server.buffer);
connection seL4Notification simpleEvent1(from hello1.camkes_ev, to server.ev);
connection seL4Notification simpleEvent2(from server.ev1, to hello1.camkes_ev1);
}
fn main() {
println!("Hello rust!");
unsafe {
camkes_ev_emit();
}
println!("Waiting for event!");
unsafe {
camkes_ev1_wait();
}
println!("Got event!");
}
#[no_mangle]
extern {
fn camkes_ev_emit();
fn camkes_ev1_wait();
}
In order to compile the cargo project, I added a
build.rs script to package the generated camkes object file (camkes.o) into an archite that cargo can link against.
The problem is, that the generated camkes.c file contains its own main function:
int USED main(int argc UNUSED, char *argv[]) {
assert(argc == 2);
assert(strcmp(argv[0], "camkes") == 0);
int thread_id = (int)(uintptr_t)(argv[1]);
return post_main(thread_id);
}
which collides with the fn main() defined in rust. (I get multiple definition of `main' error).
Could you point me in the right direction?
Regards
Michal