m/n/c/abloader: fix duplicate build

Previously, the abloader was built twice with different
@io_bazel_rules_go//go/config:static setting.

Change-Id: I41ebac22613b895fe85f14367bdf0f31c817cafe
Reviewed-on: https://review.monogon.dev/c/monogon/+/4163
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/cloud/agent/install.go b/cloud/agent/install.go
index 0693595..a59664e 100644
--- a/cloud/agent/install.go
+++ b/cloud/agent/install.go
@@ -27,7 +27,7 @@
 	"source.monogon.dev/osbase/supervisor"
 )
 
-//go:embed metropolis/node/core/abloader/abloader.efi
+//go:embed metropolis/node/core/abloader/abloader_bin.efi
 var abloader []byte
 
 // install dispatches OSInstallationRequests to the appropriate installer
diff --git a/metropolis/cli/takeover/install.go b/metropolis/cli/takeover/install.go
index 5bea9e9..8c1ad79 100644
--- a/metropolis/cli/takeover/install.go
+++ b/metropolis/cli/takeover/install.go
@@ -18,7 +18,7 @@
 	"source.monogon.dev/osbase/structfs"
 )
 
-//go:embed metropolis/node/core/abloader/abloader.efi
+//go:embed metropolis/node/core/abloader/abloader_bin.efi
 var abloader []byte
 
 // EnvInstallTarget environment variable which tells the takeover binary where
diff --git a/metropolis/installer/main.go b/metropolis/installer/main.go
index 2ba2142..ad0fa30 100644
--- a/metropolis/installer/main.go
+++ b/metropolis/installer/main.go
@@ -29,7 +29,7 @@
 	"source.monogon.dev/osbase/sysfs"
 )
 
-//go:embed metropolis/node/core/abloader/abloader.efi
+//go:embed metropolis/node/core/abloader/abloader_bin.efi
 var abloader []byte
 
 const mib = 1024 * 1024
diff --git a/metropolis/node/core/abloader/BUILD.bazel b/metropolis/node/core/abloader/BUILD.bazel
index ee7b69f..de47b00 100644
--- a/metropolis/node/core/abloader/BUILD.bazel
+++ b/metropolis/node/core/abloader/BUILD.bazel
@@ -1,14 +1,15 @@
 load("@rules_rust//rust:defs.bzl", "rust_binary")
+load("//osbase/build:def.bzl", "ignore_unused_configuration_target")
 
 rust_binary(
-    name = "abloader",
+    name = "abloader_bin",
     srcs = ["main.rs"],
     edition = "2021",
     platform = "//build/platforms:efi_amd64",
     target_compatible_with = [
         "@platforms//os:uefi",
     ],
-    visibility = ["//visibility:public"],
+    visibility = ["//visibility:private"],
     deps = [
         "//metropolis/node/core/abloader/spec:abloader_proto_rs",
         "@crate_index_efi//:prost",
@@ -16,3 +17,9 @@
         "@crate_index_efi//:uefi-services",
     ],
 )
+
+ignore_unused_configuration_target(
+    name = "abloader",
+    dep = ":abloader_bin",
+    visibility = ["//visibility:public"],
+)
diff --git a/metropolis/node/core/update/update.go b/metropolis/node/core/update/update.go
index 48f778d..f241e05 100644
--- a/metropolis/node/core/update/update.go
+++ b/metropolis/node/core/update/update.go
@@ -425,7 +425,7 @@
 	return nil
 }
 
-//go:embed metropolis/node/core/abloader/abloader.efi
+//go:embed metropolis/node/core/abloader/abloader_bin.efi
 var abloader []byte
 
 func (s *Service) fixupPreloader() error {
diff --git a/osbase/build/def.bzl b/osbase/build/def.bzl
index f1665b5..d9be587 100644
--- a/osbase/build/def.bzl
+++ b/osbase/build/def.bzl
@@ -86,3 +86,12 @@
     inputs = [],
     outputs = list(_new_settings.keys()),
 )
+
+ignore_unused_configuration_target = rule(
+    cfg = ignore_unused_configuration,
+    implementation = _forward_impl,
+    attrs = {
+        "dep": attr.label(mandatory = True),
+    },
+    doc = """Applies ignore_unused_configuration transition to a target.""",
+)