flowey_lib_hvlite/_jobs/
local_restore_packages.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use crate::download_lxutil::LxutilArch;
5use crate::download_uefi_mu_msvm::MuMsvmArch;
6use crate::init_openvmm_magicpath_linux_test_kernel::OpenvmmLinuxTestKernelArch;
7use crate::init_openvmm_magicpath_openhcl_sysroot::OpenvmmSysrootArch;
8use crate::run_cargo_build::common::CommonArch;
9use flowey::node::prelude::*;
10
11flowey_request! {
12    pub struct Request{
13        pub arch: CommonArch,
14        pub done: WriteVar<SideEffect>,
15    }
16}
17
18new_simple_flow_node!(struct Node);
19
20impl SimpleFlowNode for Node {
21    type Request = Request;
22
23    fn imports(ctx: &mut ImportCtx<'_>) {
24        ctx.import::<crate::init_openvmm_magicpath_linux_test_kernel::Node>();
25        ctx.import::<crate::init_openvmm_magicpath_lxutil::Node>();
26        ctx.import::<crate::init_openvmm_magicpath_openhcl_sysroot::Node>();
27        ctx.import::<crate::init_openvmm_magicpath_protoc::Node>();
28        ctx.import::<crate::init_openvmm_magicpath_uefi_mu_msvm::Node>();
29    }
30
31    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
32        let Request { arch, done } = request;
33
34        let mut deps = vec![ctx.reqv(crate::init_openvmm_magicpath_protoc::Request)];
35
36        match arch {
37            CommonArch::X86_64 => {
38                if matches!(ctx.platform(), FlowPlatform::Linux(_)) {
39                    deps.extend_from_slice(&[ctx
40                        .reqv(|v| crate::init_openvmm_magicpath_openhcl_sysroot::Request {
41                            arch: OpenvmmSysrootArch::X64,
42                            path: v,
43                        })
44                        .into_side_effect()]);
45                }
46                deps.extend_from_slice(&[
47                    ctx.reqv(|done| crate::init_openvmm_magicpath_lxutil::Request {
48                        arch: LxutilArch::X86_64,
49                        done,
50                    }),
51                    ctx.reqv(|done| crate::init_openvmm_magicpath_uefi_mu_msvm::Request {
52                        arch: MuMsvmArch::X86_64,
53                        done,
54                    }),
55                    ctx.reqv(
56                        |done| crate::init_openvmm_magicpath_linux_test_kernel::Request {
57                            arch: OpenvmmLinuxTestKernelArch::X64,
58                            done,
59                        },
60                    ),
61                ]);
62            }
63            CommonArch::Aarch64 => {
64                if matches!(ctx.platform(), FlowPlatform::Linux(_)) {
65                    deps.extend_from_slice(&[ctx
66                        .reqv(|v| crate::init_openvmm_magicpath_openhcl_sysroot::Request {
67                            arch: OpenvmmSysrootArch::Aarch64,
68                            path: v,
69                        })
70                        .into_side_effect()]);
71                }
72                deps.extend_from_slice(&[
73                    ctx.reqv(|done| crate::init_openvmm_magicpath_lxutil::Request {
74                        arch: LxutilArch::Aarch64,
75                        done,
76                    }),
77                    ctx.reqv(|done| crate::init_openvmm_magicpath_uefi_mu_msvm::Request {
78                        arch: MuMsvmArch::Aarch64,
79                        done,
80                    }),
81                    ctx.reqv(
82                        |done| crate::init_openvmm_magicpath_linux_test_kernel::Request {
83                            arch: OpenvmmLinuxTestKernelArch::Aarch64,
84                            done,
85                        },
86                    ),
87                ]);
88            }
89        }
90
91        ctx.emit_side_effect_step(deps, [done]);
92
93        Ok(())
94    }
95}