Skip to content

Commit ddd07d3

Browse files
authored
Merge branch 'master' into msan_support
2 parents 54d0756 + 623f600 commit ddd07d3

File tree

3 files changed

+305
-299
lines changed

3 files changed

+305
-299
lines changed

README.rst

Lines changed: 6 additions & 298 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,20 @@ Go rules for Bazel_
99
.. _Build modes: go/modes.rst
1010
.. _Bzlmod: https://bazel.build/external/overview#bzlmod
1111
.. _Go with Bzlmod: docs/go/core/bzlmod.md
12+
.. _Go with WORKSPACE: docs/go/core/workspace.md
1213
.. _Core rules: docs/go/core/rules.md
1314
.. _Coverage: https://bazel.google.cn/docs/coverage
1415
.. _Dependencies: go/dependencies.rst
1516
.. _Deprecation schedule: https://github.com/bazelbuild/rules_go/wiki/Deprecation-schedule
1617
.. _Gopher Slack: https://invite.slack.golangbridge.org/
1718
.. _gopls integration: https://github.com/bazelbuild/rules_go/wiki/Editor-setup
1819
.. _Overriding dependencies: go/dependencies.rst#overriding-dependencies
19-
.. _Proto dependencies: go/dependencies.rst#proto-dependencies
2020
.. _Proto rules: proto/core.rst
2121
.. _Protocol buffers: proto/core.rst
2222
.. _Toolchains: go/toolchains.rst
2323
.. _Using rules_go on Windows: windows.rst
2424
.. _bazel-go-discuss: https://groups.google.com/forum/#!forum/bazel-go-discuss
2525
.. _configuration transition: https://docs.bazel.build/versions/master/skylark/lib/transition.html
26-
.. _gRPC dependencies: go/dependencies.rst#grpc-dependencies
2726
.. _gazelle update-repos: https://github.com/bazelbuild/bazel-gazelle#update-repos
2827
.. _gazelle: https://github.com/bazelbuild/bazel-gazelle
2928
.. _github.com/bazelbuild/bazel-gazelle: https://github.com/bazelbuild/bazel-gazelle
@@ -202,7 +201,6 @@ Contents
202201

203202
* `Overview`_
204203
* `Setup`_
205-
* `protobuf and gRPC`_
206204
* `FAQ`_
207205

208206
Documentation
@@ -306,302 +304,12 @@ Several additional tools need to be installed and configured.
306304
Initial project setup
307305
~~~~~~~~~~~~~~~~~~~~~
308306

309-
If you are using Bazel's new external dependency management system `Bzlmod`_,
310-
refer to the dedicated `Go with Bzlmod`_ guide instead.
307+
There are two ways to setup:
311308

312-
Create a file at the top of your repository named ``WORKSPACE``, and add the
313-
snippet below (or add to your existing ``WORKSPACE``). This tells Bazel to
314-
fetch rules_go and its dependencies. Bazel will download a recent supported
315-
Go toolchain and register it for use.
316-
317-
.. code:: bzl
318-
319-
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
320-
321-
http_archive(
322-
name = "io_bazel_rules_go",
323-
integrity = "sha256-M6zErg9wUC20uJPJ/B3Xqb+ZjCPn/yxFF3QdQEmpdvg=",
324-
urls = [
325-
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
326-
"https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
327-
],
328-
)
329-
330-
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
331-
332-
go_rules_dependencies()
333-
334-
go_register_toolchains(version = "1.23.1")
335-
336-
You can use rules_go at ``master`` by using `git_repository`_ instead of
337-
`http_archive`_ and pointing to a recent commit.
338-
339-
Add a file named ``BUILD.bazel`` in the root directory of your project.
340-
You'll need a build file in each directory with Go code, but you'll also need
341-
one in the root directory, even if your project doesn't have Go code there.
342-
For a "Hello, world" binary, the file should look like this:
343-
344-
.. code:: bzl
345-
346-
load("@io_bazel_rules_go//go:def.bzl", "go_binary")
347-
348-
go_binary(
349-
name = "hello",
350-
srcs = ["hello.go"],
351-
)
352-
353-
You can build this target with ``bazel build //:hello``.
354-
355-
Generating build files
356-
~~~~~~~~~~~~~~~~~~~~~~
357-
358-
If your project can be built with ``go build``, you can generate and update your
359-
build files automatically using gazelle_.
360-
361-
Add the ``bazel_gazelle`` repository and its dependencies to your
362-
``WORKSPACE``. It should look like this:
363-
364-
.. code:: bzl
365-
366-
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
367-
368-
http_archive(
369-
name = "io_bazel_rules_go",
370-
integrity = "sha256-M6zErg9wUC20uJPJ/B3Xqb+ZjCPn/yxFF3QdQEmpdvg=",
371-
urls = [
372-
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
373-
"https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
374-
],
375-
)
376-
377-
http_archive(
378-
name = "bazel_gazelle",
379-
integrity = "sha256-12v3pg/YsFBEQJDfooN6Tq+YKeEWVhjuNdzspcvfWNU=",
380-
urls = [
381-
"https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
382-
"https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
383-
],
384-
)
385-
386-
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
387-
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
388-
389-
go_rules_dependencies()
390-
391-
go_register_toolchains(version = "1.23.1")
392-
393-
gazelle_dependencies()
394-
395-
Add the code below to the ``BUILD.bazel`` file in your project's root directory.
396-
Replace the string after ``prefix`` with an import path prefix that matches your
397-
project. It should be the same as your module path, if you have a ``go.mod``
398-
file.
399-
400-
.. code:: bzl
401-
402-
load("@bazel_gazelle//:def.bzl", "gazelle")
403-
404-
# gazelle:prefix github.com/example/project
405-
gazelle(name = "gazelle")
406-
407-
This declares a ``gazelle`` binary rule, which you can run using the command
408-
below:
409-
410-
.. code:: bash
411-
412-
bazel run //:gazelle
413-
414-
This will generate a ``BUILD.bazel`` file with `go_library`_, `go_binary`_, and
415-
`go_test`_ targets for each package in your project. You can run the same
416-
command in the future to update existing build files with new source files,
417-
dependencies, and options.
418-
419-
Writing build files by hand
420-
~~~~~~~~~~~~~~~~~~~~~~~~~~~
421-
422-
If your project doesn't follow ``go build`` conventions or you prefer not to use
423-
gazelle_, you can write build files by hand.
424-
425-
In each directory that contains Go code, create a file named ``BUILD.bazel``
426-
Add a ``load`` statement at the top of the file for the rules you use.
427-
428-
.. code:: bzl
429-
430-
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
431-
432-
For each library, add a `go_library`_ rule like the one below. Source files are
433-
listed in the ``srcs`` attribute. Imported packages outside the standard library
434-
are listed in the ``deps`` attribute using `Bazel labels`_ that refer to
435-
corresponding `go_library`_ rules. The library's import path must be specified
436-
with the ``importpath`` attribute.
437-
438-
.. code:: bzl
439-
440-
go_library(
441-
name = "foo_library",
442-
srcs = [
443-
"a.go",
444-
"b.go",
445-
],
446-
importpath = "github.com/example/project/foo",
447-
deps = [
448-
"//tools",
449-
"@org_golang_x_utils//stuff",
450-
],
451-
visibility = ["//visibility:public"],
452-
)
453-
454-
For tests, add a `go_test`_ rule like the one below. The library being tested
455-
should be listed in an ``embed`` attribute.
456-
457-
.. code:: bzl
458-
459-
go_test(
460-
name = "foo_test",
461-
srcs = [
462-
"a_test.go",
463-
"b_test.go",
464-
],
465-
embed = [":foo_lib"],
466-
deps = [
467-
"//testtools",
468-
"@org_golang_x_utils//morestuff",
469-
],
470-
)
471-
472-
For binaries, add a `go_binary`_ rule like the one below.
473-
474-
.. code:: bzl
475-
476-
go_binary(
477-
name = "foo",
478-
srcs = ["main.go"],
479-
)
480-
481-
Adding external repositories
482-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
483-
484-
For each Go repository, add a `go_repository`_ rule to ``WORKSPACE`` like the
485-
one below. This rule comes from the Gazelle repository, so you will need to
486-
load it. `gazelle update-repos`_ can generate or update these rules
487-
automatically from a go.mod or Gopkg.lock file.
488-
489-
.. code:: bzl
490-
491-
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
492-
493-
# Download the Go rules.
494-
http_archive(
495-
name = "io_bazel_rules_go",
496-
integrity = "sha256-M6zErg9wUC20uJPJ/B3Xqb+ZjCPn/yxFF3QdQEmpdvg=",
497-
urls = [
498-
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
499-
"https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
500-
],
501-
)
502-
503-
# Download Gazelle.
504-
http_archive(
505-
name = "bazel_gazelle",
506-
integrity = "sha256-12v3pg/YsFBEQJDfooN6Tq+YKeEWVhjuNdzspcvfWNU=",
507-
urls = [
508-
"https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
509-
"https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
510-
],
511-
)
512-
513-
# Load macros and repository rules.
514-
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
515-
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
516-
517-
# Declare Go direct dependencies.
518-
go_repository(
519-
name = "org_golang_x_net",
520-
importpath = "golang.org/x/net",
521-
sum = "h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=",
522-
version = "v0.23.0",
523-
)
524-
525-
# Declare indirect dependencies and register toolchains.
526-
go_rules_dependencies()
527-
528-
go_register_toolchains(version = "1.23.1")
529-
530-
gazelle_dependencies()
531-
532-
533-
protobuf and gRPC
534-
-----------------
535-
536-
To generate code from protocol buffers, you'll need to add a dependency on
537-
``com_google_protobuf`` to your ``WORKSPACE``.
538-
539-
.. code:: bzl
540-
541-
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
542-
543-
http_archive(
544-
name = "com_google_protobuf",
545-
sha256 = "535fbf566d372ccf3a097c374b26896fa044bf4232aef9cab37bd1cc1ba4e850",
546-
strip_prefix = "protobuf-3.15.0",
547-
urls = [
548-
"https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.15.0.tar.gz",
549-
"https://github.com/protocolbuffers/protobuf/archive/v3.15.0.tar.gz",
550-
],
551-
)
552-
553-
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
554-
555-
protobuf_deps()
556-
557-
You'll need a C/C++ toolchain registered for the execution platform (the
558-
platform where Bazel runs actions) to build protoc.
559-
560-
The `proto_library`_ rule is provided by the ``rules_proto`` repository.
561-
``protoc-gen-go``, the Go proto compiler plugin, is provided by the
562-
``com_github_golang_protobuf`` repository. Both are declared by
563-
`go_rules_dependencies`_. You won't need to declare an explicit dependency
564-
unless you specifically want to use a different version. See `Overriding
565-
dependencies`_ for instructions on using a different version.
566-
567-
gRPC dependencies are not declared by default (there are too many). You can
568-
declare them in WORKSPACE using `go_repository`_. You may want to use
569-
`gazelle update-repos`_ to import them from ``go.mod``.
570-
571-
See `Proto dependencies`_, `gRPC dependencies`_ for more information. See also
572-
`Avoiding conflicts`_.
573-
574-
Once all dependencies have been registered, you can declare `proto_library`_
575-
and `go_proto_library`_ rules to generate and compile Go code from .proto
576-
files.
577-
578-
.. code:: bzl
579-
580-
load("@rules_proto//proto:defs.bzl", "proto_library")
581-
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
582-
583-
proto_library(
584-
name = "foo_proto",
585-
srcs = ["foo.proto"],
586-
deps = ["//bar:bar_proto"],
587-
visibility = ["//visibility:public"],
588-
)
589-
590-
go_proto_library(
591-
name = "foo_go_proto",
592-
importpath = "github.com/example/protos/foo_proto",
593-
protos = [":foo_proto"],
594-
visibility = ["//visibility:public"],
595-
)
596-
597-
A ``go_proto_library`` target may be imported and depended on like a normal
598-
``go_library``.
599-
600-
Note that recent versions of rules_go support both APIv1
601-
(``github.com/golang/protobuf``) and APIv2 (``google.golang.org/protobuf``).
602-
By default, code is generated with
603-
``github.com/golang/protobuf/cmd/protoc-gen-gen`` for compatibility with both
604-
interfaces. Client code may import use either runtime library or both.
309+
* With Bazel's external dependency management system `Bzlmod`_,
310+
refer to the dedicated `Go with Bzlmod`_ guide.
311+
* With the older ``WORKSPACE`` dependency file, refer to the
312+
`Go with WORKSPACE`_ setup docs.
605313

606314
FAQ
607315
---

0 commit comments

Comments
 (0)