metropolis: implement and use A/B preloader
This switches over from using the EFI built-in bootloader for A/B
updates to using our own EFI preloader due to significant issues with
in-the-wild EFI implementations. It is a very minimal design relying
on a single Protobuf state file instead of EFI variables.
Change-Id: Ieebd0a8172ebe3f44c69b3e8c278c53d3fe2eeb4
Reviewed-on: https://review.monogon.dev/c/monogon/+/2203
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
diff --git a/metropolis/node/core/abloader/BUILD.bazel b/metropolis/node/core/abloader/BUILD.bazel
new file mode 100644
index 0000000..2e382fa
--- /dev/null
+++ b/metropolis/node/core/abloader/BUILD.bazel
@@ -0,0 +1,24 @@
+load("@rules_rust//rust:defs.bzl", "rust_binary")
+load("//metropolis/node/build:def.bzl", "platform_transition_binary")
+
+rust_binary(
+ name = "abloader_bin",
+ srcs = ["main.rs"],
+ edition = "2021",
+ target_compatible_with = [
+ "@platforms//os:uefi",
+ ],
+ deps = [
+ "//metropolis/node/core/abloader/spec:abloader_proto_rs",
+ "@rsefi__prost__0_12_1//:prost",
+ "@rsefi__uefi__0_24_0//:uefi",
+ "@rsefi__uefi_services__0_21_0//:uefi_services",
+ ],
+)
+
+platform_transition_binary(
+ name = "abloader",
+ binary = ":abloader_bin",
+ target_platform = "//build/platforms:efi_amd64",
+ visibility = ["//visibility:public"],
+)