flowey_lib_hvlite/_jobs/
build_and_publish_openvmm_hcl_baseline.rs1use crate::artifact_openvmm_hcl_sizecheck;
7use crate::build_openhcl_igvm_from_recipe::OpenhclIgvmRecipe;
8use crate::build_openvmm_hcl;
9use crate::build_openvmm_hcl::OpenvmmHclBuildParams;
10use crate::build_openvmm_hcl::OpenvmmHclBuildProfile;
11use crate::common::CommonArch;
12use crate::common::CommonTriple;
13use flowey::node::prelude::*;
14
15#[derive(Serialize, Deserialize)]
16pub struct OpenvmmHclBaselineOutput {
17 #[serde(rename = "openhcl")]
18 pub bin: PathBuf,
19}
20
21impl Artifact for OpenvmmHclBaselineOutput {}
22
23flowey_request! {
24 pub struct Request {
25 pub target: CommonTriple,
26 pub baseline: WriteVar<OpenvmmHclBaselineOutput>,
27 }
28}
29
30new_simple_flow_node!(struct Node);
31
32impl SimpleFlowNode for Node {
33 type Request = Request;
34
35 fn imports(ctx: &mut ImportCtx<'_>) {
36 ctx.import::<artifact_openvmm_hcl_sizecheck::publish::Node>();
37 ctx.import::<build_openvmm_hcl::Node>();
38 }
39
40 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
41 let Request { target, baseline } = request;
42
43 let recipe = match target.common_arch().unwrap() {
44 CommonArch::X86_64 => OpenhclIgvmRecipe::X64,
45 CommonArch::Aarch64 => OpenhclIgvmRecipe::Aarch64,
46 }
47 .recipe_details(true);
48
49 let baseline_hcl_build = ctx.reqv(|v| build_openvmm_hcl::Request {
50 build_params: OpenvmmHclBuildParams {
51 target,
52 profile: OpenvmmHclBuildProfile::OpenvmmHclShip,
53 features: recipe.openvmm_hcl_features,
54 no_split_dbg_info: false,
55 max_trace_level: recipe.max_trace_level,
56 },
57 openvmm_hcl_output: v,
58 });
59
60 baseline_hcl_build
61 .write_into_with(ctx, baseline, |b| OpenvmmHclBaselineOutput { bin: b.bin });
62
63 Ok(())
64 }
65}