Bazel go binary: Difference between revisions
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
=External= | |||
* https://github.com/bazel-contrib/rules_go/blob/master/docs/go/core/rules.md#go_binary | |||
=Internal= | =Internal= | ||
* [[Bazel_BUILD_Files#go_binary|BUILD Files]] | * [[Bazel_BUILD_Files#go_binary|BUILD Files]] |
Latest revision as of 06:58, 23 November 2024
External
Internal
Overview
go_binary
builds a single main
package and links it into an executable. It may embed the content of a go_library
, using the embed
attribute. Embedded sources are compiled together in the same package. binaries can be built for alternative platforms and configurations by setting goos
, goarch
and other attributes.
Example
load("//meta/rules:go.bzl", "go_binary", "go_library")
go_library(
name = "lib",
srcs = [
"aux.go",
"main.go",
],
visibility = ["//visibility:private"],
)
go_binary(
name = "somebin",
embed = [":lib"],
visibility = ["//visibility:public"],
)
To build the binary:
bazel build //somedir/someotherdir/some_bazel_package:somebin
To run the binary:
bazel run //somedir/someotherdir/some_bazel_package:somebin
To add dependencies, see:
A More Complex Example
load("//meta/rules:go.bzl", "go_library", "go_binary")
go_library(
name = "somepkg_lib",
srcs = [
"file1.go",
"file2.go",
],
importpath = "github.com/someorg/somemodule/pkg/somepkg",
visibility = ["//visibility:private"],
deps = [
"//lib/a",
"//lib/b",
...
"@com_github_blang_semver//:semver",
],
)
go_binary(
name = "somebin",
embed = [":somepkg_lib"],
visibility = ["//visibility:public"],
x_defs = {"github.com/someorg/somemodule/version.Version": "{BUILD_VERSION}"},
)
To add dependencies, see: