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