Skip to main content

flowey_lib_hvlite/_jobs/
build_and_publish_openvmm_hcl_baseline.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Builds and publishes an OpenHCL binary for size comparison with PRs.
5
6use 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}