flowey_lib_hvlite/
build_snp_bootshim.rs1use crate::common::CommonArch;
7use crate::run_cargo_build::BuildProfile;
8use flowey::node::prelude::*;
9use flowey_lib_common::run_cargo_build::CargoCrateType;
10
11#[derive(Serialize, Deserialize)]
12pub struct SnpBootshimOutput {
13 pub bin: PathBuf,
14}
15
16flowey_request! {
17 pub struct Request {
18 pub snp_bootshim: WriteVar<SnpBootshimOutput>,
19 }
20}
21
22new_simple_flow_node!(struct Node);
23
24impl SimpleFlowNode for Node {
25 type Request = Request;
26
27 fn imports(ctx: &mut ImportCtx<'_>) {
28 ctx.import::<crate::run_cargo_build::Node>();
29 }
30
31 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
32 let target = target_lexicon::Triple {
33 architecture: CommonArch::X86_64.as_arch(),
34 operating_system: target_lexicon::OperatingSystem::None_,
35 environment: target_lexicon::Environment::Unknown,
36 vendor: target_lexicon::Vendor::Custom(target_lexicon::CustomVendor::Static(
37 "minimal_rt",
38 )),
39 binary_format: target_lexicon::BinaryFormat::Unknown,
40 };
41
42 let output = ctx.reqv(|v| crate::run_cargo_build::Request {
43 crate_name: "snp_bootshim".into(),
44 out_name: "snp_bootshim".into(),
45 crate_type: CargoCrateType::Bin,
46 profile: BuildProfile::BootDev,
47 features: Default::default(),
48 target,
49 no_split_dbg_info: true,
50 extra_env: Some(ReadVar::from_static(
51 [("RUSTC_BOOTSTRAP".to_string(), "1".to_string())]
52 .into_iter()
53 .collect(),
54 )),
55 pre_build_deps: Vec::new(),
56 output: v,
57 });
58
59 output.write_into_with(ctx, request.snp_bootshim, |o| match o {
60 crate::run_cargo_build::CargoBuildOutput::ElfBin { bin, .. } => {
61 SnpBootshimOutput { bin }
62 }
63 _ => unreachable!("snp_bootshim builds for minimal_rt"),
64 });
65 Ok(())
66 }
67}