treewide: implement basic aarch64 support

This adds aarch64 platforms, and some fixes for aarch64 support. This is
not yet complete; e.g. toolchains for aarch64 targets are still missing.

I renamed the amd64 platforms to x86_64 and efi to uefi for consistency
with @platforms.

syscall.Dup2 does not exist on arm64, but unix.Dup2 does.

Change-Id: I3ab081b2b852945b723ec83768f79000b8c4def4
Reviewed-on: https://review.monogon.dev/c/monogon/+/4173
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/third_party/efistub/efistub.bzl b/third_party/efistub/efistub.bzl
index 80c8e40..d0e2a2f 100644
--- a/third_party/efistub/efistub.bzl
+++ b/third_party/efistub/efistub.bzl
@@ -1,7 +1,8 @@
+load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
 load("@rules_cc//cc:defs.bzl", "cc_binary")
 
 cc_binary(
-    name = "efistub",
+    name = "efistub_bin",
     srcs = [("src/boot/efi/%s" % v) for v in [
         "assert.c",
         "cpio.c",
@@ -18,5 +19,18 @@
     includes = ["src/fundamental"],
     copts = ["-std=gnu99", "-DSD_BOOT", "-DGIT_VERSION=\\\"0.0.0-mngn\\\""],
     deps = ["@gnuefi//:gnuefi"],
+    target_compatible_with = [
+        "@platforms//os:uefi",
+    ],
+    visibility = ["//visibility:private"],
+)
+
+platform_transition_filegroup(
+    name = "efistub",
+    srcs = [":efistub_bin"],
+    target_platform = select({
+        "@platforms//cpu:x86_64": "@//build/platforms:uefi_x86_64",
+        "@platforms//cpu:aarch64": "@//build/platforms:uefi_aarch64",
+    }),
     visibility = ["//visibility:public"],
 )