Add wasi-exec-model cg option for emitting wasi reactors
This commit is contained in:
parent
7efc097c4f
commit
92d3537abb
9 changed files with 69 additions and 20 deletions
|
@ -2086,6 +2086,7 @@ crate mod dep_tracking {
|
|||
SymbolManglingVersion, TrimmedDefPaths,
|
||||
};
|
||||
use crate::lint;
|
||||
use crate::options::WasiExecModel;
|
||||
use crate::utils::NativeLibKind;
|
||||
use rustc_feature::UnstableFeatures;
|
||||
use rustc_span::edition::Edition;
|
||||
|
@ -2141,6 +2142,7 @@ crate mod dep_tracking {
|
|||
impl_dep_tracking_hash_via_hash!(Option<RelocModel>);
|
||||
impl_dep_tracking_hash_via_hash!(Option<CodeModel>);
|
||||
impl_dep_tracking_hash_via_hash!(Option<TlsModel>);
|
||||
impl_dep_tracking_hash_via_hash!(Option<WasiExecModel>);
|
||||
impl_dep_tracking_hash_via_hash!(Option<PanicStrategy>);
|
||||
impl_dep_tracking_hash_via_hash!(Option<RelroLevel>);
|
||||
impl_dep_tracking_hash_via_hash!(Option<lint::Level>);
|
||||
|
|
|
@ -278,6 +278,7 @@ macro_rules! options {
|
|||
pub const parse_tls_model: &str =
|
||||
"one of supported TLS models (`rustc --print tls-models`)";
|
||||
pub const parse_target_feature: &str = parse_string;
|
||||
pub const parse_wasi_exec_model: &str = "either `command` or `reactor`";
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
@ -708,6 +709,15 @@ macro_rules! options {
|
|||
None => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_wasi_exec_model(slot: &mut Option<WasiExecModel>, v: Option<&str>) -> bool {
|
||||
match v {
|
||||
Some("command") => *slot = Some(WasiExecModel::Command),
|
||||
Some("reactor") => *slot = Some(WasiExecModel::Reactor),
|
||||
_ => return false,
|
||||
}
|
||||
true
|
||||
}
|
||||
}
|
||||
) }
|
||||
|
||||
|
@ -1147,9 +1157,17 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
|||
"in general, enable more debug printouts (default: no)"),
|
||||
verify_llvm_ir: bool = (false, parse_bool, [TRACKED],
|
||||
"verify LLVM IR (default: no)"),
|
||||
wasi_exec_model: Option<WasiExecModel> = (None, parse_wasi_exec_model, [TRACKED],
|
||||
"whether to build a wasi command or reactor"),
|
||||
|
||||
// This list is in alphabetical order.
|
||||
//
|
||||
// If you add a new option, please update:
|
||||
// - src/librustc_interface/tests.rs
|
||||
// - compiler/rustc_interface/src/tests.rs
|
||||
}
|
||||
|
||||
#[derive(Clone, Hash)]
|
||||
pub enum WasiExecModel {
|
||||
Command,
|
||||
Reactor,
|
||||
}
|
||||
|
|
|
@ -796,6 +796,14 @@ impl Session {
|
|||
self.opts.debugging_opts.tls_model.unwrap_or(self.target.tls_model)
|
||||
}
|
||||
|
||||
pub fn is_wasi_reactor(&self) -> bool {
|
||||
self.target.options.os == "wasi"
|
||||
&& matches!(
|
||||
self.opts.debugging_opts.wasi_exec_model,
|
||||
Some(config::WasiExecModel::Reactor)
|
||||
)
|
||||
}
|
||||
|
||||
pub fn must_not_eliminate_frame_pointers(&self) -> bool {
|
||||
// "mcount" function relies on stack pointer.
|
||||
// See <https://sourceware.org/binutils/docs/gprof/Implementation.html>.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue