flowey_lib_hvlite/_jobs/
local_build_and_run_vmm_perf.rs1use crate::common::CommonProfile;
7use crate::common::CommonTriple;
8use flowey::node::prelude::*;
9
10flowey_request! {
11 pub struct Params {
12 pub target: CommonTriple,
13 pub profile: CommonProfile,
14 pub root_dir: PathBuf,
15 pub profiles: Vec<String>,
16 pub vm_sizes_json: Option<String>,
17 pub parameters_json: Option<String>,
18 pub runtime_archive: Option<PathBuf>,
19 pub build_only: bool,
20 pub done: WriteVar<SideEffect>,
21 }
22}
23
24new_simple_flow_node!(struct Node);
25
26impl SimpleFlowNode for Node {
27 type Request = Params;
28
29 fn imports(ctx: &mut ImportCtx<'_>) {
30 ctx.import::<crate::build_openvmm::Node>();
31 ctx.import::<crate::build_vmm_perf::Node>();
32 ctx.import::<crate::_jobs::setup_and_run_vmm_perf::Node>();
33 }
34
35 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
36 let Params {
37 target,
38 profile,
39 root_dir,
40 profiles,
41 vm_sizes_json,
42 parameters_json,
43 runtime_archive,
44 build_only,
45 done,
46 } = request;
47
48 let openvmm = ctx.reqv(|v| crate::build_openvmm::Request {
49 params: crate::build_openvmm::OpenvmmBuildParams {
50 target: target.clone(),
51 profile,
52 features: [crate::build_openvmm::OpenvmmFeature::Tpm].into(),
53 },
54 openvmm: v,
55 });
56 let runner = ctx.reqv(|v| crate::build_vmm_perf::Request {
57 target: target.clone(),
58 profile,
59 vmm_perf: v,
60 });
61
62 if build_only {
63 ctx.emit_side_effect_step(
64 [openvmm.into_side_effect(), runner.into_side_effect()],
65 [done],
66 );
67 } else {
68 ctx.req(crate::_jobs::setup_and_run_vmm_perf::Params {
69 label: "vmm-perf".into(),
70 target,
71 runner,
72 openvmm,
73 profiles,
74 vm_sizes_json,
75 parameters_json,
76 runtime_archive: runtime_archive.map(ReadVar::from_static),
77 root_dir: Some(ReadVar::from_static(root_dir)),
78 hugetlb_2mb_overcommit_pages: None,
79 done,
80 });
81 }
82
83 Ok(())
84 }
85}