From 0722bce524c2c8d0df15f173472b787fde780fa7 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Wed, 15 May 2024 10:28:19 +0200 Subject: [PATCH] Add exec_compatible_with to @go_sdk//:builder go_tool_binary() is completely oblivious of toolchains. The reason being that Go toolchains actually depend on their output. Adding a toolchain dependency would thus add a cyclic dependency. This is problematic, because it means that the actions with mnemonic GoToolchainBinaryBuild end up getting scheduled on arbitrary workers. Address this by adding exec_compatible_with to the locations where go_tool_binary() is instantiated, namely the auto-generated BUILD files that are part of Go SDKs. Fixes: #3942 --- go/private/BUILD.sdk.bazel | 1 + go/private/sdk.bzl | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/go/private/BUILD.sdk.bazel b/go/private/BUILD.sdk.bazel index 5256d6b99..95072c8dc 100644 --- a/go/private/BUILD.sdk.bazel +++ b/go/private/BUILD.sdk.bazel @@ -64,6 +64,7 @@ go_tool_binary( srcs = ["@io_bazel_rules_go//go/tools/builders:builder_srcs"], ldflags = "-X main.rulesGoStdlibPrefix={}".format(RULES_GO_STDLIB_PREFIX), sdk = ":go_sdk", + exec_compatible_with = {exec_compatible_with}, ) non_go_reset_target( diff --git a/go/private/sdk.bzl b/go/private/sdk.bzl index 63978902b..c15cb7da9 100644 --- a/go/private/sdk.bzl +++ b/go/private/sdk.bzl @@ -15,6 +15,7 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "patch", "read_user_netrc", "use_netrc") load("//go/private:common.bzl", "executable_path") load("//go/private:nogo.bzl", "go_register_nogo") +load("//go/private:platforms.bzl", "GOARCH_CONSTRAINTS", "GOOS_CONSTRAINTS") load("//go/private/skylib/lib:versions.bzl", "versions") MIN_SUPPORTED_VERSION = (1, 14, 0) @@ -515,6 +516,10 @@ def _sdk_build_file(ctx, platform, version, experiments): "{exe}": ".exe" if goos == "windows" else "", "{version}": version, "{experiments}": repr(experiments), + "{exec_compatible_with}": repr([ + GOARCH_CONSTRAINTS[goarch], + GOOS_CONSTRAINTS[goos], + ]), }, )