...
1"""
2 ["Make variable"]: https://docs.bazel.build/versions/master/be/make-variables.html
3 [Bourne shell tokenization]: https://docs.bazel.build/versions/master/be/common-definitions.html#sh-tokenization
4 [Gazelle]: https://github.com/bazelbuild/bazel-gazelle
5 [GoArchive]: /go/providers.rst#GoArchive
6 [GoLibrary]: /go/providers.rst#GoLibrary
7 [GoPath]: /go/providers.rst#GoPath
8 [GoSource]: /go/providers.rst#GoSource
9 [build constraints]: https://golang.org/pkg/go/build/#hdr-Build_Constraints
10 [cc_library deps]: https://docs.bazel.build/versions/master/be/c-cpp.html#cc_library.deps
11 [cgo]: http://golang.org/cmd/cgo/
12 [config_setting]: https://docs.bazel.build/versions/master/be/general.html#config_setting
13 [data dependencies]: https://docs.bazel.build/versions/master/build-ref.html#data
14 [goarch]: /go/modes.rst#goarch
15 [goos]: /go/modes.rst#goos
16 [mode attributes]: /go/modes.rst#mode-attributes
17 [nogo]: /go/nogo.rst#nogo
18 [pure]: /go/modes.rst#pure
19 [race]: /go/modes.rst#race
20 [msan]: /go/modes.rst#msan
21 [select]: https://docs.bazel.build/versions/master/be/functions.html#select
22 [shard_count]: https://docs.bazel.build/versions/master/be/common-definitions.html#test.shard_count
23 [static]: /go/modes.rst#static
24 [test_arg]: https://docs.bazel.build/versions/master/user-manual.html#flag--test_arg
25 [test_filter]: https://docs.bazel.build/versions/master/user-manual.html#flag--test_filter
26 [test_env]: https://docs.bazel.build/versions/master/user-manual.html#flag--test_env
27 [test_runner_fail_fast]: https://docs.bazel.build/versions/master/command-line-reference.html#flag--test_runner_fail_fast
28 [write a CROSSTOOL file]: https://github.com/bazelbuild/bazel/wiki/Yet-Another-CROSSTOOL-Writing-Tutorial
29 [bazel]: https://pkg.go.dev/github.com/bazelbuild/rules_go/go/tools/bazel?tab=doc
30 [go_library]: #go_library
31 [go_binary]: #go_binary
32 [go_test]: #go_test
33 [go_path]: #go_path
34 [go_source]: #go_source
35 [go_test]: #go_test
36 [Examples]: examples.md#examples
37 [Defines and stamping]: defines_and_stamping.md#defines-and-stamping
38 [Stamping with the workspace status script]: defines_and_stamping.md#stamping-with-the-workspace-status-script
39 [Embedding]: embedding.md#embedding
40 [Cross compilation]: cross_compilation.md#cross-compilation
41 [Platform-specific dependencies]: platform-specific_dependencies.md#platform-specific-dependencies
42
43# Core Go rules
44
45These are the core go rules, required for basic operation. The intent is that these rules are
46sufficient to match the capabilities of the normal go tools.
47
48## Additional resources
49- ["Make variable"]
50- [Bourne shell tokenization]
51- [Gazelle]
52- [GoArchive]
53- [GoLibrary]
54- [GoPath]
55- [GoSource]
56- [build constraints]:
57- [cc_library deps]
58- [cgo]
59- [config_setting]
60- [data dependencies]
61- [goarch]
62- [goos]
63- [mode attributes]
64- [nogo]
65- [pure]
66- [race]
67- [msan]
68- [select]:
69- [shard_count]
70- [static]
71- [test_arg]
72- [test_filter]
73- [test_env]
74- [test_runner_fail_fast]
75- [write a CROSSTOOL file]
76- [bazel]
77
78
79------------------------------------------------------------------------
80
81Introduction
82------------
83
84Three core rules may be used to build most projects: [go_library], [go_binary],
85and [go_test]. These rules reimplement the low level plumping commands of a normal
86'go build' invocation: compiling package's source files to archives, then linking
87archives into go binary.
88
89[go_library] builds a single package. It has a list of source files
90(specified with `srcs`) and may depend on other packages (with `deps`).
91Each [go_library] has an `importpath`, which is the name used to import it
92in Go source files.
93
94[go_binary] also builds a single `main` package and links it into an
95executable. It may embed the content of a [go_library] using the `embed`
96attribute. Embedded sources are compiled together in the same package.
97Binaries can be built for alternative platforms and configurations by setting
98`goos`, `goarch`, and other attributes.
99
100[go_test] builds a test executable. Like tests produced by `go test`, this
101consists of three packages: an internal test package compiled together with
102the library being tested (specified with `embed`), an external test package
103compiled separately, and a generated test main package.
104
105Here is an example of a Bazel build graph for a project using these core rules:
106
107
108
109By instrumenting the lower level go tooling, we can cache smaller, finer
110artifacts with Bazel and thus, speed up incremental builds.
111
112Rules
113-----
114
115"""
116
117load("//go/private/rules:library.bzl", _go_library = "go_library")
118load("//go/private/rules:binary.bzl", _go_binary = "go_binary")
119load("//go/private/rules:test.bzl", _go_test = "go_test")
120load("//go/private/rules:source.bzl", _go_source = "go_source")
121load("//go/private/tools:path.bzl", _go_path = "go_path")
122load("//go/private/rules:cross.bzl", _go_cross_binary = "go_cross_binary")
123
124go_library = _go_library
125go_binary = _go_binary
126go_test = _go_test
127go_source = _go_source
128go_path = _go_path
129go_cross_binary = _go_cross_binary
View as plain text