+load("@rules_go//go:def.bzl", "go_cross_binary")
+
+def _go_cross_target(
+ base_target,
+ platform,
+):
+ go_cross_binary(
+ name = "{}_{}".format(base_target, platform),
+ platform = "@rules_go//go/toolchain:{}".format(platform),
+ target = ":{}".format(base_target),
+ )
+
+def go_cross_binaries(
+ base_target,
+ mac = False,
+ openbsd = False,
+ linux_arm = False,
+):
+ """
+ go_cross_binaries
+
+ Args:
+ base_target: base go_binary target
+ mac: generate targets for macOS
+ openbsd: generate targets for OpenBSD
+ linux_arm: generate targets for Linux arm64
+ """
+ if mac:
+ for arch in ["amd64", "arm64"]:
+ _go_cross_target(base_target, "darwin_{}".format(arch))
+
+ if openbsd:
+ _go_cross_target(base_target, "openbsd_amd64")
+
+ if linux_arm:
+ _go_cross_target(base_target, "linux_arm64")
\ No newline at end of file