# Copyright 2017 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. load( "//go/private:context.bzl", "go_context", ) load( "//go/private:go_toolchain.bzl", "GO_TOOLCHAIN", ) load( "//go/private:providers.bzl", "GoLibrary", ) def _go_source_impl(ctx): """Implements the go_source() rule.""" go = go_context(ctx) library = go.new_library(go) source = go.library_to_source(go, ctx.attr, library, ctx.coverage_instrumented()) return [ library, source, DefaultInfo( files = depset(source.srcs), ), ] go_source = rule( implementation = _go_source_impl, attrs = { "data": attr.label_list( allow_files = True, doc = """List of files needed by this rule at run-time. This may include data files needed or other programs that may be executed. The [bazel] package may be used to locate run files; they may appear in different places depending on the operating system and environment. See [data dependencies] for more information on data files. """, ), "srcs": attr.label_list( allow_files = True, doc = """The list of Go source files that are compiled to create the package. The following file types are permitted: `.go, .c, .s, .S .h`. The files may contain Go-style [build constraints]. """, ), "deps": attr.label_list( providers = [GoLibrary], doc = """List of Go libraries this source list imports directly. These may be go_library rules or compatible rules with the [GoLibrary] provider. """, ), "embed": attr.label_list( providers = [GoLibrary], doc = """List of Go libraries whose sources should be compiled together with this package's sources. Labels listed here must name `go_library`, `go_proto_library`, or other compatible targets with the [GoLibrary] and [GoSource] providers. Embedded libraries must have the same `importpath` as the embedding library. At most one embedded library may have `cgo = True`, and the embedding library may not also have `cgo = True`. See [Embedding] for more information. """, ), "gc_goopts": attr.string_list( doc = """List of flags to add to the Go compilation command when using the gc compiler. Subject to ["Make variable"] substitution and [Bourne shell tokenization]. """, ), "_go_config": attr.label(default = "//:go_config"), "_cgo_context_data": attr.label(default = "//:cgo_context_data_proxy"), }, toolchains = [GO_TOOLCHAIN], doc = """This declares a set of source files and related dependencies that can be embedded into one of the other rules. This is used as a way of easily declaring a common set of sources re-used in multiple rules.

**Providers:** """, ) # See docs/go/core/rules.md#go_source for full documentation.