xref: /aosp_15_r20/external/bazelbuild-rules_go/go/private/rules/source.bzl (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1# Copyright 2017 The Bazel Authors. All rights reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#    http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15load(
16    "//go/private:context.bzl",
17    "go_context",
18)
19load(
20    "//go/private:go_toolchain.bzl",
21    "GO_TOOLCHAIN",
22)
23load(
24    "//go/private:providers.bzl",
25    "GoLibrary",
26)
27
28def _go_source_impl(ctx):
29    """Implements the go_source() rule."""
30    go = go_context(ctx)
31    library = go.new_library(go)
32    source = go.library_to_source(go, ctx.attr, library, ctx.coverage_instrumented())
33    return [
34        library,
35        source,
36        DefaultInfo(
37            files = depset(source.srcs),
38        ),
39    ]
40
41go_source = rule(
42    implementation = _go_source_impl,
43    attrs = {
44        "data": attr.label_list(
45            allow_files = True,
46            doc = """List of files needed by this rule at run-time. This may include data files
47            needed or other programs that may be executed. The [bazel] package may be
48            used to locate run files; they may appear in different places depending on the
49            operating system and environment. See [data dependencies] for more
50            information on data files.
51            """,
52        ),
53        "srcs": attr.label_list(
54            allow_files = True,
55            doc = """The list of Go source files that are compiled to create the package.
56            The following file types are permitted: `.go, .c, .s, .S .h`.
57            The files may contain Go-style [build constraints].
58            """,
59        ),
60        "deps": attr.label_list(
61            providers = [GoLibrary],
62            doc = """List of Go libraries this source list imports directly.
63            These may be go_library rules or compatible rules with the [GoLibrary] provider.
64            """,
65        ),
66        "embed": attr.label_list(
67            providers = [GoLibrary],
68            doc = """List of Go libraries whose sources should be compiled together with this
69            package's sources. Labels listed here must name `go_library`,
70            `go_proto_library`, or other compatible targets with the [GoLibrary] and
71            [GoSource] providers. Embedded libraries must have the same `importpath` as
72            the embedding library. At most one embedded library may have `cgo = True`,
73            and the embedding library may not also have `cgo = True`. See [Embedding]
74            for more information.
75            """,
76        ),
77        "gc_goopts": attr.string_list(
78            doc = """List of flags to add to the Go compilation command when using the gc compiler.
79            Subject to ["Make variable"] substitution and [Bourne shell tokenization].
80            """,
81        ),
82        "_go_config": attr.label(default = "//:go_config"),
83        "_cgo_context_data": attr.label(default = "//:cgo_context_data_proxy"),
84    },
85    toolchains = [GO_TOOLCHAIN],
86    doc = """This declares a set of source files and related dependencies that can be embedded into one of the
87    other rules.
88    This is used as a way of easily declaring a common set of sources re-used in multiple rules.<br><br>
89    **Providers:**
90    <ul>
91      <li>[GoLibrary]</li>
92      <li>[GoSource]</li>
93    </ul>
94    """,
95)
96# See docs/go/core/rules.md#go_source for full documentation.
97