Revert "Update `cargo_build_script` to work without runfiles support (#2871)" (#2885)
This reverts commit c520417e2659610c6314134dc407e39661092952. (#2871)
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index f4f0902..a08e71c 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -36,21 +36,6 @@
- "//..."
- "-//test/proto/..."
- "-//test/unit/pipelined_compilation/..."
-default_windows_no_runfiles_targets: &default_windows_no_runfiles_targets
- - "--" # Allows negative patterns; hack for https://github.com/bazelbuild/continuous-integration/pull/245
- - "//..."
- # TODO: https://github.com/bazelbuild/rules_rust/issues/1156
- - "-//crate_universe/..."
- - "-//test/chained_direct_deps:mod3_doc_test"
- - "-//test/out_dir_in_tests:demo_lib_doc_test"
- - "-//test/proto/..."
- - "-//test/rustc_env_files:output_test"
- - "-//test/test_env_launcher:test"
- - "-//test/test_env:test_manifest_dir"
- - "-//test/test_env:test_run"
- - "-//test/unit/pipelined_compilation/..."
- - "-//test/unit/rustdoc/..."
- - "-//tools/runfiles/..."
crate_universe_vendor_example_targets: &crate_universe_vendor_example_targets
- "//vendor_external:crates_vendor"
- "//vendor_local_manifests:crates_vendor"
@@ -73,7 +58,6 @@
- echo "build --//rust/settings:experimental_use_coverage_metadata_files" >> user.bazelrc
tasks:
ubuntu2004:
- platform: ubuntu2004
build_targets: *default_linux_targets
test_targets: *default_linux_targets
coverage_targets: *default_linux_targets
@@ -81,31 +65,19 @@
run_targets:
- //test:query_test_binary
rbe_ubuntu2004:
- platform: rbe_ubuntu2004
shell_commands:
- sed -i 's/^# load("@bazel_ci_rules/load("@bazel_ci_rules/' WORKSPACE.bazel
- sed -i 's/^# rbe_preconfig/rbe_preconfig/' WORKSPACE.bazel
build_targets: *default_linux_targets
test_targets: *default_linux_targets
macos:
- platform: macos
build_targets: *default_macos_targets
test_targets: *default_macos_targets
coverage_targets: *default_macos_targets
post_shell_commands: *coverage_validation_post_shell_commands
windows:
- platform: windows
build_targets: *default_windows_targets
test_targets: *default_windows_targets
- windows_no_runfiles:
- name: No Runfiles
- platform: windows
- build_flags:
- - "--noenable_runfiles"
- test_flags:
- - "--noenable_runfiles"
- build_targets: *default_windows_no_runfiles_targets
- test_targets: *default_windows_no_runfiles_targets
ubuntu2004_split_coverage_postprocessing:
name: Split Coverage Postprocessing
platform: ubuntu2004
@@ -199,19 +171,6 @@
- "--config=clippy"
build_targets: *default_windows_targets
test_targets: *default_windows_targets
- windows_no_runfiles_with_aspects:
- name: No Runfiles With Aspects
- platform: windows
- build_flags:
- - "--noenable_runfiles"
- - "--config=rustfmt"
- - "--config=clippy"
- test_flags:
- - "--noenable_runfiles"
- - "--config=rustfmt"
- - "--config=clippy"
- build_targets: *default_windows_no_runfiles_targets
- test_targets: *default_windows_no_runfiles_targets
windows_rolling_with_aspects:
name: "Windows Rolling Bazel Version With Aspects"
platform: windows
@@ -651,7 +610,7 @@
environment:
# This ndk version matches with rules_android_ndk repo's CI
# https://github.com/bazelbuild/rules_android_ndk/blob/877c68ef34c9f3353028bf490d269230c1990483/.bazelci/presubmit.yml#L37
- # The ndk is installed by this script
+ # The ndk is installed by this script
# https://github.com/bazelbuild/continuous-integration/blob/ba56013373821feadd9f2eaa6b81eb19528795f0/macos/mac-android.sh
ANDROID_NDK_HOME: /opt/android-ndk-r25b
android_examples_macos:
@@ -666,7 +625,7 @@
environment:
# This ndk version matches with rules_android_ndk repo's CI
# https://github.com/bazelbuild/rules_android_ndk/blob/877c68ef34c9f3353028bf490d269230c1990483/.bazelci/presubmit.yml#L42
- # The ndk is installed by this script
+ # The ndk is installed by this script
# https://github.com/bazelbuild/continuous-integration/blob/ba56013373821feadd9f2eaa6b81eb19528795f0/macos/mac-android.sh
ANDROID_NDK_HOME: /Users/buildkite/android-ndk-r25b
ios_examples:
diff --git a/cargo/cargo_build_script_runner/lib.rs b/cargo/cargo_build_script_runner/lib.rs
index 201e901..3739a17 100644
--- a/cargo/cargo_build_script_runner/lib.rs
+++ b/cargo/cargo_build_script_runner/lib.rs
@@ -124,9 +124,7 @@
pub fn outputs_from_command(
cmd: &mut Command,
) -> Result<(Vec<BuildScriptOutput>, Output), Output> {
- let child_output = cmd
- .output()
- .unwrap_or_else(|e| panic!("Unable to start command:\n{:?}\n{:#?}", e, cmd));
+ let child_output = cmd.output().expect("Unable to start binary");
if child_output.status.success() {
let reader = BufReader::new(child_output.stdout.as_slice());
let output = Self::outputs_from_reader(reader);
diff --git a/cargo/private/BUILD.bazel b/cargo/private/BUILD.bazel
index 2b7e6de..6a1aab6 100644
--- a/cargo/private/BUILD.bazel
+++ b/cargo/private/BUILD.bazel
@@ -1,13 +1,7 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load(":runfiles_enabled.bzl", "runfiles_enabled_build_setting")
bzl_library(
name = "bzl_lib",
srcs = glob(["**/*.bzl"]),
visibility = ["//:__subpackages__"],
)
-
-runfiles_enabled_build_setting(
- name = "runfiles_enabled",
- visibility = ["//visibility:public"],
-)
diff --git a/cargo/private/cargo_build_script.bzl b/cargo/private/cargo_build_script.bzl
index 8d08395..56f6499 100644
--- a/cargo/private/cargo_build_script.bzl
+++ b/cargo/private/cargo_build_script.bzl
@@ -23,7 +23,6 @@
"find_toolchain",
_name_to_crate_name = "name_to_crate_name",
)
-load(":runfiles_enabled.bzl", "is_runfiles_enabled", "runfiles_enabled_attr")
# Reexport for cargo_build_script_wrapper.bzl
name_to_crate_name = _name_to_crate_name
@@ -199,39 +198,6 @@
return default
-def _rlocationpath(file, workspace_name):
- if file.short_path.startswith("../"):
- return file.short_path[len("../"):]
-
- return "{}/{}".format(workspace_name, file.short_path)
-
-def _create_runfiles_dir(ctx, script):
- runfiles_dir = ctx.actions.declare_directory("{}.cargo_runfiles".format(ctx.label.name))
-
- workspace_name = ctx.label.workspace_name
- if not workspace_name:
- workspace_name = ctx.workspace_name
-
- def _runfiles_map(file):
- return "{}={}".format(file.path, _rlocationpath(file, workspace_name))
-
- runfiles = script[DefaultInfo].default_runfiles
-
- args = ctx.actions.args()
- args.use_param_file("@%s", use_always = True)
- args.add(runfiles_dir.path)
- args.add_all(runfiles.files, map_each = _runfiles_map, allow_closure = True)
-
- ctx.actions.run(
- mnemonic = "CargoBuildScriptRunfilesDir",
- executable = ctx.executable._runfiles_maker,
- arguments = [args],
- inputs = runfiles.files,
- outputs = [runfiles_dir],
- )
-
- return runfiles_dir
-
def _cargo_build_script_impl(ctx):
"""The implementation for the `cargo_build_script` rule.
@@ -242,7 +208,6 @@
list: A list containing a BuildInfo provider
"""
script = ctx.executable.script
- script_info = ctx.attr.script[CargoBuildScriptRunfilesInfo]
toolchain = find_toolchain(ctx)
out_dir = ctx.actions.declare_directory(ctx.label.name + ".out_dir")
env_out = ctx.actions.declare_file(ctx.label.name + ".env")
@@ -250,27 +215,9 @@
flags_out = ctx.actions.declare_file(ctx.label.name + ".flags")
link_flags = ctx.actions.declare_file(ctx.label.name + ".linkflags")
link_search_paths = ctx.actions.declare_file(ctx.label.name + ".linksearchpaths") # rustc-link-search, propagated from transitive dependencies
+ manifest_dir = "%s.runfiles/%s/%s" % (script.path, ctx.label.workspace_name or ctx.workspace_name, ctx.label.package)
compilation_mode_opt_level = get_compilation_mode_opts(ctx, toolchain).opt_level
- script_tools = []
- script_data = []
- for target in script_info.data:
- script_data.append(target[DefaultInfo].files)
- script_data.append(target[DefaultInfo].default_runfiles.files)
- for target in script_info.tools:
- script_tools.append(target[DefaultInfo].files)
- script_tools.append(target[DefaultInfo].default_runfiles.files)
-
- workspace_name = ctx.label.workspace_name
- if not workspace_name:
- workspace_name = ctx.workspace_name
-
- manifest_dir = "{}.runfiles/{}/{}".format(script.path, workspace_name, ctx.label.package)
- if not is_runfiles_enabled(ctx.attr):
- runfiles_dir = _create_runfiles_dir(ctx, ctx.attr.script)
- script_data.append(depset([runfiles_dir]))
- manifest_dir = "{}/{}/{}".format(runfiles_dir.path, workspace_name, ctx.label.package)
-
streams = struct(
stdout = ctx.actions.declare_file(ctx.label.name + ".stdout.log"),
stderr = ctx.actions.declare_file(ctx.label.name + ".stderr.log"),
@@ -384,6 +331,8 @@
variables = getattr(target[platform_common.TemplateVariableInfo], "variables", depset([]))
env.update(variables)
+ script_info = ctx.attr.script[CargoBuildScriptRunfilesInfo]
+
_merge_env_dict(env, expand_dict_value_locations(
ctx,
ctx.attr.build_script_env,
@@ -394,6 +343,15 @@
script_info.tools,
))
+ script_tools = []
+ script_data = []
+ for target in script_info.data:
+ script_data.append(target[DefaultInfo].files)
+ script_data.append(target[DefaultInfo].default_runfiles.files)
+ for target in script_info.tools:
+ script_tools.append(target[DefaultInfo].files)
+ script_tools.append(target[DefaultInfo].default_runfiles.files)
+
tools = depset(
direct = [
script,
@@ -421,7 +379,6 @@
args.add(ctx.attr.rundir)
build_script_inputs = []
-
for dep in ctx.attr.link_deps:
if rust_common.dep_info in dep and dep[rust_common.dep_info].dep_env:
dep_env_file = dep[rust_common.dep_info].dep_env
@@ -563,12 +520,7 @@
"_experimental_symlink_execroot": attr.label(
default = Label("//cargo/settings:experimental_symlink_execroot"),
),
- "_runfiles_maker": attr.label(
- cfg = "exec",
- executable = True,
- default = Label("//cargo/private/runfiles_maker"),
- ),
- } | runfiles_enabled_attr(),
+ },
fragments = ["cpp"],
toolchains = [
str(Label("//rust:toolchain_type")),
diff --git a/cargo/private/runfiles_enabled.bzl b/cargo/private/runfiles_enabled.bzl
deleted file mode 100644
index 27138cf..0000000
--- a/cargo/private/runfiles_enabled.bzl
+++ /dev/null
@@ -1,167 +0,0 @@
-"""A small utility module dedicated to detecting whether or not the `--enable_runfiles` and `--windows_enable_symlinks` flag are enabled
-"""
-
-load("@bazel_skylib//lib:selects.bzl", "selects")
-load("@bazel_skylib//rules:common_settings.bzl", "bool_setting")
-
-RunfilesEnabledInfo = provider(
- doc = "A singleton provider that contains the raw value of a build setting",
- fields = {
- "value": "The value of the build setting in the current configuration. " +
- "This value may come from the command line or an upstream transition, " +
- "or else it will be the build setting's default.",
- },
-)
-
-def _runfiles_enabled_setting_impl(ctx):
- return RunfilesEnabledInfo(value = ctx.attr.value)
-
-runfiles_enabled_setting = rule(
- implementation = _runfiles_enabled_setting_impl,
- doc = "A bool-typed build setting that cannot be set on the command line",
- attrs = {
- "value": attr.bool(
- doc = "A boolean value",
- mandatory = True,
- ),
- },
-)
-
-_RUNFILES_ENABLED_ATTR_NAME = "_runfiles_enabled"
-
-def runfiles_enabled_attr(default = Label("//cargo/private:runfiles_enabled")):
- return {
- _RUNFILES_ENABLED_ATTR_NAME: attr.label(
- doc = "A flag representing whether or not runfiles are enabled.",
- providers = [RunfilesEnabledInfo],
- default = default,
- cfg = "exec",
- ),
- }
-
-def runfiles_enabled_build_setting(name, **kwargs):
- """Define a build setting identifying if runfiles are enabled.
-
- Args:
- name (str): The name of the build setting
- **kwargs: Additional keyword arguments for the target.
- """
- native.config_setting(
- name = "{}__enable_runfiles".format(name),
- values = {"enable_runfiles": "true"},
- )
-
- native.config_setting(
- name = "{}__disable_runfiles".format(name),
- values = {"enable_runfiles": "false"},
- )
-
- bool_setting(
- name = "{}__always_true".format(name),
- build_setting_default = True,
- )
-
- native.config_setting(
- name = "{}__always_true_setting".format(name),
- flag_values = {":{}__always_true".format(name): "True"},
- )
-
- native.config_setting(
- name = "{}__always_false_setting".format(name),
- flag_values = {":{}__always_true".format(name): "False"},
- )
-
- # There is no way to query a setting that is unset. By utilizing constant
- # settings, we can filter to a fallback setting where no known value is
- # defined.
- native.alias(
- name = "{}__unset_runfiles".format(name),
- actual = select({
- ":{}__disable_runfiles".format(name): ":{}__always_false_setting".format(name),
- ":{}__enable_runfiles".format(name): ":{}__always_false_setting".format(name),
- "//conditions:default": ":{}__always_true_setting".format(name),
- }),
- )
-
- selects.config_setting_group(
- name = "{}__windows_enable_runfiles".format(name),
- match_all = [
- ":{}__enable_runfiles".format(name),
- "@platforms//os:windows",
- ],
- )
-
- selects.config_setting_group(
- name = "{}__windows_disable_runfiles".format(name),
- match_all = [
- ":{}__disable_runfiles".format(name),
- "@platforms//os:windows",
- ],
- )
-
- selects.config_setting_group(
- name = "{}__windows_unset_runfiles".format(name),
- match_all = [
- ":{}__unset_runfiles".format(name),
- "@platforms//os:windows",
- ],
- )
-
- native.alias(
- name = "{}__unix".format(name),
- actual = select({
- "@platforms//os:windows": ":{}__always_false_setting".format(name),
- "//conditions:default": ":{}__always_true_setting".format(name),
- }),
- )
-
- selects.config_setting_group(
- name = "{}__unix_enable_runfiles".format(name),
- match_all = [
- ":{}__enable_runfiles".format(name),
- ":{}__unix".format(name),
- ],
- )
-
- selects.config_setting_group(
- name = "{}__unix_disable_runfiles".format(name),
- match_all = [
- ":{}__disable_runfiles".format(name),
- ":{}__unix".format(name),
- ],
- )
-
- selects.config_setting_group(
- name = "{}__unix_unset_runfiles".format(name),
- match_all = [
- ":{}__unset_runfiles".format(name),
- ":{}__unix".format(name),
- ],
- )
-
- runfiles_enabled_setting(
- name = name,
- value = select({
- ":{}__windows_enable_runfiles".format(name): True,
- ":{}__windows_disable_runfiles".format(name): False,
- ":{}__windows_unset_runfiles".format(name): False,
- ":{}__unix_enable_runfiles".format(name): True,
- ":{}__unix_disable_runfiles".format(name): False,
- ":{}__unix_unset_runfiles".format(name): True,
- "//conditions:default": True,
- }),
- **kwargs
- )
-
-def is_runfiles_enabled(attr):
- """Determine whether or not runfiles are enabled.
-
- Args:
- attr (struct): A rule's struct of attributes (`ctx.attr`)
- Returns:
- bool: The enable_runfiles value.
- """
-
- runfiles_enabled = getattr(attr, _RUNFILES_ENABLED_ATTR_NAME, None)
-
- return runfiles_enabled[RunfilesEnabledInfo].value if runfiles_enabled else True
diff --git a/cargo/private/runfiles_maker/BUILD.bazel b/cargo/private/runfiles_maker/BUILD.bazel
deleted file mode 100644
index 3b3df76..0000000
--- a/cargo/private/runfiles_maker/BUILD.bazel
+++ /dev/null
@@ -1,8 +0,0 @@
-load("//rust:defs.bzl", "rust_binary")
-
-rust_binary(
- name = "runfiles_maker",
- srcs = ["runfiles_maker.rs"],
- edition = "2021",
- visibility = ["//visibility:public"],
-)
diff --git a/cargo/private/runfiles_maker/runfiles_maker.rs b/cargo/private/runfiles_maker/runfiles_maker.rs
deleted file mode 100644
index 9dea797..0000000
--- a/cargo/private/runfiles_maker/runfiles_maker.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-//! A tool for building runfiles directories for Bazel environments that don't
-//! support runfiles or have runfiles enabled.
-
-use std::collections::BTreeMap;
-use std::path::PathBuf;
-
-struct Args {
- pub output_dir: PathBuf,
- pub runfiles: BTreeMap<PathBuf, PathBuf>,
-}
-
-impl Args {
- fn parse() -> Self {
- let args_file = std::env::args().nth(1).expect("No args file was passed.");
-
- let content = std::fs::read_to_string(
- args_file
- .strip_prefix('@')
- .expect("Param files should start with @"),
- )
- .unwrap();
- let mut args = content.lines();
-
- let output_dir = PathBuf::from(
- args.next()
- .unwrap_or_else(|| panic!("Not enough arguments provided.")),
- );
- let runfiles = args
- .map(|s| {
- let s = if s.starts_with('\'') && s.ends_with('\'') {
- s.trim_matches('\'')
- } else {
- s
- };
- let (src, dest) = s
- .split_once('=')
- .unwrap_or_else(|| panic!("Unexpected runfiles argument: {}", s));
- (PathBuf::from(src), PathBuf::from(dest))
- })
- .collect::<BTreeMap<_, _>>();
-
- assert!(!runfiles.is_empty(), "No runfiles found");
-
- Args {
- output_dir,
- runfiles,
- }
- }
-}
-
-fn main() {
- let args = Args::parse();
-
- for (src, dest) in args.runfiles.iter() {
- let out_dest = args.output_dir.join(dest);
- std::fs::create_dir_all(
- out_dest
- .parent()
- .expect("The output location should have a valid parent."),
- )
- .expect("Failed to create output directory");
- std::fs::copy(src, &out_dest).unwrap_or_else(|e| {
- panic!(
- "Failed to copy file {} -> {}\n{:?}",
- src.display(),
- out_dest.display(),
- e
- )
- });
- }
-}
diff --git a/docs/src/index.md b/docs/src/index.md
index 53ee5cb..1045dca 100644
--- a/docs/src/index.md
+++ b/docs/src/index.md
@@ -20,7 +20,7 @@
To use `rules_rust` in a project using bzlmod, add the following to your `MODULE.bazel` file:
```python
-bazel_dep(name = "rules_rust", version = "0.50.1")
+bazel_dep(name = "rules_rust", version = "0.48.0")
```
Don't forget to substitute in your desired release's version number.
@@ -36,8 +36,8 @@
# https://github.com/bazelbuild/rules_rust/releases
http_archive(
name = "rules_rust",
- integrity = "sha256-Log/YgrGjboS4tCqQPBA58VPyFcnCn/IZm+xxKTZrn0=",
- urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.50.1/rules_rust-v0.50.1.tar.gz"],
+ integrity = "sha256-Weev1uz2QztBlDA88JX6A1N72SucD1V8lBsaliM0TTg=",
+ urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.48.0/rules_rust-v0.48.0.tar.gz"],
)
load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")
@@ -57,7 +57,7 @@
rust_register_toolchains(
edition = "2021",
versions = [
- "1.79.0",
+ "1.79.0"
],
)
```
diff --git a/examples/crate_universe/cargo_aliases/.bazelrc b/examples/crate_universe/cargo_aliases/.bazelrc
new file mode 100644
index 0000000..a67f1ba
--- /dev/null
+++ b/examples/crate_universe/cargo_aliases/.bazelrc
@@ -0,0 +1,25 @@
+# A config file containing Bazel settings
+
+# Required on windows
+common --enable_platform_specific_config
+startup --windows_enable_symlinks
+build:windows --enable_runfiles
+
+# Enable rustfmt
+build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
+build:strict --output_groups=+rustfmt_checks
+
+# Enable clippy
+build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:strict --output_groups=+clippy_checks
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/bazelbuild/rules_rust/issues/2181
+common --noenable_bzlmod
+
+# This isn't currently the defaut in Bazel, but we enable it to test we'll be ready if/when it flips.
+build --incompatible_disallow_empty_glob
+
+# This import should always be last to allow users to override
+# settings for local development.
+try-import %workspace%/user.bazelrc
diff --git a/examples/crate_universe/cargo_remote/.bazelrc b/examples/crate_universe/cargo_remote/.bazelrc
new file mode 100644
index 0000000..a67f1ba
--- /dev/null
+++ b/examples/crate_universe/cargo_remote/.bazelrc
@@ -0,0 +1,25 @@
+# A config file containing Bazel settings
+
+# Required on windows
+common --enable_platform_specific_config
+startup --windows_enable_symlinks
+build:windows --enable_runfiles
+
+# Enable rustfmt
+build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
+build:strict --output_groups=+rustfmt_checks
+
+# Enable clippy
+build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:strict --output_groups=+clippy_checks
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/bazelbuild/rules_rust/issues/2181
+common --noenable_bzlmod
+
+# This isn't currently the defaut in Bazel, but we enable it to test we'll be ready if/when it flips.
+build --incompatible_disallow_empty_glob
+
+# This import should always be last to allow users to override
+# settings for local development.
+try-import %workspace%/user.bazelrc
diff --git a/examples/crate_universe/cargo_workspace/.bazelrc b/examples/crate_universe/cargo_workspace/.bazelrc
new file mode 100644
index 0000000..a67f1ba
--- /dev/null
+++ b/examples/crate_universe/cargo_workspace/.bazelrc
@@ -0,0 +1,25 @@
+# A config file containing Bazel settings
+
+# Required on windows
+common --enable_platform_specific_config
+startup --windows_enable_symlinks
+build:windows --enable_runfiles
+
+# Enable rustfmt
+build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
+build:strict --output_groups=+rustfmt_checks
+
+# Enable clippy
+build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:strict --output_groups=+clippy_checks
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/bazelbuild/rules_rust/issues/2181
+common --noenable_bzlmod
+
+# This isn't currently the defaut in Bazel, but we enable it to test we'll be ready if/when it flips.
+build --incompatible_disallow_empty_glob
+
+# This import should always be last to allow users to override
+# settings for local development.
+try-import %workspace%/user.bazelrc
diff --git a/examples/crate_universe/multi_package/.bazelrc b/examples/crate_universe/multi_package/.bazelrc
new file mode 100644
index 0000000..a67f1ba
--- /dev/null
+++ b/examples/crate_universe/multi_package/.bazelrc
@@ -0,0 +1,25 @@
+# A config file containing Bazel settings
+
+# Required on windows
+common --enable_platform_specific_config
+startup --windows_enable_symlinks
+build:windows --enable_runfiles
+
+# Enable rustfmt
+build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
+build:strict --output_groups=+rustfmt_checks
+
+# Enable clippy
+build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:strict --output_groups=+clippy_checks
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/bazelbuild/rules_rust/issues/2181
+common --noenable_bzlmod
+
+# This isn't currently the defaut in Bazel, but we enable it to test we'll be ready if/when it flips.
+build --incompatible_disallow_empty_glob
+
+# This import should always be last to allow users to override
+# settings for local development.
+try-import %workspace%/user.bazelrc
diff --git a/examples/crate_universe/no_cargo_manifests/.bazelrc b/examples/crate_universe/no_cargo_manifests/.bazelrc
new file mode 100644
index 0000000..a67f1ba
--- /dev/null
+++ b/examples/crate_universe/no_cargo_manifests/.bazelrc
@@ -0,0 +1,25 @@
+# A config file containing Bazel settings
+
+# Required on windows
+common --enable_platform_specific_config
+startup --windows_enable_symlinks
+build:windows --enable_runfiles
+
+# Enable rustfmt
+build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
+build:strict --output_groups=+rustfmt_checks
+
+# Enable clippy
+build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:strict --output_groups=+clippy_checks
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/bazelbuild/rules_rust/issues/2181
+common --noenable_bzlmod
+
+# This isn't currently the defaut in Bazel, but we enable it to test we'll be ready if/when it flips.
+build --incompatible_disallow_empty_glob
+
+# This import should always be last to allow users to override
+# settings for local development.
+try-import %workspace%/user.bazelrc
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index c82c236..5836040 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -329,7 +329,6 @@
transitive_build_infos.append(depset([build_info]))
if build_info.link_search_paths:
transitive_link_search_paths.append(depset([build_info.link_search_paths]))
- transitive_data.append(build_info.compile_data)
else:
fail("rust targets can only depend on rust_library, rust_*_library or cc_library " +
"targets.")
@@ -471,12 +470,14 @@
def _process_build_scripts(
build_info,
dep_info,
+ compile_inputs,
include_link_flags = True):
"""Gathers the outputs from a target's `cargo_build_script` action.
Args:
build_info (BuildInfo): The target Build's dependency info.
dep_info (DepInfo): The Depinfo provider form the target Crate's set of inputs.
+ compile_inputs (depset): A set of all files that will participate in the build.
include_link_flags (bool, optional): Whether to include flags like `-l` that instruct the linker to search for a library.
Returns:
@@ -487,7 +488,8 @@
- (depset[File]): All direct and transitive build flags from the current build info.
"""
extra_inputs, out_dir, build_env_file, build_flags_files = _create_extra_input_args(build_info, dep_info, include_link_flags = include_link_flags)
- return extra_inputs, out_dir, build_env_file, build_flags_files
+ compile_inputs = depset(transitive = [extra_inputs, compile_inputs])
+ return compile_inputs, out_dir, build_env_file, build_flags_files
def _symlink_for_ambiguous_lib(actions, toolchain, crate_info, lib):
"""Constructs a disambiguating symlink for a library dependency.
@@ -778,18 +780,13 @@
],
)
- build_script_compile_inputs, out_dir, build_env_file, build_flags_files = _process_build_scripts(
- build_info = build_info,
- dep_info = dep_info,
- include_link_flags = include_link_flags,
- )
-
# For backwards compatibility, we also check the value of the `rustc_env_files` attribute when
# `crate_info.rustc_env_files` is not populated.
build_env_files = crate_info.rustc_env_files if crate_info.rustc_env_files else getattr(files, "rustc_env_files", [])
+ compile_inputs, out_dir, build_env_file, build_flags_files = _process_build_scripts(build_info, dep_info, compile_inputs, include_link_flags = include_link_flags)
if build_env_file:
build_env_files = [f for f in build_env_files] + [build_env_file]
- compile_inputs = depset(build_env_files, transitive = [build_script_compile_inputs, compile_inputs])
+ compile_inputs = depset(build_env_files, transitive = [compile_inputs])
return compile_inputs, out_dir, build_env_files, build_flags_files, linkstamp_outs, ambiguous_libs
def construct_arguments(
@@ -1734,13 +1731,8 @@
input_depsets.append(build_info.compile_data)
- out_dir_compile_inputs = depset(
- input_files,
- transitive = [dep_info.link_search_path_files, dep_info.transitive_data] + input_depsets,
- )
-
return (
- out_dir_compile_inputs,
+ depset(input_files, transitive = [dep_info.link_search_path_files] + input_depsets),
out_dir,
build_env_file,
depset(build_flags_files, transitive = [dep_info.link_search_path_files]),
diff --git a/test/dep_env/BUILD.bazel b/test/dep_env/BUILD.bazel
index 994731e..82acfbb 100644
--- a/test/dep_env/BUILD.bazel
+++ b/test/dep_env/BUILD.bazel
@@ -113,5 +113,4 @@
srcs = ["dep_dir"],
outs = ["set_dep_dir.env"],
cmd = "echo DEP_DIR=\\$${pwd}/$(execpath dep_dir) > $@",
- cmd_bat = "echo DEP_DIR=$${pwd}/$(execpath dep_dir) > $@",
)
diff --git a/test/dep_env/dep_env.bzl b/test/dep_env/dep_env.bzl
index 84f96a3..f571fa6 100644
--- a/test/dep_env/dep_env.bzl
+++ b/test/dep_env/dep_env.bzl
@@ -1,59 +1,14 @@
-"""Tests for passing configuration to cargo_dep_env rules"""
+"""Tests for passing configuration to cargo_build_script rules"""
-_SH_WRITER = """\
-#!/usr/bin/env bash
-set -euo pipefail
-echo content > $@
-"""
-
-_BAT_WRITER = """\
-@ECHO OFF
-echo content > %*
-"""
-
-def _create_dep_dir_impl(ctx):
- is_windows = ctx.attr.platform.values()[0] == "windows"
- writer = ctx.actions.declare_file("{}.writer.{}".format(
- ctx.label.name,
- ".bat" if is_windows else ".sh",
- ))
- ctx.actions.write(
- output = writer,
- content = _BAT_WRITER if is_windows else _SH_WRITER,
- is_executable = True,
- )
-
- out = ctx.actions.declare_directory("{}.dep_dir".format(ctx.label.name))
- ctx.actions.run(
- executable = writer,
+def _create_dep_dir(ctx):
+ out = ctx.actions.declare_directory("dep_dir")
+ ctx.actions.run_shell(
outputs = [out],
- arguments = [
- "{}\\a_file".format(out.path) if is_windows else "{}/a_file".format(out.path),
- ],
+ arguments = [out.path],
+ command = 'echo contents > "$@/a_file"',
)
-
return [DefaultInfo(files = depset(direct = [out]))]
-_create_dep_dir = rule(
- implementation = _create_dep_dir_impl,
- attrs = {
- "platform": attr.label_keyed_string_dict(
- doc = "The name of the exec platform",
- cfg = "exec",
- mandatory = True,
- ),
- },
+create_dep_dir = rule(
+ implementation = _create_dep_dir,
)
-
-def create_dep_dir(name, **kwargs):
- native.filegroup(
- name = "{}_".format(name),
- )
- _create_dep_dir(
- name = name,
- platform = select({
- "@platforms//os:windows": {":{}_".format(name): "windows"},
- "//conditions:default": {":{}_".format(name): "unix"},
- }),
- **kwargs
- )
diff --git a/test/dep_env/read_b.rs b/test/dep_env/read_b.rs
index ad89fdc..b63db42 100644
--- a/test/dep_env/read_b.rs
+++ b/test/dep_env/read_b.rs
@@ -1,5 +1,5 @@
use std::env::var;
fn main() {
- assert_eq!(var("DEP_Y_B").unwrap().trim(), "b_value");
+ assert_eq!(var("DEP_Y_B").unwrap(), "b_value");
}
diff --git a/test/dep_env/read_dep_dir.rs b/test/dep_env/read_dep_dir.rs
index a9484ba..c9a82ed 100644
--- a/test/dep_env/read_dep_dir.rs
+++ b/test/dep_env/read_dep_dir.rs
@@ -1,18 +1,9 @@
-use std::env::var;
-use std::fs;
-use std::io::Result;
-use std::path::PathBuf;
+use std::{env::var, fs, io::Result};
fn main() {
- let dep_dir = PathBuf::from(var("DEP_DIR").expect("DEP_DIR should be set").trim());
- let entries = fs::read_dir(&dep_dir)
- .unwrap_or_else(|e| {
- panic!(
- "Failed to open DEP_DIR directory: {}\n{:?}",
- dep_dir.display(),
- e
- )
- })
+ let dep_dir = &var("DEP_DIR").expect("DEP_DIR should be set");
+ let entries = fs::read_dir(dep_dir)
+ .expect("Failed to open DEP_DIR directory")
.collect::<Result<Vec<_>>>()
.expect("Failed to read DEP_DIR directory entries");
let entries = entries
diff --git a/test/toolchain/BUILD.bazel b/test/toolchain/BUILD.bazel
index bc8e011..6400af9 100644
--- a/test/toolchain/BUILD.bazel
+++ b/test/toolchain/BUILD.bazel
@@ -9,7 +9,6 @@
# rustc assumes it can read things like librustc_driver in order to run this command.
# This is a test to ensure we supply all of the files rustc needs as part of the current_rust_toolchain.
cmd = "$(RUSTC) --print=cfg > $@",
- cmd_bat = "$(RUSTC) --print=cfg > $@",
toolchains = ["@rules_rust//rust/toolchain:current_rust_toolchain"],
tools = ["@rules_rust//rust/toolchain:current_rust_toolchain"],
)
diff --git a/test/unit/location_expansion/location_expansion_test.bzl b/test/unit/location_expansion/location_expansion_test.bzl
index 96b6bf8..a58d974 100644
--- a/test/unit/location_expansion/location_expansion_test.bzl
+++ b/test/unit/location_expansion/location_expansion_test.bzl
@@ -1,7 +1,6 @@
"""Unittest to verify location expansion in rustc flags"""
load("@bazel_skylib//lib:unittest.bzl", "analysistest")
-load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("//rust:defs.bzl", "rust_library")
load("//test/unit:common.bzl", "assert_action_mnemonic", "assert_argv_contains")
@@ -18,14 +17,10 @@
location_expansion_rustc_flags_test = analysistest.make(_location_expansion_rustc_flags_test)
def _location_expansion_test():
- write_file(
+ native.genrule(
name = "flag_generator",
- out = "generated_flag.data",
- content = [
- "--cfg=test_flag",
- "",
- ],
- newline = "unix",
+ outs = ["generated_flag.data"],
+ cmd = "echo --cfg=test_flag > $@",
)
rust_library(
diff --git a/test/unit/pipelined_compilation/wrap.bzl b/test/unit/pipelined_compilation/wrap.bzl
index fb4c6db..09c2a6c 100644
--- a/test/unit/pipelined_compilation/wrap.bzl
+++ b/test/unit/pipelined_compilation/wrap.bzl
@@ -6,21 +6,21 @@
# buildifier: disable=bzl-visibility
load("//rust/private:rustc.bzl", "rustc_compile_action")
-_CONTENT = """\
+def _wrap_impl(ctx):
+ rs_file = ctx.actions.declare_file(ctx.label.name + "_wrapped.rs")
+ crate_name = ctx.attr.crate_name if ctx.attr.crate_name else ctx.label.name
+ ctx.actions.run_shell(
+ outputs = [rs_file],
+ command = """cat <<EOF > {}
// crate_name: {}
use to_wrap::to_wrap;
pub fn wrap() {{
to_wrap();
}}
-"""
-
-def _wrap_impl(ctx):
- rs_file = ctx.actions.declare_file(ctx.label.name + "_wrapped.rs")
- crate_name = ctx.attr.crate_name if ctx.attr.crate_name else ctx.label.name
- ctx.actions.write(
- output = rs_file,
- content = _CONTENT.format(crate_name),
+EOF
+""".format(rs_file.path, crate_name),
+ mnemonic = "WriteWrapperRsFile",
)
toolchain = ctx.toolchains[Label("//rust:toolchain")]
diff --git a/test/unit/toolchain/subpackage/BUILD.bazel b/test/unit/toolchain/subpackage/BUILD.bazel
index e8f3d67..0c8ace8 100644
--- a/test/unit/toolchain/subpackage/BUILD.bazel
+++ b/test/unit/toolchain/subpackage/BUILD.bazel
@@ -1,10 +1,7 @@
-load("@bazel_skylib//rules:write_file.bzl", "write_file")
-
-write_file(
+genrule(
name = "dummy_rlib",
- out = "core.rlib",
- content = [],
- newline = "unix",
+ outs = ["core.rlib"],
+ cmd = "touch $@",
)
filegroup(