blob: f063fb2508c7994a32d9ef81d54c2de10e62ba44 [file] [log] [blame]
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
load(
"//rust:defs.bzl",
"capture_clippy_output",
"clippy_flag",
"clippy_flags",
"error_format",
"extra_exec_rustc_flag",
"extra_exec_rustc_flags",
"extra_rustc_flag",
"extra_rustc_flags",
"no_std",
"per_crate_rustc_flag",
"rustc_output_diagnostics",
)
load("//rust/private:unpretty.bzl", "rust_unpretty_flag")
load(":incompatible.bzl", "incompatible_flag")
exports_files([
".clippy.toml",
".rustfmt.toml",
])
bzl_library(
name = "bzl_lib",
srcs = glob(["**/*.bzl"]),
visibility = ["//visibility:public"],
)
rust_unpretty_flag(
name = "unpretty",
build_setting_default = [
"ast-tree,expanded",
"ast-tree",
"expanded,hygiene",
"expanded,identified",
"expanded",
"hir-tree",
"hir,identified",
"hir,typed",
"hir",
"identified",
"mir-cfg",
"mir",
"normal",
],
visibility = ["//visibility:public"],
)
# A flag controlling whether to rename first-party crates such that their names
# encode the Bazel package and target name, instead of just the target name.
#
# First-party vs. third-party crates are identified using the value of
# //settings:third_party_dir.
bool_flag(
name = "rename_first_party_crates",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# A flag specifying the location of vendored third-party rust crates within this
# repository that must not be renamed when `rename_first_party_crates` is enabled.
#
# Must be specified as a Bazel package, e.g. "//some/location/in/repo".
string_flag(
name = "third_party_dir",
build_setting_default = "//third_party/rust",
visibility = ["//visibility:public"],
)
# A flag to control whether rust_library and rust_binary targets should
# implicitly depend on the *real* import macro, or on a no-op target.
bool_flag(
name = "use_real_import_macro",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# When set, this flag causes rustc to emit .rmeta files and use them for rlib -> rlib dependencies.
# While this involves one extra (short) rustc invocation to build the rmeta file,
# it allows library dependencies to be unlocked much sooner, increasing parallelism during compilation.
bool_flag(
name = "pipelined_compilation",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# A flag to control whether to link rust_binary and rust_test targets using
# cc_common.link instead of rustc.
bool_flag(
name = "experimental_use_cc_common_link",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# A flag to indicate that a global allocator is in use when using --@rules_rust//rust/settings:experimental_use_cc_common_link
# Users need to specify this flag because rustc generates different set of symbols at link time when a global allocator is in use.
# When the linking is not done by rustc, the `rust_toolchain` itself provides the appropriate set of symbols.
bool_flag(
name = "experimental_use_global_allocator",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# A flag to have coverage tooling added as `coverage_common.instrumented_files_info.metadata_files` instead of
# reporting tools like `llvm-cov` and `llvm-profdata` as runfiles to each test.
bool_flag(
name = "experimental_use_coverage_metadata_files",
build_setting_default = True,
visibility = ["//visibility:public"],
)
# A flag to set rustc --sysroot flag to the sysroot generated by rust_toolchain.
bool_flag(
name = "toolchain_generated_sysroot",
build_setting_default = True,
visibility = ["//visibility:public"],
)
# A flag to put rust_test compilation outputs in the same directory as the rust_library compilation outputs.
incompatible_flag(
name = "incompatible_change_rust_test_compilation_output_directory",
build_setting_default = False,
issue = "https://github.com/bazelbuild/rules_rust/issues/2827",
visibility = ["//visibility:public"],
)
# A flag to control whether to link libstd dynamically.
bool_flag(
name = "experimental_link_std_dylib",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# A flag to control whether the shell path from a shell toolchain (`@bazel_tools//tools/sh:toolchain_type`)
# is embedded into the bootstrap process wrapper for the `.sh` file.
bool_flag(
name = "experimental_use_sh_toolchain_for_bootstrap_process_wrapper",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# This setting is used by the clippy rules. See https://bazelbuild.github.io/rules_rust/rust_clippy.html
label_flag(
name = "clippy.toml",
build_setting_default = ".clippy.toml",
visibility = ["//visibility:public"],
)
# This setting is used by the rustfmt rules. See https://bazelbuild.github.io/rules_rust/rust_fmt.html
label_flag(
name = "rustfmt.toml",
build_setting_default = ".rustfmt.toml",
visibility = ["//visibility:public"],
)
capture_clippy_output(
name = "capture_clippy_output",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# This setting may be used to enable builds without the standard library.
# Currently only no_std + alloc is supported, which can be enabled with setting the value to "alloc".
# In the future we could add support for additional modes, e.g "core", "alloc,collections".
string_flag(
name = "no_std",
build_setting_default = "off",
values = [
"alloc",
"off",
],
visibility = ["//visibility:public"],
)
# A hack target to allow as to only apply the no_std mode in target config.
no_std(
name = "build_target_in_no_std",
)
# A config setting for setting conditional `cargo_features`, `deps`, based on the `:no_std` value.
config_setting(
name = "is_no_std",
flag_values = {
":build_target_in_no_std": "alloc",
},
visibility = ["//visibility:public"],
)
# This setting may be changed from the command line to generate machine readable errors.
error_format(
name = "error_format",
build_setting_default = "human",
visibility = ["//visibility:public"],
)
# This setting may be changed from the command line to generate rustc diagnostics.
rustc_output_diagnostics(
name = "rustc_output_diagnostics",
build_setting_default = False,
visibility = ["//visibility:public"],
)
# This setting may be used to pass extra options to clippy from the command line.
# It applies across all targets.
clippy_flags(
name = "clippy_flags",
build_setting_default = [],
visibility = ["//visibility:public"],
)
clippy_flag(
name = "clippy_flag",
build_setting_default = [],
visibility = ["//visibility:public"],
)
# This setting may be used to pass extra options to rustc from the command line
# in non-exec configuration.
# It applies across all targets whereas the rustc_flags option on targets applies only
# to that target. This can be useful for passing build-wide options such as LTO.
extra_rustc_flags(
name = "extra_rustc_flags",
build_setting_default = [],
visibility = ["//visibility:public"],
)
extra_rustc_flag(
name = "extra_rustc_flag",
build_setting_default = [],
visibility = ["//visibility:public"],
)
# This setting may be used to pass extra options to rustc from the command line
# in exec configuration.
# It applies across all targets whereas the rustc_flags option on targets applies only
# to that target. This can be useful for passing build-wide options such as LTO.
extra_exec_rustc_flags(
name = "extra_exec_rustc_flags",
build_setting_default = [],
visibility = ["//visibility:public"],
)
extra_exec_rustc_flag(
name = "extra_exec_rustc_flag",
build_setting_default = [],
visibility = ["//visibility:public"],
)
per_crate_rustc_flag(
name = "experimental_per_crate_rustc_flag",
build_setting_default = [],
visibility = ["//visibility:public"],
)