]> go.fuhry.dev Git - runtime.git/commitdiff
Cross-compilation support, phase 1
authorDan Fuhry <dan@fuhry.com>
Thu, 23 Apr 2026 17:24:13 +0000 (13:24 -0400)
committerDan Fuhry <dan@fuhry.com>
Fri, 24 Apr 2026 15:42:44 +0000 (11:42 -0400)
Get everything building without hooking up mtls_cgo.

Co-Authored-By: Qwen3.6-35B-A3B <noreply@qwen.ai>
96 files changed:
BUILD.bazel
attestation/cgo/BUILD.bazel
attestation/client/BUILD.bazel
attestation/internal/attestation/BUILD.bazel
attestation/rpc_client/BUILD.bazel
attestation/rpc_server/BUILD.bazel
automation/bryston_ctl/BUILD.bazel
automation/bryston_ctl/cli/BUILD.bazel
automation/bryston_ctl/client/BUILD.bazel
automation/bryston_ctl/server/BUILD.bazel
bazel/copy.bzl [new file with mode: 0644]
bazel/cross.bzl
bazel/go.bzl [new file with mode: 0644]
bazel/pkg.bzl
bazel/subst/BUILD.bazel
cmd/apcups_exporter/BUILD.bazel
cmd/echo_client/BUILD.bazel
cmd/echo_server/BUILD.bazel
cmd/ephs_client/BUILD.bazel
cmd/ephs_server/BUILD.bazel
cmd/grpc_health_probe/BUILD.bazel
cmd/http_proxy/BUILD.bazel
cmd/ldap_health_exporter/BUILD.bazel
cmd/machines_agent/BUILD.bazel
cmd/machines_event_monitor/BUILD.bazel
cmd/metricbus_server/BUILD.bazel
cmd/mint_server/BUILD.bazel
cmd/mtls_exporter/BUILD.bazel
cmd/mtls_supervisor/BUILD.bazel
cmd/mtls_verify_tool/BUILD.bazel
cmd/prometheus_http_discovery/BUILD.bazel
cmd/sase_ws_proxy_client/BUILD.bazel
cmd/sase_ws_tcp_proxy/BUILD.bazel
cmd/sd_health_exporter/BUILD.bazel
cmd/sd_publish/BUILD.bazel
cmd/sd_register/BUILD.bazel
cmd/sd_watcher/BUILD.bazel
config_watcher/BUILD.bazel
constants/BUILD.bazel
constants/generate/BUILD.bazel
echo/BUILD.bazel
ephs/BUILD.bazel
ephs/ephsll/BUILD.bazel
ephs/servicer/BUILD.bazel
grpc/BUILD.bazel
grpc/internal/acl/BUILD.bazel
grpc/internal/client/BUILD.bazel
grpc/internal/common/BUILD.bazel
grpc/internal/server/BUILD.bazel
http/BUILD.bazel
ldap/BUILD.bazel
machines/BUILD.bazel
machines/coredns_plugin/BUILD.bazel
metrics/metricbus/BUILD.bazel
metrics/metricbus/mbclient/BUILD.bazel
metrics/metricbus/mbclient/example/BUILD.bazel
metrics/metricbus/mbserver/BUILD.bazel
metrics/mtls/BUILD.bazel
mint/BUILD.bazel
mint/remote_signer/BUILD.bazel
mint/servicer/BUILD.bazel
mtls/BUILD.bazel
mtls/certutil/BUILD.bazel
mtls/fsnotify/BUILD.bazel
mtls/pkcs11.go
mtls/provider_keychain_macos.go
mtls/provider_tpm2_pkcs11.go
net/BUILD.bazel
net/dns/BUILD.bazel
pkg/nfpmgen/BUILD.bazel
proto/service/attest/BUILD.bazel
proto/service/bryston_ctl/BUILD.bazel
proto/service/echo/BUILD.bazel
proto/service/ephs/BUILD.bazel
proto/service/mint/BUILD.bazel
rand/BUILD.bazel
sase/BUILD.bazel
sd/BUILD.bazel
thirdparty/registry/BUILD.bazel
utils/BUILD.bazel
utils/ansi/BUILD.bazel
utils/checkers/BUILD.bazel
utils/context/BUILD.bazel
utils/daemon/BUILD.bazel
utils/debounce/BUILD.bazel
utils/fsutil/BUILD.bazel
utils/generics/BUILD.bazel
utils/hashset/BUILD.bazel
utils/hostname/BUILD.bazel
utils/log/BUILD.bazel
utils/option/BUILD.bazel
utils/rollout/BUILD.bazel
utils/slices2/BUILD.bazel
utils/stringmatch/BUILD.bazel
utils/strings2/BUILD.bazel
utils/subst/BUILD.bazel

index 56ab7d8d26bcca10ec351a2e2731c93d3a3fb646..d91add0d707111df98ce5f1eaa700eff42a2c6db 100644 (file)
@@ -1,5 +1,7 @@
 load("@gazelle//:def.bzl", "gazelle")
 
 # gazelle:proto legacy
+# gazelle:map_kind go_binary go_multi_binary //bazel:go.bzl
+# gazelle:map_kind go_library go_multi_library //bazel:go.bzl
 
 gazelle(name = "gazelle")
index a3d633def355e2583fb399c5f4ff4286b84fdb68..66d4835c5a32f5da71925786ac459e8f9d139be1 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "cgo_lib",
     srcs = [
         "extension.h",
@@ -16,7 +16,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "cgo",
     embed = [":cgo_lib"],
     visibility = ["//visibility:public"],
index 6db030d4e056bbff8fbc723762a2be6adcd1b127..66faf26f1494c0d753cf27a7dd0c3da7b319e97b 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "client_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/attestation/client",
@@ -8,7 +8,7 @@ go_library(
     deps = ["//attestation/internal/attestation"],
 )
 
-go_binary(
+go_multi_binary(
     name = "client",
     embed = [":client_lib"],
     visibility = ["//visibility:public"],
index ccc655e77a217304b03d50c636d07e76e062333f..bc9213e8ff5fa5ea781c482c35e00a7819c4558b 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "attestation",
     srcs = [
         "api.go",
index 71bcdade512f52daccac9d9b920bd841ecb2b0f9..5d48a3fa7f03b362aa0c79b4e5182f3adc5b3319 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "rpc_client_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/attestation/rpc_client",
@@ -14,7 +14,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "rpc_client",
     embed = [":rpc_client_lib"],
     visibility = ["//visibility:public"],
index 4043c16c5a09708cf5d532b61fec29f9ffb49f3a..c18bf2a7c671f93f3231cf2e4ce6ef48de3fa180 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "rpc_server_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/attestation/rpc_server",
@@ -15,7 +15,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "rpc_server",
     embed = [":rpc_server_lib"],
     visibility = ["//visibility:public"],
index 5a361c4581ee6b5875edbc88c7b7dd739098961b..6c704c72ddbeb11f3f1fb2ad08d7f9b135a612b4 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "bryston_ctl",
     srcs = [
         "bryston_ctl.go",
index cb55047bd71dd168e76dfb500c0a03d47347b60e..deb4c98a708fea523946f754fb9d62c3ba84a8aa 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "cli_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/automation/bryston_ctl/cli",
@@ -12,7 +12,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "cli",
     embed = [":cli_lib"],
     visibility = ["//visibility:public"],
index be8018a4b49f72c803ff5c8e3fe6b31c21dfb34b..8f38fc310041f2dd787c55a9d0463c3f12e55bfb 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "client_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/automation/bryston_ctl/client",
@@ -15,7 +15,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "client",
     embed = [":client_lib"],
     visibility = ["//visibility:public"],
index f176641da609c935946f5c5b62173536d9139ea9..77311571e7f0102471501c252f76e1ee9b29def6 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "server_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/automation/bryston_ctl/server",
@@ -16,7 +16,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "server",
     embed = [":server_lib"],
     visibility = ["//visibility:public"],
diff --git a/bazel/copy.bzl b/bazel/copy.bzl
new file mode 100644 (file)
index 0000000..40ce900
--- /dev/null
@@ -0,0 +1,11 @@
+def deepcopy(thing):
+    if type(thing) == list:
+        return [deepcopy(i) for i in thing]
+    elif type(thing) == dict:
+        return {
+            k: deepcopy(v) for k, v in thing.items()
+        }
+    elif type(thing) in [str, bool, int] or thing == None:
+        return thing
+    else:
+        return thing
index 1aa4b79bcc0caee4128e45576d127ec8fea6304e..93828ef7a1b6545ac52f9a06e16bb8ff79caaf1c 100644 (file)
@@ -3,11 +3,13 @@ load("@rules_go//go:def.bzl", "go_cross_binary")
 def _go_cross_target(
     base_target,
     platform,
+    cross_lib_target,
 ):
+    """Create a single cross-compiled binary variant."""
     go_cross_binary(
         name = "{}_{}".format(base_target, platform),
         platform = "@rules_go//go/toolchain:{}".format(platform),
-        target = ":{}".format(base_target),
+        target = cross_lib_target,
     )
 
 def go_cross_binaries(
@@ -15,22 +17,53 @@ def go_cross_binaries(
     mac = False,
     openbsd = False,
     linux_arm = False,
+    linux_amd64_alpine = False,
+    cross_lib = None,
 ):
     """
-    go_cross_binaries 
+    Create cross-compiled binary variants of a base target.
+
+    For libraries that have both no_cgo and _cgo variants (like mtls),
+    cross binaries automatically use the no_cgo variant to avoid CGO issues.
 
     Args:
-        base_target: base go_binary target
-        mac: generate targets for macOS
-        openbsd: generate targets for OpenBSD
-        linux_arm: generate targets for Linux arm64
+        base_target: base go_binary target name (without :)
+        mac: generate targets for macOS (darwin_amd64, darwin_arm64)
+        openbsd: generate target for OpenBSD amd64
+        linux_arm: generate target for Linux arm64
+        linux_amd64_alpine: generate Alpine Linux amd64 target (pure, fully_static_link)
+        cross_lib: explicit label of the cross-compiled library to use.
+                   If not provided, auto-derived from base_target:
+                   - If {base_target}_lib exists and has a {base_target}_lib_no_cgo variant,
+                     use that
+                   - Otherwise falls back to {base_target}_lib (legacy behavior)
     """
+    # Determine which library label to use for cross compilation
+    if cross_lib:
+        lib_target = cross_lib
+    else:
+        lib_target = ":" + base_target + "_lib"
+
+    def _cross(lib_label, platform):
+        _go_cross_target(base_target, platform, lib_label)
+
     if mac:
         for arch in ["amd64", "arm64"]:
-            _go_cross_target(base_target, "darwin_{}".format(arch))
-    
+            _cross(lib_target, "darwin_{}".format(arch))
+
     if openbsd:
-        _go_cross_target(base_target, "openbsd_amd64")
-    
+        _cross(lib_target, "openbsd_amd64")
+
     if linux_arm:
-        _go_cross_target(base_target, "linux_arm64")
\ No newline at end of file
+        _cross(lib_target, "linux_arm64")
+
+    if linux_amd64_alpine:
+        go_cross_binary(
+            name = "{}_linux_amd64_alpine".format(base_target),
+            platform = "@rules_go//go/toolchain:linux_amd64",
+            target = lib_target,
+            features = [
+                "pure",
+                "fully_static_link",
+            ],
+        )
diff --git a/bazel/go.bzl b/bazel/go.bzl
new file mode 100644 (file)
index 0000000..531c2ee
--- /dev/null
@@ -0,0 +1,64 @@
+load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:copy.bzl", "deepcopy")
+
+def rewrite_deps(
+    kwargs,  # type: dict[str, Any]
+    keys,    # type: list[str]
+    suffix,  # type: str
+):  # type: dict[str, Any]
+    new_kwa = deepcopy(kwargs)
+    for k in keys:
+        if k in new_kwa:
+            new_kwa[k] = [
+                dep + suffix if (dep.startswith(":") or dep.startswith("//")) else dep
+                for dep in new_kwa[k]
+            ]
+
+    return new_kwa
+
+def go_multi_library(name, **kwargs):
+    """
+    Create a Go library target.
+
+    Args:
+        name: Library name (without : or //)
+        **kwargs: Passed to go_library. Must include srcs, importpath, deps, etc.
+
+    Creates:
+        - {name}: single library target
+    """
+    go_library(
+        name = name,
+        **kwargs,
+    )
+
+def _pkcs11_select():
+    """Return a select() expression that enables pkcs11 only on linux_amd64 host."""
+    return select({
+        "@rules_go//go/platform:linux_amd64": ["pkcs11"],
+        "//conditions:default": [],
+    })
+
+def go_multi_binary(name, **kwargs):
+    """
+    Create a Go binary target with conditional pkcs11 gotag.
+
+    pkcs11 is only enabled when the host platform is linux_amd64 (where
+    cgo + libtpm2-pkcs11 are available). On other host platforms it is
+    excluded automatically via select().
+
+    Args:
+        name: Binary name
+        **kwargs: Passed to go_binary. embed, deps, etc.
+
+    Creates:
+        - {name}: native binary with conditional pkcs11 gotag
+    """
+    native_kwargs = deepcopy(kwargs)
+    # Conditional pkcs11: only when host platform is linux_amd64
+    native_kwargs.setdefault("gotags", _pkcs11_select())
+
+    go_binary(
+        name = name,
+        **native_kwargs,
+    )
index 51447012ac0a38b4c13620b6341c91dcce6a19fc..db2509790fc86ed33ae8a658ce62d023e127fd12 100644 (file)
@@ -66,5 +66,5 @@ def nfpm_package(
     data,  # type: list[str]
 ):
     #for packager in ["deb", "archlinux", "rpm"]:
-    for packager in ["archlinux"]:
+    for packager in ["archlinux", "apk", "deb"]:
         _nfpm_package(name, config, data, packager)
\ No newline at end of file
index 9bad5cdd8c26468af56348d76a35681372e03848..9dd7a8744c257694afa398ad0c5cfaccde372e73 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "subst_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/bazel/subst",
@@ -8,7 +8,7 @@ go_library(
     deps = ["//utils/subst"],
 )
 
-go_binary(
+go_multi_binary(
     name = "subst",
     embed = [":subst_lib"],
     visibility = ["//visibility:public"],
index 30ef5316c460fc804b5891495acb5243d234615f..2f829ecd1b4992ad28f5638b76d8eca66520a3fa 100644 (file)
@@ -1,8 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
-load("//bazel:cross.bzl", "go_cross_binaries")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "apcups_exporter_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/apcups_exporter",
@@ -16,7 +15,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "apcups_exporter",
     embed = [":apcups_exporter_lib"],
     visibility = ["//visibility:public"],
@@ -46,8 +45,3 @@ systemd_service(
     user = "daemon",
     deps = ["apcupsd.service"],
 )
-
-go_cross_binaries(
-    base_target = "apcups_exporter",
-    linux_arm = True,
-)
index 00441a3c92dab08fc2dec7e739398c87ae2d6ef2..0f6a7468bb830bbcc720b373d038d4c9c9e5c1f3 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "echo_client_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/echo_client",
@@ -15,7 +15,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "echo_client",
     embed = [":echo_client_lib"],
     visibility = ["//visibility:public"],
index 799cc93ab9898d84e58379710c1e2952d5059dba..bba3355d873a17064d6652ab8a2896237119eefd 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "echo_server_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/echo_server",
@@ -16,7 +16,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "echo_server",
     embed = [":echo_server_lib"],
     visibility = ["//visibility:public"],
index 1f4550e5df7e6dc73fdfe07e1aa34bf99364a71b..59331806ae242b571d210956a3bc7d6ab1bb246d 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "ephs_client_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/ephs_client",
@@ -17,7 +17,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "ephs_client",
     embed = [":ephs_client_lib"],
     visibility = ["//visibility:public"],
index 3d77a80f36b1c156d17e2d49f2ce9c5317b3dc31..9ae3d8e55b6464c3f5bdb0c378012763f1024166 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "ephs_server_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/ephs_server",
@@ -8,6 +8,7 @@ go_library(
     deps = [
         "//ephs/servicer",
         "//grpc",
+        "//mint",
         "//mtls",
         "//proto/service/ephs",
         "//utils/context",
@@ -16,7 +17,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "ephs_server",
     embed = [":ephs_server_lib"],
     visibility = ["//visibility:public"],
index 1d65ca1146f9241fd337ee9c8156013d5c712efb..7fb7f5be75ccdc30ccb3b786b39f5bbbdc89d0b4 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "grpc_health_probe_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/grpc_health_probe",
@@ -14,7 +14,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "grpc_health_probe",
     embed = [":grpc_health_probe_lib"],
     visibility = ["//visibility:public"],
index e70103054d9d02ba7004b728dc52bf7a4c8fe84e..e2893416097007f4aeaa651700d0e5f6938be2c1 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "http_proxy_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/http_proxy",
@@ -17,7 +17,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "http_proxy",
     embed = [":http_proxy_lib"],
     visibility = ["//visibility:public"],
index 472fe0075618f55135c0059154824c6839a8b95e..519c1ddafd6f5016553dab70ee7c0cd6bb99e414 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "ldap_health_exporter_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/ldap_health_exporter",
@@ -16,7 +16,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "ldap_health_exporter",
     embed = [":ldap_health_exporter_lib"],
     visibility = ["//visibility:public"],
index 7fed79bb2689e9def477077735866d2fcd282312..a1871eca15499ba769daaa124ddc37b4dd18dbe9 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
 load("//bazel:cross.bzl", "go_cross_binaries")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "machines_agent_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/machines_agent",
@@ -14,7 +14,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "machines_agent",
     embed = [":machines_agent_lib"],
     visibility = ["//visibility:public"],
index 986d02c4d577bfa016be891a79f49d80f8075c79..696c862aa550f4972fe4de368364424ebae626b3 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "machines_event_monitor_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/machines_event_monitor",
@@ -12,7 +12,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "machines_event_monitor",
     embed = [":machines_event_monitor_lib"],
     visibility = ["//visibility:public"],
index dceea288947fe6cac68f42416af55d020bfd671b..959b9b085989ea15ca929eb583d4fcc12fd6c431 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_dbus_service")
 
-go_library(
+go_multi_library(
     name = "metricbus_server_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/metricbus_server",
@@ -13,7 +13,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "metricbus_server",
     embed = [":metricbus_server_lib"],
     visibility = ["//visibility:public"],
index 549c500b93e665ed8caf4a68c6e3bd374281a7d1..98c3e0695e5dd4b41be2ab04a150f6fcf6b0b0ca 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mint_server_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/mint_server",
@@ -16,7 +16,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "mint_server",
     embed = [":mint_server_lib"],
     visibility = ["//visibility:public"],
index 1e59ec1052385d21d90c5c9fe47707bf267fc033..5b4786a208855ee975c1c1ca08c0024c39706599 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "mtls_exporter_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/mtls_exporter",
@@ -13,7 +13,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "mtls_exporter",
     embed = [":mtls_exporter_lib"],
     visibility = ["//visibility:public"],
index 4c16b5b59c2eed2f2ffb244f9e91b9d98b62cdf4..419b4e64815d5c3348ccdb17502a449d65ffcf48 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mtls_supervisor_lib",
     srcs = [
         "main.go",
@@ -18,7 +18,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "mtls_supervisor",
     embed = [":mtls_supervisor_lib"],
     visibility = ["//visibility:public"],
index 5ba2f6dff779355610cb693bd0db47a17dc4e52f..e55e24cb0c6e88a2b72b8f357d0dbf4edf6ff769 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mtls_verify_tool_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/mtls_verify_tool",
@@ -11,7 +11,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "mtls_verify_tool",
     embed = [":mtls_verify_tool_lib"],
     visibility = ["//visibility:public"],
index b98bc6db85d5dfadfa38bcf619c4089631fb5819..395ae14c180df2ad9daf11ae4d916f5e6a97645b 100644 (file)
@@ -1,13 +1,14 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "prometheus_http_discovery_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/prometheus_http_discovery",
     visibility = ["//visibility:private"],
     deps = [
         "//constants",
+        "//mint",
         "//mtls",
         "//sd",
         "//utils/context",
@@ -16,7 +17,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "prometheus_http_discovery",
     embed = [":prometheus_http_discovery_lib"],
     visibility = ["//visibility:public"],
index a97c3f86006cd2931663ab0364b3bd2b336bfca1..1bd0437e2c4286becd0bcb051ed671f0553a4140 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
 load("//bazel:cross.bzl", "go_cross_binaries")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "sase_ws_proxy_client_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/sase_ws_proxy_client",
@@ -12,7 +12,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "sase_ws_proxy_client",
     embed = [":sase_ws_proxy_client_lib"],
     visibility = ["//visibility:public"],
index 2cfd80c572634aef0a22e07d2790f6f655bafc5e..978906b4fa235eae197ec027cb6726ed351d39b6 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "sase_ws_tcp_proxy_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/sase_ws_tcp_proxy",
@@ -15,7 +15,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "sase_ws_tcp_proxy",
     embed = [":sase_ws_tcp_proxy_lib"],
     visibility = ["//visibility:public"],
index da61a045491962433d3ec15754191a36874f0bf6..6fdcdade2adcdfccf70faa90ffa18ffddb0e735f 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "sd_health_exporter_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/sd_health_exporter",
@@ -14,7 +14,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "sd_health_exporter",
     embed = [":sd_health_exporter_lib"],
     visibility = ["//visibility:public"],
index 4ac44c67c3e1b3495dcf80831941507e712e6309..31cbb73f2ea17dbf0f7558222e04118c1c4529c7 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "sd_publish_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/sd_publish",
@@ -13,7 +13,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "sd_publish",
     embed = [":sd_publish_lib"],
     visibility = ["//visibility:public"],
index 1ac2f6b4d3d2142ce4b949565ec500ff6363c9bf..16f7c816fd065321550308dcf7dd43d47fd0ff03 100644 (file)
@@ -1,7 +1,7 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 load("//bazel:svc.bzl", "systemd_service")
 
-go_library(
+go_multi_library(
     name = "sd_register_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/sd_register",
@@ -15,7 +15,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "sd_register",
     embed = [":sd_register_lib"],
     visibility = ["//visibility:public"],
index de324cd60238aab3952f28826aeed5c63f42c9cc..5bbf16750323cde4e123a363fb6fe053dad3bec8 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "sd_watcher_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/cmd/sd_watcher",
@@ -12,7 +12,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "sd_watcher",
     embed = [":sd_watcher_lib"],
     visibility = ["//visibility:public"],
index 42da7fad7c6b64ee1fed45871c9c05fa8fb14a47..cc8165458d3438fe50eee6f7f96b61649c32f2c7 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "config_watcher",
     srcs = [
         "backend_ephs.go",
index e1c0ac0381de99787421b2b91d6a84c4b5ed5902..b9a36a71c0b5ec3b209f3881c7ac4a993c9d230c 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 # Ignore this package in gazelle so constants_in.go is picked up by IDEs but not builds.
 # gazelle:exclude constants_fake.go
@@ -13,7 +13,7 @@ genrule(
     ],
 )
 
-go_library(
+go_multi_library(
     name = "constants",
     srcs = ["constants.go"],
     importpath = "go.fuhry.dev/runtime/constants",
index ef577c4424d83da250ce518bd3910a9c10690443..ebec9aff8005ef606822b1ef519d48c24d58dc78 100644 (file)
@@ -1,13 +1,13 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "generate_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/constants/generate",
     visibility = ["//visibility:private"],
 )
 
-go_binary(
+go_multi_binary(
     name = "generate",
     embed = [":generate_lib"],
     visibility = ["//visibility:public"],
index 2d34dd0aa6df5d03582b657ff054f8a522e50484..88035800f98e615f6050579212a1c8fede4d6706 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "echo",
     srcs = ["server.go"],
     importpath = "go.fuhry.dev/runtime/echo",
index e4f36dd2ddb2c427cb83aad9b672a7e1590ae4d4..8222d851901dd9c98983946f5d4c4fd0b3510f4d 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "ephs",
     srcs = [
         "client.go",
index 3794d7e2b4b2e6f6c59afa99614a486652e45b91..14cc99063d932f58fdee78e8eb554f33330dd101 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "ephsll",
     srcs = [
         "client.go",
index 3b7481a9cdbdca3a1cad3cbe3f3fce07212b43f4..aa1329d1e71d043b96d357c7013c630c2ba71acf 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "servicer",
     srcs = [
         "acl.go",
index 736056ec60718bffcdb0654e32aaa708a09e51b6..f2181c13eca4c5cac9305ec7f3589b092af23690 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "grpc",
     srcs = ["imports.go"],
     importpath = "go.fuhry.dev/runtime/grpc",
index f190af5effb6a62cf8787b00fec5b86dc694a13c..f05ec696e7654934bfe55532cf23d605b9fc29a2 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "acl",
     srcs = ["acl_yaml.go"],
     importpath = "go.fuhry.dev/runtime/grpc/internal/acl",
index 40a50e867e0806d6fa82ddcc2409b35b811f2ad3..5efc747519c5ec714573f649d9a390e76705c8d8 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 package(
     default_visibility = [
@@ -7,7 +7,7 @@ package(
     ],
 )
 
-go_library(
+go_multi_library(
     name = "client",
     srcs = [
         "client.go",
index 024c9112ab73ab5c22d1d6cac38d9a5c2107c1b6..c1b8f75e87adea8df18d3dc7ce893c97fdc61948 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 package(
     default_visibility = [
@@ -7,7 +7,7 @@ package(
     ],
 )
 
-go_library(
+go_multi_library(
     name = "common",
     srcs = [
         "conn_base.go",
index ff7883599eb5fd964cc323ef51f7987849730c08..6c308862ef7ded8ef9e14d333e07cdf8051e2771 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "server",
     srcs = [
         "context.go",
index b489a99ea3204f35f077889f49811c71ae04138e..91f2ea73b7aa48d57883dde1345d4ef9d2db13e5 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "http",
     srcs = [
         "http.go",
index 6942854e56934a92175d2c839e8418507de5db0a..8b46183742fbb5baaba2078c235d6e5afa121a70 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "ldap",
     srcs = [
         "scraper.go",
index b48f1d0d57c7f1f232319658da66eae21ffeaa95..0bc408362bbc50e3019e6f0bfcae2f09f394defb 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "machines",
     srcs = [
         "agent.go",
index 28605ad9ff7484852e9eb9a2563ea5cb6f67fe1d..eed9003a7740413a78fb089211d6cb3d2e75f8fc 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "coredns_plugin",
     srcs = [
         "registry.go",
index 6dd6ffca8bc5a5bfcc10951c5bf011e7397253cf..54cbb3a1ca0fb3ab394c80099e6d1ab53fc00aa4 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "metricbus",
     srcs = ["constants.go"],
     importpath = "go.fuhry.dev/runtime/metrics/metricbus",
index 7cbdcec74a14cea564ba4e1ef0c362695c0ab27d..bf84393b29044be0070e564e4df3210d05f17d1f 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mbclient",
     srcs = [
         "common.go",
index b6ec8169fb1e02eda89ec39c385a42ae06e4eb2f..f9b23f90ba2ff13f38fe6f181b75b03cb51dd1df 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "example_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/metrics/metricbus/mbclient/example",
@@ -11,7 +11,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "example",
     embed = [":example_lib"],
     visibility = ["//visibility:public"],
index 6e32ee3fc16992a117be07e40b8923e7d75529ff..ef04a70bb67cd4963d067a41f9cf075a18e60c1e 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mbserver",
     srcs = [
         "dbus_interface.go",
index 066b46bff99b7efcc54c2feba7fa5cd9a1c94fd1..c4adcaa9e8fbbfabb81588a5dc4994f875d252de 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mtls",
     srcs = ["stats.go"],
     importpath = "go.fuhry.dev/runtime/metrics/mtls",
index 84460a492445dc7482d584d856b135dc95ced2df..77af573645876580e27156ca2cd43ee39e7a3371 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "mint",
     srcs = [
         "client.go",
index 53bfb2d821286781ecdcad824f38f0cc22f35603..4ad1cd201afc23ebdfac5daf3641bfc7a076e033 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "remote_signer",
     srcs = ["remote_signer.go"],
     importpath = "go.fuhry.dev/runtime/mint/remote_signer",
index 9090ca00bde329f21c53251bb63db61d13c18735..bb3880f2f6f7679454f2dadb4df75592afb6a7cb 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "servicer",
     srcs = [
         "acl.go",
index 9fa9e324dfee83c5a827121936a5b614341a40d9..e570fe916f4bb0a557f4030c4c2f1c3d5a5d4c6e 100644 (file)
@@ -1,7 +1,43 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
-    name = "mtls",
+# No-CGO variant: excludes all CGO-gated source files.
+# Used by cross-compiled binaries where CGO is not supported.
+go_multi_library(
+    name = "mtls_no_cgo",
+    srcs = [
+        "config.go",
+        "identity.go",
+        "lazy_identity.go",
+        "provider_anonymous.go",
+        "provider_file.go",
+        "provider_interface.go",
+        "provider_shared.go",
+        "verify_names.go",
+        "verify_roots.go",
+    ],
+    embedsrcs = [
+        "configs/prod.yaml",
+        "configs/user.yaml",
+    ],
+    importpath = "go.fuhry.dev/runtime/mtls",
+    visibility = ["//visibility:public"],
+    deps = [
+        "//constants",
+        "//mtls/certutil",
+        "//mtls/fsnotify",
+        "//utils/fsutil",
+        "//utils/hashset",
+        "//utils/hostname",
+        "//utils/log",
+        "//utils/subst",
+        "@in_gopkg_yaml_v3//:yaml_v3",
+    ],
+)
+
+# CGO variant: includes all source files including platform-specific ones.
+# Used by native linux_amd64 builds (with pkcs11) and darwin builds (with keychain).
+go_multi_library(
+    name = "mtls_cgo",
     srcs = [
         "config.go",
         "identity.go",
@@ -16,10 +52,7 @@ go_library(
         "verify_names.go",
         "verify_roots.go",
     ],
-    cgo = select({
-        "@rules_go//go/platform:linux_amd64": True,
-        "//conditions:default": False,
-    }),
+    cgo = True,
     embedsrcs = [
         "configs/prod.yaml",
         "configs/user.yaml",
@@ -36,16 +69,18 @@ go_library(
         "//utils/log",
         "//utils/subst",
         "@com_github_thalesignite_crypto11//:crypto11",
+        "@com_github_keybase_go_keychain//:go-keychain",
         "@in_gopkg_yaml_v3//:yaml_v3",
-    ] + select({
-        "@rules_go//go/platform:darwin": [
-            "//utils/stringmatch",
-            "@com_github_keybase_go_keychain//:go-keychain",
-        ],
-        "@rules_go//go/platform:ios": [
-            "//utils/stringmatch",
-            "@com_github_keybase_go_keychain//:go-keychain",
-        ],
-        "//conditions:default": [],
+    ],
+)
+
+alias(
+    name = "mtls",
+    actual = select({
+        "@rules_go//go/platform:linux_amd64": ":mtls_cgo",
+        "@rules_go//go/platform:darwin_amd64": ":mtls_cgo",
+        "@rules_go//go/platform:darwin_arm64": ":mtls_cgo",
+        "//conditions:default": ":mtls_no_cgo",
     }),
+    visibility = ["//visibility:public"],
 )
index ad8266477561875a8c75218d9edd919a41b3314e..9456348ef71831d6dd2c6f3d79de881910a4b1da 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "certutil",
     srcs = ["certutil.go"],
     importpath = "go.fuhry.dev/runtime/mtls/certutil",
index 76a690a1b127a379041475bb5592dda465773b61..8ad017aee87edd5c2c61b27fa73cc8c15b2d9672 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "fsnotify",
     srcs = [
         "fsnotify.go",
index fb5835dc18eac58fc40a31fb5b30f029c96a0bbc..cda29234c53d37063ab63dc2be9ca7f844c97b44 100644 (file)
@@ -1,4 +1,4 @@
-//go:build cgo
+//go:build pkcs11
 
 package mtls
 
@@ -10,6 +10,7 @@ import (
        "sync"
 
        "github.com/ThalesIgnite/crypto11"
+
        "go.fuhry.dev/runtime/constants"
        "go.fuhry.dev/runtime/utils/log"
 )
@@ -84,13 +85,13 @@ func (p *p11) GetCertificate() (*tls.Certificate, error) {
        pkcs11Logger.V(1).Infof("trying to find device trust certificate with object label %s", deviceTrustObjectLabel)
        cert, err := p.cHandle.FindCertificate(nil, []byte(deviceTrustObjectLabel), nil)
        if err != nil {
-               pkcs11Logger.V(1).Errorf("find devicetrust certificate filed: %v", err)
+               pkcs11Logger.V(1).Errorf("find devicetrust certificate failed: %v", err)
                return nil, err
        }
 
        privateKey, err := p.GetPrivateKey()
        if err != nil {
-               pkcs11Logger.V(1).Errorf("find devicetrust private key filed: %v", err)
+               pkcs11Logger.V(1).Errorf("find devicetrust private key failed: %v", err)
                return nil, err
        }
 
index cbce997165a54dce1e0ed3bdb1500eaf054c231c..b7941238c4a9df78512f9be28d3a80f4279491c7 100644 (file)
@@ -19,12 +19,13 @@ import (
        "time"
 
        "github.com/keybase/go-keychain"
+       "gopkg.in/yaml.v3"
+
        "go.fuhry.dev/runtime/constants"
        "go.fuhry.dev/runtime/mtls/certutil"
        "go.fuhry.dev/runtime/utils/hashset"
        "go.fuhry.dev/runtime/utils/log"
        "go.fuhry.dev/runtime/utils/stringmatch"
-       "gopkg.in/yaml.v3"
 )
 
 type macosKeychainCertificate struct {
@@ -234,7 +235,6 @@ func findCertificateAndPrivateKeyMatchingKeyPairInKeychain(leaves []*kcCertResul
 
                        return nil, fmt.Errorf("failed to identify any private key/certificate pairs")
                })
-
        if err != nil {
                return nil, nil, err
        }
@@ -448,7 +448,7 @@ func (kcr *macosKeychainRoots) IntermediateCertificates() ([]*x509.Certificate,
        return getMtlsIntermediatesFromMacKeychain()
 }
 
-func (f *macosKeychainProviderFactory) New(_ *yaml.Node) (identityLoaderFunc, error) {
+func (f *macosKeychainProviderFactory) New(_ *yaml.Node) (IdentityLoaderFunc, error) {
        return NewCertificateFromMacKeychain, nil
 }
 
index c755aef01f4e86328d2a20ed089437fcfddcea8b..4b4b1aa07cd0ff1806e0b95a3a0d70b862dc9f7b 100644 (file)
@@ -1,4 +1,4 @@
-//go:build cgo
+//go:build pkcs11
 
 package mtls
 
@@ -10,9 +10,10 @@ import (
        "fmt"
        "path"
 
+       "gopkg.in/yaml.v3"
+
        "go.fuhry.dev/runtime/constants"
        "go.fuhry.dev/runtime/mtls/certutil"
-       "gopkg.in/yaml.v3"
 )
 
 type tpmProviderFactory struct{}
@@ -132,10 +133,12 @@ func (f *tpmProviderFactory) New(_ *yaml.Node) (IdentityLoaderFunc, error) {
 }
 
 func init() {
-       RegisterIdentityDriver("tpm2-pkcs11", func(cls PrincipalClass, serviceName string) (CertificateProvider, error) {
+       RegisterIdentityDriver("tpm2_pkcs11", func(cls PrincipalClass, serviceName string) (CertificateProvider, error) {
                if cls != ServicePrincipal || serviceName != constants.DeviceTrustPrincipal {
                        return nil, ErrUnsupportedClass
                }
                return NewTPMBackedCertificate()
        })
+
+       RegisterProviderFactory("tpm2_pkcs11", &tpmProviderFactory{})
 }
index b2ae2902d6af18eea2b46ef53d75f0da408ab92a..81f90f8be29cb95137c569fd433e96c69fdd5d28 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "net",
     srcs = ["happy_eyeballs.go"],
     importpath = "go.fuhry.dev/runtime/net",
index 055b39c18551539d1509549edf6fa90df53e7fb3..5807f566cc10b8dfdf5be6e3f39075ab2f36181f 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "dns",
     srcs = [
         "dns_cache.go",
index 62606544c558b4ac0a8932ed3b025a3e8c79c446..7532737381a804301f2235a6d9dd49d06800d3c7 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "nfpmgen_lib",
     srcs = [
         "config_generator.go",
@@ -17,7 +17,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "nfpmgen",
     embed = [":nfpmgen_lib"],
     visibility = ["//visibility:public"],
index f9436a629ce69fb06ea9aaeccdf8295f8c3b8132..5b506403ea5ea7ca42f7c844c242d53f8d8345b5 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 filegroup(
     name = "go_default_library_protos",
@@ -6,7 +6,7 @@ filegroup(
     visibility = ["//visibility:public"],
 )
 
-go_library(
+go_multi_library(
     name = "attest",
     srcs = [
         "attest_server.pb.go",
index bb46bad880983fff5d159d93c334dfdec1962309..fb80d0596151fafd0faafeddb85a4ed8de351ab2 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 filegroup(
     name = "go_default_library_protos",
@@ -6,7 +6,7 @@ filegroup(
     visibility = ["//visibility:public"],
 )
 
-go_library(
+go_multi_library(
     name = "bryston_ctl",
     srcs = [
         "bryston_ctl.pb.go",
index 018ccc23881ded6151288912c7f84b3e74ac8bcf..afa070e893636f6595b87ac05fdf54370ff0333a 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 filegroup(
     name = "go_default_library_protos",
@@ -6,7 +6,7 @@ filegroup(
     visibility = ["//visibility:public"],
 )
 
-go_library(
+go_multi_library(
     name = "echo",
     srcs = [
         "echo_server.pb.go",
index 4488ec742228349d7a866eefc9c875fcf6e485fa..6d06eeae871a0c18fe8ac0e65d0e6d40dfac220a 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 filegroup(
     name = "go_default_library_protos",
@@ -9,7 +9,7 @@ filegroup(
     visibility = ["//visibility:public"],
 )
 
-go_library(
+go_multi_library(
     name = "ephs",
     srcs = [
         "ephs_service.pb.go",
index 2d13bb7a1572034a036e3b6ddc9d6264f0de2fd2..a4f208e08677f09fb3f4858e340716ccb9c543fa 100644 (file)
@@ -1,4 +1,4 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
 # gazelle:proto legacy
 
@@ -11,7 +11,7 @@ filegroup(
     visibility = ["//visibility:public"],
 )
 
-go_library(
+go_multi_library(
     name = "mint",
     srcs = [
         "mint_service.pb.go",
index 3ebfe6672cc06c1b6df6495ee26134cb197fc70b..b82377360ef4d6b8ec42e3dacd0e8e1f1488e707 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "rand",
     srcs = ["range.go"],
     importpath = "go.fuhry.dev/runtime/rand",
index 6aef30193e7cdcda584f1d78f0777c42678b0d3a..37492985c566560806e077da6426866d7f64e68e 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "sase",
     srcs = [
         "acl.go",
index 9c2fa502482c0c912cdf0ecb54d333dc9ab0acca..3242353db2debdcb8274b00cc005b72f8896c6b3 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "sd",
     srcs = [
         "etcd_factory.go",
index 44f73228d7b658f78e6c6016bf19b6d8f3a5dc11..f658d55c0f86babd4a8c4a8dd6b86a422f70250f 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_binary", "go_library")
+load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "registry_lib",
     srcs = ["main.go"],
     importpath = "go.fuhry.dev/runtime/thirdparty/registry",
@@ -24,7 +24,7 @@ go_library(
     ],
 )
 
-go_binary(
+go_multi_binary(
     name = "registry",
     embed = [":registry_lib"],
     visibility = ["//visibility:public"],
index 5bff5271884a9839adef3478a8d2572bb0140ad6..cb62fe96074e5cff9221dc42621b4de27eeded73 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "utils",
     srcs = ["reverse.go"],
     importpath = "go.fuhry.dev/runtime/utils",
index 0e828b7e4e5b705b5ed6292ad92972aa865ef62b..28dcd55780c1a74dee7e3ffe1edb032f7d03c73d 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "ansi",
     srcs = ["color.go"],
     importpath = "go.fuhry.dev/runtime/utils/ansi",
index 6a051067e742ccbdf357afc8fb0be35790b2f471..099724c2814259b64716f11c666d8de6fb99f7ae 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "checkers",
     srcs = ["contains_key.go"],
     importpath = "go.fuhry.dev/runtime/utils/checkers",
index d91ba7c7815dccef7f83d22ca0a877f025b34f2f..474232ba622fe800a77f63f3aab6d4d8438e0f37 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "context",
     srcs = [
         "imports.go",
index 0f586ff669cdd3a5b56090a5944efdf2ddf6c525..cad7856aeb183cc2e012ce3218e56c33fbeb7f9f 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "daemon",
     srcs = [
         "constants_linux.go",
index 491997ac3c152a0d6ffa7004fb9482efb5e5ccd8..a11f877809a4669e2fbcd54422f291c64db2ed3d 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "debounce",
     srcs = ["debounce.go"],
     importpath = "go.fuhry.dev/runtime/utils/debounce",
index 006933bca8905a5edc92cbeba9d186b8ec401c91..ff2882c1f94528690e2b42995ccb4676cd5ebad6 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "fsutil",
     srcs = ["file.go"],
     importpath = "go.fuhry.dev/runtime/utils/fsutil",
index 42b1a5276f04ceac47f58e81d4e3574db0c5a970..7dda0a672dc788b606fa713be5f5ca2024e2042d 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "generics",
     srcs = ["math.go"],
     importpath = "go.fuhry.dev/runtime/utils/generics",
index 5ca84f5eba0b360380961390726a4af9fe4927b8..9e0417dc8e3124b0dcde88bd2abc75b1616bcaa4 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "hashset",
     srcs = ["hashset.go"],
     importpath = "go.fuhry.dev/runtime/utils/hashset",
index 36f467d843e471e83c0d6f2e69a9b9c1b6743301..1dc4f99257013897aae0878d40cbfa6e11d9a3c1 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "hostname",
     srcs = [
         "hostname.go",
index a0526cf56e343e562e67b47289989f9ffe34a679..54c087478846f8d89525a2064ff5c915ef246895 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "log",
     srcs = [
         "http.go",
index 8f8fe872e24f833eef66fb8d48dae147b2aef89b..ff60ddd10c92353e9d574ba35e58172061a49982 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "option",
     srcs = ["option.go"],
     importpath = "go.fuhry.dev/runtime/utils/option",
index 157952b66e0dc78991e0d3c351b430945be2f98d..4e074501da2cfb9420ae3dfa39221b2ede625c63 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "rollout",
     srcs = ["rollout.go"],
     importpath = "go.fuhry.dev/runtime/utils/rollout",
index 0fb9a050721d8907fa6fbd00ae5ca8b928534a1c..67047f2a8e6a331a50b3918d44113b747a02cb19 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "slices2",
     srcs = ["map.go"],
     importpath = "go.fuhry.dev/runtime/utils/slices2",
index 51fc68c8f507afce20d2492c3dc976b6fddba25f..f96323b7e4a2757f46689015acb9f93b291389af 100644 (file)
@@ -1,6 +1,7 @@
-load("@rules_go//go:def.bzl", "go_library", "go_test")
+load("@rules_go//go:def.bzl", "go_test")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "stringmatch",
     srcs = [
         "matchers.go",
index 89b9128d4f491028516dc0269b99104785544d29..104c89fbf1cbb9af9231eba75db4bd1f4ea700fd 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "strings2",
     srcs = ["strings2.go"],
     importpath = "go.fuhry.dev/runtime/utils/strings2",
index f795b73a7724929b25336f8f0203045d54bf7610..4967ad4e8a62da3e8782545fe8a7e94ea27a5e91 100644 (file)
@@ -1,6 +1,6 @@
-load("@rules_go//go:def.bzl", "go_library")
+load("//bazel:go.bzl", "go_multi_library")
 
-go_library(
+go_multi_library(
     name = "subst",
     srcs = ["subst.go"],
     importpath = "go.fuhry.dev/runtime/utils/subst",