flowey_lib_hvlite/
init_openvmm_magicpath_linux_test_kernel.rs1use crate::download_openvmm_deps::OpenvmmDepsArch;
9use flowey::node::prelude::*;
10use std::collections::BTreeMap;
11
12new_flow_node!(struct Node);
13
14#[derive(Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Debug)]
15pub enum OpenvmmLinuxTestKernelArch {
16 Aarch64,
17 X64,
18}
19
20flowey_request! {
21 pub struct Request {
22 pub arch: OpenvmmLinuxTestKernelArch,
23 pub done: WriteVar<SideEffect>,
24 }
25}
26
27impl FlowNode for Node {
28 type Request = Request;
29
30 fn imports(ctx: &mut ImportCtx<'_>) {
31 ctx.import::<crate::cfg_openvmm_magicpath::Node>();
32 ctx.import::<crate::download_openvmm_deps::Node>();
33 }
34
35 fn emit(requests: Vec<Self::Request>, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
36 let mut kernel_arch: BTreeMap<_, Vec<_>> = BTreeMap::new();
37
38 for Request { arch, done } in requests {
39 kernel_arch.entry(arch).or_default().push(done)
40 }
41
42 let kernel_arch = kernel_arch;
43
44 let openvmm_magicpath = ctx.reqv(crate::cfg_openvmm_magicpath::Request);
47
48 for (arch, out_vars) in kernel_arch {
49 let openvmm_deps_arch = match arch {
50 OpenvmmLinuxTestKernelArch::Aarch64 => OpenvmmDepsArch::Aarch64,
51 OpenvmmLinuxTestKernelArch::X64 => OpenvmmDepsArch::X86_64,
52 };
53 let openvmm_linux_test_kernel = ctx.reqv(|v| {
54 crate::download_openvmm_deps::Request::GetLinuxTestKernel(openvmm_deps_arch, v)
55 });
56 let openvmm_linux_test_initrd = ctx.reqv(|v| {
57 crate::download_openvmm_deps::Request::GetLinuxTestInitrd(openvmm_deps_arch, v)
58 });
59
60 ctx.emit_rust_step(format!("extract {arch:?} sysroot.tar.gz"), |ctx| {
61 let openvmm_linux_test_kernel = openvmm_linux_test_kernel.claim(ctx);
62 let openvmm_linux_test_initrd = openvmm_linux_test_initrd.claim(ctx);
63 let openvmm_magicpath = openvmm_magicpath.clone().claim(ctx);
64 out_vars.claim(ctx);
65
66 move |rt| {
67 let openvmm_linux_test_kernel = rt.read(openvmm_linux_test_kernel);
68 let openvmm_linux_test_initrd = rt.read(openvmm_linux_test_initrd);
69 let openvmm_magicpath = rt.read(openvmm_magicpath);
70
71 let test_kernel_path =
72 openvmm_magicpath
73 .join("underhill-deps-private")
74 .join(match arch {
75 OpenvmmLinuxTestKernelArch::Aarch64 => "aarch64",
76 OpenvmmLinuxTestKernelArch::X64 => "x64",
77 });
78 fs_err::create_dir_all(&test_kernel_path)?;
79 fs_err::copy(openvmm_linux_test_initrd, test_kernel_path.join("initrd"))?;
80 fs_err::copy(
81 openvmm_linux_test_kernel,
82 test_kernel_path.join(match arch {
83 OpenvmmLinuxTestKernelArch::Aarch64 => "Image",
84 OpenvmmLinuxTestKernelArch::X64 => "vmlinux",
85 }),
86 )?;
87
88 Ok(())
89 }
90 });
91 }
92
93 Ok(())
94 }
95}