blob: 41a2dae857678d358a9fbaa3a70c54d7cf46e920 [file] [log] [blame]
# buildifier: disable=module-docstring
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
load("@bazel_skylib//lib:versions.bzl", "versions")
_MINIMUM_SUPPORTED_BAZEL_VERSION = "3.0.0"
def _bazel_version_impl(repository_ctx):
"""The implementation for the `bazel_version` rule
Args:
repository_ctx (repository_ctx): The repository rules context object
"""
bazel_version = versions.get()
if len(bazel_version) == 0:
# buildifier: disable=print
print("You're using development build of Bazel, make sure it's at least version {}".format(
_MINIMUM_SUPPORTED_BAZEL_VERSION,
))
elif not versions.is_at_least(_MINIMUM_SUPPORTED_BAZEL_VERSION, bazel_version):
fail("Bazel {} is too old to use with rules_rust, please use at least Bazel {}, preferably newer.".format(
bazel_version,
_MINIMUM_SUPPORTED_BAZEL_VERSION,
))
repository_ctx.file("BUILD.bazel", "exports_files(['def.bzl'])")
repository_ctx.file("def.bzl", "BAZEL_VERSION='" + bazel_version + "'")
bazel_version = repository_rule(
doc = (
"A repository rule that generates a new repository which contains a representation of " +
"the version of Bazel being used."
),
implementation = _bazel_version_impl,
)
def rust_workspace():
"""A helper macro for setting up requirements for `rules_rust` within a given workspace.
This macro should always loaded and invoked after `rust_repositories` within a WORKSPACE
file.
"""
bazel_skylib_workspace()
# Give this repository a scoped name to avoid conflicting with other
# projects' similar workarounds when used in the same workspace
# (issue #268#issuecomment-713920963). TODO(#462): Investigate
# whether this can be entirely replaced with `native.bazel_version`.
bazel_version(name = "io_bazel_rules_rust_bazel_version")