Skip to content

Commit 60daaf4

Browse files
committed
Add well-known annotations to help with hermetic remote builds
1 parent d2dbe19 commit 60daaf4

7 files changed

Lines changed: 352 additions & 599 deletions

.bazelversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9.0.0rc3
1+
9.0.0rc5

rs/extensions.bzl

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
load("@aspect_tools_telemetry_report//:defs.bzl", "TELEMETRY") # buildifier: disable=load
22
load("@bazel_lib//lib:repo_utils.bzl", "repo_utils")
33
load("@bazel_skylib//lib:paths.bzl", "paths")
4-
load("//rs/private:annotations.bzl", "annotation_for", "build_annotation_map")
4+
load("//rs/private:annotations.bzl", "WELL_KNOWN_ANNOTATIONS", "annotation_for", "build_annotation_map", "format_well_known_annotation")
55
load("//rs/private:cargo_credentials.bzl", "load_cargo_credentials")
66
load("//rs/private:cfg_parser.bzl", "cfg_matches_expr_for_cfg_attrs", "triple_to_cfg_attrs")
77
load("//rs/private:crate_git_repository.bzl", "crate_git_repository")
@@ -366,7 +366,10 @@ def _generate_hub_and_spokes(
366366
fail(("ERROR: Cargo.lock out of sync: %s requires %s %s but Cargo.lock has %s.\n\n" +
367367
"If this is incorrect, please set `validate_lockfile = False` in `crate.from_cargo`\n" +
368368
"and file a bug at https://github.com/dzbarsky/rules_rs/issues/new") % (
369-
package["name"], dep_name, req, locked_version
369+
package["name"],
370+
dep_name,
371+
req,
372+
locked_version,
370373
))
371374

372375
features = dep["features"]
@@ -442,6 +445,26 @@ def _generate_hub_and_spokes(
442445
feature_resolutions = feature_resolutions_by_fq_crate[_fq_crate(crate_name, version)]
443446

444447
annotation = annotation_for(annotations, crate_name, version)
448+
well_known_annotation = WELL_KNOWN_ANNOTATIONS.get(crate_name)
449+
if well_known_annotation and annotation.gen_build_script == "auto":
450+
print("""
451+
WARNING: A well-known crate annotation exists for {crate}! Apply the following to your MODULE.bazel:
452+
453+
```
454+
{formatted_well_known_annotation}
455+
```
456+
457+
You can disable this warning by configuring your MODULE.bazel like so:
458+
459+
```
460+
crate.annotation(
461+
crate = "{crate}",
462+
gen_build_script = "on",
463+
)
464+
```""".format(
465+
crate = crate_name,
466+
formatted_well_known_annotation = format_well_known_annotation(crate_name, well_known_annotation),
467+
))
445468

446469
kwargs = dict(
447470
hub_name = hub_name,

rs/private/annotations.bzl

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,45 @@ def build_annotation_map(mod, cfg_name):
3939
fail("Duplicate crate.annotation for %s version %s in repo %s" % (annotation.crate, version_key, cfg_name))
4040
crate_map[version_key] = annotation
4141
return annotations
42+
43+
def format_well_known_annotation(crate, annotation):
44+
target = annotation.target
45+
idx = target.find("//")
46+
if idx == -1:
47+
module_name = target[1:]
48+
else:
49+
module_name = target[1:idx]
50+
51+
return """\
52+
bazel_dep(name = "{module_name}", version = "{module_version}")
53+
54+
crate.annotation(
55+
crate = "{crate}",
56+
gen_build_script = "off",
57+
deps = ["{target}"],
58+
)
59+
60+
inject_repo(crate, "{module_name}")""".format(
61+
crate = crate,
62+
target = target,
63+
module_name = module_name,
64+
module_version = annotation.module_version,
65+
)
66+
67+
def _bazel_dep(target, module_version):
68+
return struct(
69+
target = target,
70+
module_version = module_version,
71+
)
72+
73+
WELL_KNOWN_ANNOTATIONS = {
74+
"alsa-sys": _bazel_dep("@alsa_lib", "1.2.9.bcr.4"),
75+
"bzip2-sys": _bazel_dep("@bzip2//:bz2", "1.0.8.bcr.3"),
76+
"gdk-pixbuf-sys": _bazel_dep("@gdk-pixbuf", "2.44.4"),
77+
"gio-sys": _bazel_dep("@glib//gio", "2.82.2.bcr.7"),
78+
"glib-sys": _bazel_dep("@glib//glib", "2.82.2.bcr.7"),
79+
"gobject-sys": _bazel_dep("@glib//gobject", "2.82.2.bcr.7"),
80+
"lzma-sys": _bazel_dep("@xz//:lzma", "5.4.5.bcr.7"),
81+
"tikv-jemalloc-sys": _bazel_dep("@jemalloc", "5.3.0-bcr.alpha.4"),
82+
"zstd-sys": _bazel_dep("@zstd", "1.5.7"),
83+
}

test/MODULE.bazel

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@ bazel_dep(name = "platforms", version = "1.0.0")
22
bazel_dep(name = "toolchains_llvm_bootstrapped", version = "0.3.1")
33
archive_override(
44
module_name = "toolchains_llvm_bootstrapped",
5-
integrity = "sha256-dBvq3EBkK0YWeYLZz+lPGT1EP5jKdpvZ7VJ6iy//ADM=",
6-
patch_strip = 1,
7-
patches = [
8-
"//:toolchains_llvm_bootstrapped_ws2.patch",
9-
],
10-
strip_prefix = "toolchains_llvm_bootstrapped-ae1f72282fbe8695c5641eda171d6b7b73e475b6",
11-
urls = ["https://github.com/cerisier/toolchains_llvm_bootstrapped/archive/ae1f72282fbe8695c5641eda171d6b7b73e475b6/master.tar.gz"],
5+
integrity = "sha256-es2Zf7dKYEVDuvkm6E90CnunXSisameDh5/5nyhyu2Q=",
6+
strip_prefix = "toolchains_llvm_bootstrapped-873b8be7d416283761b158ef4635e605970ab3db",
7+
urls = ["https://github.com/cerisier/toolchains_llvm_bootstrapped/archive/873b8be7d416283761b158ef4635e605970ab3db.tar.gz"],
128
)
139

10+
osx = use_extension("@toolchains_llvm_bootstrapped//toolchain/extension:osx.bzl", "osx")
11+
12+
osx.framework(name = "CoreFoundation")
13+
osx.framework(name = "CoreServices")
14+
osx.framework(name = "CFNetwork")
15+
osx.framework(name = "DiskArbitration")
16+
osx.framework(name = "IOKit")
17+
osx.framework(name = "Security")
18+
1419
#local_path_override(
1520
# module_name = "toolchains_llvm_bootstrapped",
1621
# path = "../../toolchains_llvm_bootstrapped",
@@ -158,8 +163,23 @@ crate.annotation(
158163
]
159164

160165
### Fix -sys crates
166+
bazel_dep(name = "bzip2", version = "1.0.8.bcr.3")
167+
168+
crate.annotation(
169+
crate = "bzip2-sys",
170+
gen_build_script = "off",
171+
deps = ["@bzip2//:bz2"],
172+
)
173+
174+
inject_repo(crate, "bzip2")
175+
161176
bazel_dep(name = "glib", version = "2.82.2.bcr.7")
162177

178+
crate.annotation(
179+
crate = "gio-sys",
180+
gen_build_script = "off",
181+
deps = ["@glib//gio"],
182+
)
163183
crate.annotation(
164184
crate = "glib-sys",
165185
gen_build_script = "off",
@@ -170,14 +190,30 @@ crate.annotation(
170190
gen_build_script = "off",
171191
deps = ["@glib//gobject"],
172192
)
193+
194+
inject_repo(crate, "glib")
195+
196+
bazel_dep(name = "xz", version = "5.4.5.bcr.7")
197+
173198
crate.annotation(
174-
crate = "gio-sys",
199+
crate = "lzma-sys",
175200
gen_build_script = "off",
176-
deps = ["@glib//gio"],
201+
deps = ["@xz//:lzma"],
177202
)
178203

179-
inject_repo(crate, "glib")
204+
inject_repo(crate, "xz")
205+
206+
bazel_dep(name = "zstd", version = "1.5.7")
207+
208+
crate.annotation(
209+
crate = "zstd-sys",
210+
gen_build_script = "off",
211+
deps = ["@zstd"],
212+
)
213+
214+
inject_repo(crate, "zstd")
180215

216+
# TODO(zbarsky): alsa-sys is not curently tested, fix it
181217
bazel_dep(name = "alsa_lib", version = "1.2.9.bcr.4")
182218

183219
crate.annotation(

0 commit comments

Comments
 (0)