Skip to content

Commit 96a545f

Browse files
committed
chore: drop nightly toolchain
this drops the nightly toolchain that was used in the fuzzers. Instead, `RUSTC_BOOTSTRAP=1` is set in the fuzzer targets, which has the same effect without requiring the download of a second toolchain. NOTE: This vendors the following upstream patch: bazelbuild/rules_rust#3510
1 parent 332111f commit 96a545f

File tree

6 files changed

+216
-19
lines changed

6 files changed

+216
-19
lines changed

Cargo.Bazel.Fuzzing.json.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"checksum": "dc542233ca41d39902fd314ea0f72fa3a7eaaf46cab14ff182bfb33a7cb24165",
2+
"checksum": "7e99465a7a7607ef460ce9ca15ca9a429e9999259f07905e89102fa5ce6ef3c7",
33
"crates": {
44
"abnf 0.12.0": {
55
"name": "abnf",
@@ -7065,7 +7065,7 @@
70657065
"-Zstrict-init-checks",
70667066
"-Zsanitizer=address",
70677067
"-Zexternal-clangrt",
7068-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
7068+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
70697069
],
70707070
"selects": {}
70717071
},
@@ -7950,7 +7950,7 @@
79507950
"-Zstrict-init-checks",
79517951
"-Zsanitizer=address",
79527952
"-Zexternal-clangrt",
7953-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
7953+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
79547954
],
79557955
"selects": {}
79567956
},
@@ -8069,7 +8069,7 @@
80698069
"-Zstrict-init-checks",
80708070
"-Zsanitizer=address",
80718071
"-Zexternal-clangrt",
8072-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
8072+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
80738073
],
80748074
"selects": {}
80758075
},
@@ -8221,7 +8221,7 @@
82218221
"-Zstrict-init-checks",
82228222
"-Zsanitizer=address",
82238223
"-Zexternal-clangrt",
8224-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
8224+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
82258225
],
82268226
"selects": {}
82278227
},
@@ -12053,7 +12053,7 @@
1205312053
"-Zstrict-init-checks",
1205412054
"-Zsanitizer=address",
1205512055
"-Zexternal-clangrt",
12056-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
12056+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
1205712057
],
1205812058
"selects": {}
1205912059
},
@@ -35424,7 +35424,7 @@
3542435424
"-Zstrict-init-checks",
3542535425
"-Zsanitizer=address",
3542635426
"-Zexternal-clangrt",
35427-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
35427+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
3542835428
],
3542935429
"selects": {}
3543035430
},
@@ -86558,7 +86558,7 @@
8655886558
"-Zstrict-init-checks",
8655986559
"-Zsanitizer=address",
8656086560
"-Zexternal-clangrt",
86561-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a"
86561+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a"
8656286562
],
8656386563
"selects": {}
8656486564
},

WORKSPACE.bazel

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,10 @@ http_archive(
118118
name = "rules_rust",
119119
integrity = "sha256-ydWjnLPhzqys6Y8Z8J1hxLVQNLw0pWW9z3zYDrTEEq8=",
120120
patch_args = ["-p1"],
121-
patches = ["//bazel:rules_rust.patch"],
121+
patches = [
122+
"//bazel:rules_rust_san.patch",
123+
"//bazel:rules_rust_env.patch",
124+
],
122125
urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.62.0/rules_rust-0.62.0.tar.gz"],
123126
)
124127

@@ -139,13 +142,7 @@ rust_register_toolchains(
139142
"fastbuild": "none",
140143
"opt": "none",
141144
}},
142-
# The nightly version is required to compile fuzz tests from Bazel.
143-
# The version below is chosen so that it is in sync with the non-nightly version.
144-
versions = [
145-
"1.86.0",
146-
# Use the nightly version from the day before the branch.
147-
"nightly/2025-03-08",
148-
],
145+
versions = ["1.86.0"],
149146
)
150147

151148
load("//bazel:external_crates.bzl", "external_crates_repository")

bazel/conf/.bazelrc.build

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ build:dev --compilation_mode=fastbuild
9191

9292
# Fuzzing configuration
9393
build:fuzzing --action_env="SANITIZERS_ENABLED=1"
94-
# sanitizers are only supported in nightly
95-
build:fuzzing --@rules_rust//rust/toolchain/channel=nightly
94+
# fuzzers use nightly features so we tell rustc to allow nightly features
95+
build:fuzzing --@rules_rust//rust/settings:extra_rustc_env=RUSTC_BOOTSTRAP=1 --@rules_rust//rust/settings:extra_exec_rustc_env=RUSTC_BOOTSTRAP=1
9696
build:fuzzing --build_tag_filters=fuzz_test
9797
# Ignoring transitions for now since it doesn't add any additional improvement to current setup
9898
build:fuzzing --//bazel:enable_fuzzing_code=True

bazel/fuzz_testing.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ DEFAULT_SANITIZERS = [
2929
"-Zsanitizer=address",
3030
# zig doesn't like how rustc pushes the sanitizers, so do it ourselves.
3131
"-Zexternal-clangrt",
32-
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a",
32+
"-Clink-arg=bazel-out/k8-opt/bin/external/rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-stable_rt.asan.a",
3333
]
3434

3535
# This flag will be used by third party crates and internal rust_libraries during fuzzing

bazel/rules_rust_env.patch

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
# allow setting rustc env via build setting
2+
# https://github.com/bazelbuild/rules_rust/pull/3510
3+
diff --git a/rust/private/rust.bzl b/rust/private/rust.bzl
4+
index 74d458eef..bb51c9cf4 100644
5+
--- a/rust/private/rust.bzl
6+
+++ b/rust/private/rust.bzl
7+
@@ -531,12 +531,18 @@ RUSTC_ATTRS = {
8+
"_error_format": attr.label(
9+
default = Label("//rust/settings:error_format"),
10+
),
11+
+ "_extra_exec_rustc_env": attr.label(
12+
+ default = Label("//rust/settings:extra_exec_rustc_env"),
13+
+ ),
14+
"_extra_exec_rustc_flag": attr.label(
15+
default = Label("//rust/settings:extra_exec_rustc_flag"),
16+
),
17+
"_extra_exec_rustc_flags": attr.label(
18+
default = Label("//rust/settings:extra_exec_rustc_flags"),
19+
),
20+
+ "_extra_rustc_env": attr.label(
21+
+ default = Label("//rust/settings:extra_rustc_env"),
22+
+ ),
23+
"_extra_rustc_flag": attr.label(
24+
default = Label("//rust/settings:extra_rustc_flag"),
25+
),
26+
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
27+
index d78c28902..1e638fdf9 100644
28+
--- a/rust/private/rustc.bzl
29+
+++ b/rust/private/rustc.bzl
30+
@@ -67,6 +67,16 @@ ErrorFormatInfo = provider(
31+
fields = {"error_format": "(string) [" + ", ".join(_error_format_values) + "]"},
32+
)
33+
34+
+ExtraRustcEnvInfo = provider(
35+
+ doc = "Pass each value as an environment variable to non-exec rustc invocations",
36+
+ fields = {"extra_rustc_env": "List[string] Extra env to pass to rustc in non-exec configuration"},
37+
+)
38+
+
39+
+ExtraExecRustcEnvInfo = provider(
40+
+ doc = "Pass each value as an environment variable to exec rustc invocations",
41+
+ fields = {"extra_exec_rustc_env": "List[string] Extra env to pass to rustc in exec configuration"},
42+
+)
43+
+
44+
ExtraRustcFlagsInfo = provider(
45+
doc = "Pass each value as an additional flag to non-exec rustc invocations",
46+
fields = {"extra_rustc_flags": "List[string] Extra flags to pass to rustc in non-exec configuration"},
47+
@@ -1102,6 +1112,10 @@ def construct_arguments(
48+
else:
49+
rustc_flags.add_all(toolchain.extra_rustc_flags, map_each = map_flag)
50+
51+
+ # extra_rustc_env applies to the target configuration, not the exec configuration.
52+
+ if hasattr(ctx.attr, "_extra_rustc_env") and not is_exec_configuration(ctx):
53+
+ env.update(ctx.attr._extra_rustc_env[ExtraRustcEnvInfo].extra_rustc_env)
54+
+
55+
# extra_rustc_flags apply to the target configuration, not the exec configuration.
56+
if hasattr(ctx.attr, "_extra_rustc_flags") and not is_exec_configuration(ctx):
57+
rustc_flags.add_all(ctx.attr._extra_rustc_flags[ExtraRustcFlagsInfo].extra_rustc_flags, map_each = map_flag)
58+
@@ -1113,6 +1127,9 @@ def construct_arguments(
59+
per_crate_rustc_flags = ctx.attr._per_crate_rustc_flag[PerCrateRustcFlagsInfo].per_crate_rustc_flags
60+
_add_per_crate_rustc_flags(ctx, rustc_flags, map_flag, crate_info, per_crate_rustc_flags)
61+
62+
+ if hasattr(ctx.attr, "_extra_exec_rustc_env") and is_exec_configuration(ctx):
63+
+ env.update(ctx.attr._extra_exec_rustc_env[ExtraExecRustcEnvInfo].extra_exec_rustc_env)
64+
+
65+
if hasattr(ctx.attr, "_extra_exec_rustc_flags") and is_exec_configuration(ctx):
66+
rustc_flags.add_all(ctx.attr._extra_exec_rustc_flags[ExtraExecRustcFlagsInfo].extra_exec_rustc_flags, map_each = map_flag)
67+
68+
@@ -2279,6 +2296,24 @@ rustc_output_diagnostics = rule(
69+
build_setting = config.bool(flag = True),
70+
)
71+
72+
+def _extra_rustc_env_impl(ctx):
73+
+ env_vars = {}
74+
+ for entry in ctx.build_setting_value:
75+
+ if "=" not in entry:
76+
+ fail("Invalid format for rustc env var: '{}'. Expected 'KEY=value'".format(entry))
77+
+ key, val = entry.split("=", 1)
78+
+ env_vars[key] = val
79+
+ return ExtraRustcEnvInfo(extra_rustc_env = env_vars)
80+
+
81+
+extra_rustc_env = rule(
82+
+ doc = (
83+
+ "Add additional environment variables to rustc in non-exec configuration using " +
84+
+ "`--@rules_rust//rust/settings:extra_rustc_env=FOO=bar`. Multiple values may be specified."
85+
+ ),
86+
+ implementation = _extra_rustc_env_impl,
87+
+ build_setting = config.string_list(flag = True),
88+
+)
89+
+
90+
def _extra_rustc_flags_impl(ctx):
91+
return ExtraRustcFlagsInfo(extra_rustc_flags = ctx.build_setting_value)
92+
93+
@@ -2319,6 +2354,24 @@ extra_exec_rustc_flags = rule(
94+
build_setting = config.string_list(flag = True),
95+
)
96+
97+
+def _extra_exec_rustc_env_impl(ctx):
98+
+ env_vars = {}
99+
+ for entry in ctx.build_setting_value:
100+
+ if "=" not in entry:
101+
+ fail("Invalid format for rustc env var: '{}'. Expected 'KEY=value'".format(entry))
102+
+ key, val = entry.split("=", 1)
103+
+ env_vars[key] = val
104+
+ return ExtraExecRustcEnvInfo(extra_exec_rustc_env = env_vars)
105+
+
106+
+extra_exec_rustc_env = rule(
107+
+ doc = (
108+
+ "Add additional environment variables to rustc in non-exec configuration using " +
109+
+ "`--@rules_rust//rust/settings:extra_exec_rustc_env=FOO=bar`. Multiple values may be specified."
110+
+ ),
111+
+ implementation = _extra_exec_rustc_env_impl,
112+
+ build_setting = config.string_list(flag = True),
113+
+)
114+
+
115+
def _extra_exec_rustc_flag_impl(ctx):
116+
return ExtraExecRustcFlagsInfo(extra_exec_rustc_flags = [f for f in ctx.build_setting_value if f != ""])
117+
118+
diff --git a/rust/settings/BUILD.bazel b/rust/settings/BUILD.bazel
119+
index 8fb46461d..3f6bf3073 100644
120+
--- a/rust/settings/BUILD.bazel
121+
+++ b/rust/settings/BUILD.bazel
122+
@@ -13,8 +13,10 @@ load(
123+
"experimental_use_coverage_metadata_files",
124+
"experimental_use_global_allocator",
125+
"experimental_use_sh_toolchain_for_bootstrap_process_wrapper",
126+
+ "extra_exec_rustc_env",
127+
"extra_exec_rustc_flag",
128+
"extra_exec_rustc_flags",
129+
+ "extra_rustc_env",
130+
"extra_rustc_flag",
131+
"extra_rustc_flags",
132+
"incompatible_change_rust_test_compilation_output_directory",
133+
@@ -73,10 +75,14 @@ experimental_use_global_allocator()
134+
135+
experimental_use_sh_toolchain_for_bootstrap_process_wrapper()
136+
137+
+extra_exec_rustc_env()
138+
+
139+
extra_exec_rustc_flag()
140+
141+
extra_exec_rustc_flags()
142+
143+
+extra_rustc_env()
144+
+
145+
extra_rustc_flag()
146+
147+
extra_rustc_flags()
148+
diff --git a/rust/settings/settings.bzl b/rust/settings/settings.bzl
149+
index 1444600d2..c795597d0 100644
150+
--- a/rust/settings/settings.bzl
151+
+++ b/rust/settings/settings.bzl
152+
@@ -19,8 +19,10 @@ load("//rust/private:lto.bzl", "rust_lto_flag")
153+
load(
154+
"//rust/private:rustc.bzl",
155+
_error_format = "error_format",
156+
+ _extra_exec_rustc_env = "extra_exec_rustc_env",
157+
_extra_exec_rustc_flag = "extra_exec_rustc_flag",
158+
_extra_exec_rustc_flags = "extra_exec_rustc_flags",
159+
+ _extra_rustc_env = "extra_rustc_env",
160+
_extra_rustc_flag = "extra_rustc_flag",
161+
_extra_rustc_flags = "extra_rustc_flags",
162+
_no_std = "no_std",
163+
@@ -258,6 +260,18 @@ def clippy_flags():
164+
build_setting_default = [],
165+
)
166+
167+
+# buildifier: disable=unnamed-macro
168+
+def extra_rustc_env():
169+
+ """This setting may be used to pass extra environment variables to rustc from the command line in non-exec configuration.
170+
+
171+
+ It applies across all targets whereas environment variables set in a specific rule apply only to that target.
172+
+ This can be useful for setting build-wide env flags such as `RUSTC_BOOTSTRAP=1`.
173+
+ """
174+
+ _extra_rustc_env(
175+
+ name = "extra_rustc_env",
176+
+ build_setting_default = [],
177+
+ )
178+
+
179+
# buildifier: disable=unnamed-macro
180+
def clippy_flag():
181+
"""Add a custom clippy flag from the command line with `--@rules_rust//rust/settings:clippy_flag`.
182+
@@ -292,6 +306,18 @@ def extra_rustc_flag():
183+
build_setting_default = [],
184+
)
185+
186+
+# buildifier: disable=unnamed-macro
187+
+def extra_exec_rustc_env():
188+
+ """This setting may be used to pass extra environment variables to rustc from the command line in exec configuration.
189+
+
190+
+ It applies to tools built and run during the build process, such as proc-macros and build scripts.
191+
+ This can be useful for enabling features that are needed during tool compilation.
192+
+ """
193+
+ _extra_exec_rustc_env(
194+
+ name = "extra_exec_rustc_env",
195+
+ build_setting_default = [],
196+
+ )
197+
+
198+
# buildifier: disable=unnamed-macro
199+
def extra_exec_rustc_flags():
200+
"""This setting may be used to pass extra options to rustc from the command line in exec configuration.
File renamed without changes.

0 commit comments

Comments
 (0)