epics_libcom_rs/runtime/mod.rs
1//! The concurrency, timing, logging and OS-facing primitives an IOC is built
2//! on — C `libCom`'s `epicsThread` / `epicsTime` / `errlog` / `envDefs` half.
3//!
4//! # The two backends
5//!
6//! [`task`]'s spawn/sleep/interval seam has two mutually exclusive backends,
7//! selected by this crate's `build.rs` into one `cfg` rather than repeated as a
8//! target/feature predicate at each of the ~two dozen seam sites:
9//!
10//! * `tokio_backend` — the tokio runtime. The hosted default.
11//! * `exec_backend` — the std-thread [`background`] executor (callback pool +
12//! delayed timer + scanOnce worker). Unconditional on RTEMS, which has no
13//! tokio reactor, and host-selectable through
14//! `EPICS_RS_BUILD_EXEC_BACKEND=thread` for a Linux blocking-front-end
15//! deployment that wants the same
16//! runtime-free backend.
17//!
18//! [`crate::EXEC_BACKEND`] states which one this build got, so a crate above
19//! can pin its own copy of the predicate to it.
20
21pub mod accept;
22pub mod background;
23pub mod blocking_io;
24pub mod build_info;
25pub mod env;
26pub mod env_table;
27pub mod epics_string;
28pub mod exit;
29pub mod fs;
30pub mod general_time;
31pub mod ioc_role;
32pub mod json_string;
33pub mod log;
34pub mod log_client;
35pub mod net;
36pub mod socket;
37pub mod stdlib;
38pub mod supervise;
39pub mod sync;
40pub mod task;
41pub mod taskwd;
42pub mod time;
43pub mod version;
44pub mod worker_pool;
45
46// Re-export tokio::select! macro through the runtime facade.
47pub use tokio::select;