aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhongpeng Lin <zplin@uber.com>2023-04-03 07:58:45 -0700
committerGitHub <noreply@github.com>2023-04-03 07:58:45 -0700
commita40b8a906dd86607583c1720f796e6813c76ae1d (patch)
tree83e85206ba7d33a5c83aaf2dcc4b1c44f197803c
parentd756ad91feb9ca43800e781ab29c117623abed90 (diff)
downloadbazelbuild-rules_go-a40b8a906dd86607583c1720f796e6813c76ae1d.tar.gz
Ignore pre-compiled stdlib only on 1.19 with experiments (#3508)
-rw-r--r--go/private/actions/BUILD.bazel1
-rw-r--r--go/private/actions/stdlib.bzl6
-rw-r--r--go/private/sdk.bzl12
3 files changed, 12 insertions, 7 deletions
diff --git a/go/private/actions/BUILD.bazel b/go/private/actions/BUILD.bazel
index 348e7625..d3fa8bbc 100644
--- a/go/private/actions/BUILD.bazel
+++ b/go/private/actions/BUILD.bazel
@@ -65,5 +65,6 @@ bzl_library(
deps = [
"//go/private:mode",
"//go/private:providers",
+ "//go/private:sdk",
],
)
diff --git a/go/private/actions/stdlib.bzl b/go/private/actions/stdlib.bzl
index f8bfbeef..40cb0c40 100644
--- a/go/private/actions/stdlib.bzl
+++ b/go/private/actions/stdlib.bzl
@@ -22,6 +22,7 @@ load(
"extldflags_from_cc_toolchain",
"link_mode_args",
)
+load("//go/private:sdk.bzl", "parse_version")
def emit_stdlib(go):
"""Returns a standard library for the target configuration.
@@ -44,13 +45,16 @@ def _stdlib_library_to_source(go, _attr, source, _merge):
source["stdlib"] = _build_stdlib(go)
def _should_use_sdk_stdlib(go):
+ version = parse_version(go.sdk.version)
+ if version and version[0] <= 1 and version[1] <= 19 and go.sdk.experiments:
+ # The precompiled stdlib shipped with 1.19 or below doesn't have experiments
+ return False
return (go.sdk.libs and # go.sdk.libs is non-empty if sdk ships with precompiled .a files
go.mode.goos == go.sdk.goos and
go.mode.goarch == go.sdk.goarch and
not go.mode.race and # TODO(jayconrod): use precompiled race
not go.mode.msan and
not go.mode.pure and
- not go.sdk.experiments and
go.mode.link == LINKMODE_NORMAL)
def _build_stdlib_list_json(go):
diff --git a/go/private/sdk.bzl b/go/private/sdk.bzl
index 7c6cd3d8..5a3ef422 100644
--- a/go/private/sdk.bzl
+++ b/go/private/sdk.bzl
@@ -95,7 +95,7 @@ def _go_download_sdk_impl(ctx):
if not version:
highest_version = None
for v in sdks_by_version.keys():
- pv = _parse_version(v)
+ pv = parse_version(v)
if not pv or _version_is_prerelease(pv):
# skip parse errors and pre-release versions
continue
@@ -149,7 +149,7 @@ go_download_sdk_rule = repository_rule(
)
def _define_version_constants(version, prefix = ""):
- pv = _parse_version(version)
+ pv = parse_version(version)
if pv == None or len(pv) < 3:
fail("error parsing sdk version: " + version)
major, minor, patch = pv[0], pv[1], pv[2]
@@ -439,7 +439,7 @@ def _sdk_build_file(ctx, platform, version, experiments):
ctx.file("ROOT")
goos, _, goarch = platform.partition("_")
- pv = _parse_version(version)
+ pv = parse_version(version)
if pv != None and pv[1] >= 20:
# Turn off coverageredesign GOEXPERIMENT on 1.20+
# until rules_go is updated to work with the
@@ -541,7 +541,7 @@ def _detect_sdk_version(ctx, goroot):
version = output_parts[3][len("go"):]
else:
fail("Could not parse SDK version from '%s version' output: %s" % (go_binary_path, result.stdout))
- if _parse_version(version) == None:
+ if parse_version(version) == None:
fail("Could not parse SDK version from '%s version' output: %s" % (go_binary_path, result.stdout))
if ctx.attr.version and ctx.attr.version != version:
fail("SDK is version %s, but version %s was expected" % (version, ctx.attr.version))
@@ -573,7 +573,7 @@ def _parse_versions_json(data):
for sdk in sdks
}
-def _parse_version(version):
+def parse_version(version):
"""Parses a version string like "1.15.5" and returns a tuple of numbers or None"""
l, r = 0, 0
parsed = []
@@ -654,7 +654,7 @@ def go_register_toolchains(version = None, nogo = None, go_version = None, exper
elif version == "host":
go_host_sdk(name = "go_sdk", experiments = experiments)
else:
- pv = _parse_version(version)
+ pv = parse_version(version)
if not pv:
fail('go_register_toolchains: version must be a string like "1.15.5" or "host"')
if _version_less(pv, MIN_SUPPORTED_VERSION):