aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Meumertzheim <fabian@meumertzhe.im>2023-03-27 16:27:31 +0200
committerGitHub <noreply@github.com>2023-03-27 16:27:31 +0200
commit512a6e0f63857c131326052e868c0a019af65303 (patch)
treef0026659ae475deca348cc8e15e160a8d151f47f
parent2592d81c815cd7f2c63b7a53202b50e2ec1674cc (diff)
downloadbazelbuild-rules_go-512a6e0f63857c131326052e868c0a019af65303.tar.gz
Only install `runtime/cgo` with `pure = False` (#3492)
We don't know why installing `runtime/cgo` even if cgo is disabled doesn't seem to break anything, so we shouldn't do it.
-rw-r--r--go/private/actions/stdlib.bzl3
-rw-r--r--go/tools/builders/stdlib.go5
-rw-r--r--tests/core/stdlib/BUILD.bazel2
-rw-r--r--tests/core/stdlib/buildid_test.go18
-rw-r--r--tests/core/stdlib/stdlib_files.bzl18
5 files changed, 24 insertions, 22 deletions
diff --git a/go/private/actions/stdlib.bzl b/go/private/actions/stdlib.bzl
index 11a8278f..f8bfbeef 100644
--- a/go/private/actions/stdlib.bzl
+++ b/go/private/actions/stdlib.bzl
@@ -82,6 +82,9 @@ def _build_stdlib(go):
if go.mode.race:
args.add("-race")
args.add_all(go.sdk.experiments, before_each = "-experiment")
+ args.add("-package", "std")
+ if not go.mode.pure:
+ args.add("-package", "runtime/cgo")
args.add_all(link_mode_args(go.mode))
env = go.env
if go.mode.pure:
diff --git a/go/tools/builders/stdlib.go b/go/tools/builders/stdlib.go
index 244388d0..ed92a976 100644
--- a/go/tools/builders/stdlib.go
+++ b/go/tools/builders/stdlib.go
@@ -33,6 +33,8 @@ func stdlib(args []string) error {
race := flags.Bool("race", false, "Build in race mode")
shared := flags.Bool("shared", false, "Build in shared mode")
dynlink := flags.Bool("dynlink", false, "Build in dynlink mode")
+ var packages multiFlag
+ flags.Var(&packages, "package", "Packages to build")
var experiments multiFlag
flags.Var(&experiments, "experiment", "Go experiments to enable via GOEXPERIMENT")
if err := flags.Parse(args); err != nil {
@@ -164,8 +166,7 @@ You may need to use the flags --cpu=x64_windows --compiler=mingw-gcc.`)
return fmt.Errorf("error modifying cgo environment to absolute path: %v", err)
}
- // TODO(#1885): don't install runtime/cgo in pure mode.
- installArgs = append(installArgs, "std", "runtime/cgo")
+ installArgs = append(installArgs, packages...)
if err := goenv.runCommand(installArgs); err != nil {
return err
}
diff --git a/tests/core/stdlib/BUILD.bazel b/tests/core/stdlib/BUILD.bazel
index ef99fe30..eed94654 100644
--- a/tests/core/stdlib/BUILD.bazel
+++ b/tests/core/stdlib/BUILD.bazel
@@ -5,7 +5,7 @@ go_test(
name = "buildid_test",
srcs = ["buildid_test.go"],
data = [":stdlib_files"],
- rundir = ".",
+ deps = ["//go/runfiles"],
)
stdlib_files(name = "stdlib_files")
diff --git a/tests/core/stdlib/buildid_test.go b/tests/core/stdlib/buildid_test.go
index 24beaf11..d95ba903 100644
--- a/tests/core/stdlib/buildid_test.go
+++ b/tests/core/stdlib/buildid_test.go
@@ -1,3 +1,4 @@
+//go:build go1.10
// +build go1.10
/* Copyright 2018 The Bazel Authors. All rights reserved.
@@ -24,6 +25,8 @@ import (
"os/exec"
"path/filepath"
"testing"
+
+ "github.com/bazelbuild/rules_go/go/runfiles"
)
func TestEmptyBuildID(t *testing.T) {
@@ -39,6 +42,10 @@ func TestEmptyBuildID(t *testing.T) {
"aes.a": "",
"cgo.a": "",
}
+ stdlibPkgDir, err := runfiles.Rlocation("io_bazel_rules_go/stdlib_/pkg")
+ if err != nil {
+ t.Fatal(err)
+ }
n := len(pkgPaths)
done := errors.New("done")
var visit filepath.WalkFunc
@@ -46,13 +53,6 @@ func TestEmptyBuildID(t *testing.T) {
if err != nil {
return err
}
- if (info.Mode() & os.ModeType) == os.ModeSymlink {
- path, err = filepath.EvalSymlinks(path)
- if err != nil {
- return err
- }
- return filepath.Walk(path, visit)
- }
if filepath.Base(path) == "buildid" && (info.Mode()&0111) != 0 {
buildidPath = path
}
@@ -67,9 +67,7 @@ func TestEmptyBuildID(t *testing.T) {
}
return nil
}
- if err := filepath.Walk(".", visit); err == nil {
- t.Fatal("could not locate stdlib ROOT file")
- } else if err != done {
+ if err = filepath.Walk(stdlibPkgDir, visit); err != nil && err != done {
t.Fatal(err)
}
if buildidPath == "" {
diff --git a/tests/core/stdlib/stdlib_files.bzl b/tests/core/stdlib/stdlib_files.bzl
index b0962af7..35d48f33 100644
--- a/tests/core/stdlib/stdlib_files.bzl
+++ b/tests/core/stdlib/stdlib_files.bzl
@@ -14,18 +14,18 @@
load("//go/private:providers.bzl", "GoStdLib")
-def _pure_transition_impl(settings, attr):
- return {"//go/config:pure": True}
+def _force_rebuild_transition_impl(settings, attr):
+ return {"//go/config:race": True}
-pure_transition = transition(
- implementation = _pure_transition_impl,
- inputs = ["//go/config:pure"],
- outputs = ["//go/config:pure"],
+force_rebuild_transition = transition(
+ implementation = _force_rebuild_transition_impl,
+ inputs = ["//go/config:race"],
+ outputs = ["//go/config:race"],
)
def _stdlib_files_impl(ctx):
- # When a transition is used, ctx.attr._stdlib is a list of Target instead
- # of a Target. Possibly a bug?
+ # When an outgoing transition (aka split transition) is used,
+ # ctx.attr._stdlib is a list of Target.
stdlib = ctx.attr._stdlib[0][GoStdLib]
libs = stdlib.libs
runfiles = ctx.runfiles(files = libs)
@@ -40,7 +40,7 @@ stdlib_files = rule(
"_stdlib": attr.label(
default = "@io_bazel_rules_go//:stdlib",
providers = [GoStdLib],
- cfg = pure_transition, # force recompilation
+ cfg = force_rebuild_transition,
),
"_allowlist_function_transition": attr.label(
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",