Skip to main content

flowey_lib_hvlite/_jobs/
local_update_cca_emu.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Update components in CCA emulation environment according to options specified.
5use crate::_jobs::local_install_cca_emu::build_cca_rootfs;
6use crate::_jobs::local_install_cca_emu::build_plane0_linux;
7use crate::_jobs::local_install_cca_emu::sync_shrinkwrap_overlay_assets;
8use flowey::node::prelude::*;
9
10#[derive(Default, Serialize, Deserialize, PartialEq, Eq)]
11pub struct SubCmds {
12    pub rebuild_plane0_linux: bool,
13    pub rebuild_rootfs: bool,
14    pub tfa_rev: Option<String>,
15    pub tfrmm_rev: Option<String>,
16    pub plane0_linux_rev: Option<String>,
17}
18
19flowey_request! {
20    pub struct Params {
21        pub test_root: PathBuf,
22        pub openvmm_root: PathBuf,
23        pub sub_cmds: SubCmds,
24        pub done: WriteVar<SideEffect>,
25    }
26}
27
28new_simple_flow_node!(struct Node);
29
30impl SimpleFlowNode for Node {
31    type Request = Params;
32
33    fn imports(_ctx: &mut ImportCtx<'_>) {}
34
35    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
36        let Params {
37            test_root,
38            openvmm_root,
39            sub_cmds,
40            done,
41        } = request;
42
43        let SubCmds {
44            rebuild_plane0_linux,
45            rebuild_rootfs,
46            tfa_rev: _,
47            tfrmm_rev: _,
48            plane0_linux_rev: _,
49        } = sub_cmds;
50
51        ctx.emit_rust_step("update cca emulation environment", |ctx| {
52            done.claim(ctx);
53            move |rt| {
54                if rebuild_plane0_linux {
55                    let plane0_linux = test_root.join("plane0-linux");
56                    let plane0_image = plane0_linux
57                        .join("arch")
58                        .join("arm64")
59                        .join("boot")
60                        .join("Image");
61
62                    anyhow::ensure!(
63                        plane0_linux.exists(),
64                        "plane0 Linux source tree is missing at {}, try --install-emu first",
65                        plane0_linux.display()
66                    );
67
68                    build_plane0_linux(rt, &plane0_linux, &plane0_image)?;
69                }
70
71                if rebuild_rootfs {
72                    let shrinkwrap_dir = test_root.join("shrinkwrap");
73                    let venv_dir = shrinkwrap_dir.join("venv");
74                    sync_shrinkwrap_overlay_assets(&openvmm_root, &shrinkwrap_dir)?;
75                    build_cca_rootfs(rt, &test_root, &shrinkwrap_dir, &venv_dir)?;
76                }
77
78                Ok(())
79            }
80        });
81
82        Ok(())
83    }
84}