1load(
2 "//go/private/tools:lines_sorted_test.bzl",
3 "lines_sorted_test",
4)
5load(
6 "//go/private/rules:nogo.bzl",
7 "nogo",
8)
9load(
10 "//go/private/rules:info.bzl",
11 "go_info",
12)
13load(
14 "//go:def.bzl",
15 "TOOLS_NOGO",
16)
17load(
18 "//go/private:context.bzl",
19 "cgo_context_data",
20 "cgo_context_data_proxy",
21 "go_config",
22 "go_context_data",
23)
24load(
25 "//go/private/rules:stdlib.bzl",
26 "stdlib",
27)
28
29# gazelle:prefix github.com/bazelbuild/rules_go
30# gazelle:exclude tests
31# gazelle:exclude third_party
32# gazelle:exclude go/tools/builders
33# gazelle:exclude go/tools/coverdata
34# gazelle:exclude go/tools/fetch_repo
35# gazelle:exclude go/tools/windows-testrunner
36# gazelle:go_naming_convention import_alias
37
38# TODO(jayconrod): add a gazelle rule so gazelle can be run automatically.
39# It can't go here though, because it would break anything that depends on
40# rules_go but not Gazelle, including our own go_bazel_tests.
41
42stdlib(
43 name = "stdlib",
44 cgo_context_data = select({
45 "//go/platform:internal_cgo_off": None,
46 "//conditions:default": ":cgo_context_data",
47 }),
48 visibility = ["//visibility:public"],
49)
50
51# default_nogo is the nogo target that nogo references by default. It
52# does not analyze anything, which means no binary is built or run
53# at compile time.
54filegroup(
55 name = "default_nogo",
56 visibility = ["//visibility:public"],
57)
58
59# tools_nogo includes all of the analysis passes in
60# golang.org/x/tools/go/analysis/passes.
61# This is not backward compatible, so use caution when depending on this --
62# new analyses may discover issues in existing builds.
63nogo(
64 name = "tools_nogo",
65 visibility = ["//visibility:public"],
66 deps = TOOLS_NOGO,
67)
68
69# go_context_data collects build options and is depended on by all Go targets.
70# It may depend on cgo_context_data if CGo isn't disabled.
71go_context_data(
72 name = "go_context_data",
73 cgo_context_data = select({
74 "//go/platform:internal_cgo_off": None,
75 "//conditions:default": ":cgo_context_data",
76 }),
77 coverdata = "//go/tools/coverdata",
78 go_config = ":go_config",
79 nogo = "@io_bazel_rules_nogo//:nogo",
80 stdlib = ":stdlib",
81 visibility = ["//visibility:public"],
82)
83
84# cgo_context_data collects information about the C/C++ toolchain.
85# go_context_data depends if cgo is enabled in the target configuration.
86cgo_context_data(
87 name = "cgo_context_data",
88 visibility = ["//visibility:private"],
89)
90
91# cgo_context_data_proxy depends on cgo_context_data if cgo is enabled and
92# forwards its provider. Rule attributes may depend on this, since they cannot
93# use select.
94cgo_context_data_proxy(
95 name = "cgo_context_data_proxy",
96 actual = select({
97 "//go/platform:internal_cgo_off": None,
98 "//conditions:default": ":cgo_context_data",
99 }),
100 visibility = ["//visibility:public"],
101)
102
103# go_config collects information about build settings in the current
104# configuration. go_context_data depends on this so that rules don't need
105# to depend on all build settings directly.
106go_config(
107 name = "go_config",
108 amd64 = select({
109 "//go/constraints/amd64:v2": "v2",
110 "//go/constraints/amd64:v3": "v3",
111 "//go/constraints/amd64:v4": "v4",
112 # The default is v1.
113 "//conditions:default": None,
114 }),
115 arm = select({
116 "//go/constraints/arm:5": "5",
117 "//go/constraints/arm:6": "6",
118 "//go/constraints/arm:7": "7",
119 "//conditions:default": None,
120 }),
121 cover_format = "//go/config:cover_format",
122 # Always include debug symbols with -c dbg.
123 debug = select({
124 "//go/private:is_compilation_mode_dbg": "//go/private:always_true",
125 "//conditions:default": "//go/config:debug",
126 }),
127 gc_goopts = "//go/config:gc_goopts",
128 gc_linkopts = "//go/config:gc_linkopts",
129 gotags = "//go/config:tags",
130 linkmode = "//go/config:linkmode",
131 msan = "//go/config:msan",
132 pgoprofile = "//go/config:pgoprofile",
133 pure = "//go/config:pure",
134 race = "//go/config:race",
135 stamp = select({
136 "//go/private:stamp": True,
137 "//conditions:default": False,
138 }),
139 static = "//go/config:static",
140 strip = select({
141 "//go/private:is_strip_always": True,
142 "//go/private:is_strip_sometimes_fastbuild": True,
143 "//conditions:default": False,
144 }),
145 visibility = ["//visibility:public"],
146)
147
148lines_sorted_test(
149 name = "contributors_sorted_test",
150 size = "small",
151 cmd = "grep -v '^#' $< | grep -v '^$$' >$@",
152 error_message = "Contributors must be sorted by first name",
153 file = "CONTRIBUTORS",
154)
155
156lines_sorted_test(
157 name = "authors_sorted_test",
158 size = "small",
159 cmd = "grep -v '^#' $< | grep -v '^$$' >$@",
160 error_message = "Authors must be sorted by first name",
161 file = "AUTHORS",
162)
163
164# AUTHORS is used as an anchor point for the directory in tests and the
165# license can be consumed by depending projects.
166exports_files([
167 "AUTHORS",
168 "LICENSE.txt",
169])
170
171go_info()
172
173filegroup(
174 name = "all_files",
175 testonly = True,
176 srcs = [
177 "BUILD.bazel",
178 "MODULE.bazel",
179 "WORKSPACE",
180 "go.mod",
181 "go.sum",
182 "//extras:all_files",
183 "//go:all_files",
184 "//proto:all_files",
185 "//third_party:all_files",
186 ],
187 visibility = ["//visibility:public"],
188)
View as plain text