github bazelbuild/rules_go 0.7.0

latest releases: v0.47.0, v0.46.0, v0.45.1...
pre-release6 years ago

Improved cross-compilation

You can now cross-compile pure Go binaries (without cgo) for any platform that Go supports. For example:

bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:linux_s390x //:my_binary

Just change the platform target to any GOOS / GOARCH combination supported by the Go SDK.

There are still a few known issues. In particular, the current version of Bazel doesn't allow us to add .exe extensions to binary files on Windows. This will be fixed in Bazel 0.8, so we'll tag another release with that as the minimum supported version as soon as it's available.

Improved build mode support

You can now build static, race, msan, and tsan binaries using Bazel feature flags. For example:

bazel build --features=static,msan //:my_binary

You can also specify static and pure modes on go_binary rules using new attributes. This is useful if you have packaging rules that depend on binary rules built in specific configurations.

go_binary(
    name = "my_binary",
    ...,
    static = "on",
)

The old mechanism of using output groups to select build mode has been removed.

See build modes for more information.

Gazelle multi-platform support

Gazelle can generate build files that work on all platforms that Go supports. In order to avoid repetition, we've divided sources, dependencies, and options into separate OS-specific, arch-specific, and OS-and-arch-specific select expressions. For example:

go_library(
    name = "go_default_library",
    srcs = [
        "foo.go",
    ] + select({
        "@io_bazel_rules_go//go/platform:linux": [
            "foo_linux.go",
        ],
        "//conditions:default": [],
    }) + select({
        "@io_bazel_rules_go//go/platform:amd64": [
            "foo_amd64.go",
        ],
        "//conditions:default": [],
    }),
    importpath = "github.com/example/project",
    visibility = ["//visibility:public"],
)

This new functionality is off by default; you can try it out with the -experimental_platforms flag.

At this time, the config_setting rules in @io_bazel_rules_go//go/platform can only match the cpu value, which means we are limited to platforms where Bazel has a C++ toolchain. With Bazel 0.8, config_setting rules will be able to match constraint_values, which gives us much more flexibility. After that release, we'll remove the -experimental_platforms flag and turn on the new functionality.

WORKSPACE code

To use this release, add this code to your WORKSPACE file:

http_archive(
    name = "io_bazel_rules_go",
    url = "https://github.com/bazelbuild/rules_go/releases/download/0.7.0/rules_go-0.7.0.tar.gz",
    sha256 = "91fca9cf860a1476abdc185a5f675b641b60d3acf0596679a27b580af60bf19c",
)
load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains")
go_rules_dependencies()
go_register_toolchains()

Direct download: rules_go-0.7.0.tar.gz

Don't miss a new rules_go release

NewReleases is sending notifications on new releases.