diff options
author | Fabian Meumertzheim <fabian@meumertzhe.im> | 2023-03-27 16:27:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-27 16:27:31 +0200 |
commit | 512a6e0f63857c131326052e868c0a019af65303 (patch) | |
tree | f0026659ae475deca348cc8e15e160a8d151f47f | |
parent | 2592d81c815cd7f2c63b7a53202b50e2ec1674cc (diff) | |
download | bazelbuild-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.bzl | 3 | ||||
-rw-r--r-- | go/tools/builders/stdlib.go | 5 | ||||
-rw-r--r-- | tests/core/stdlib/BUILD.bazel | 2 | ||||
-rw-r--r-- | tests/core/stdlib/buildid_test.go | 18 | ||||
-rw-r--r-- | tests/core/stdlib/stdlib_files.bzl | 18 |
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", |