Skip to content

Commit 818729c

Browse files
committed
Bootstrap source stdlib from rust-src
1 parent b513663 commit 818729c

25 files changed

Lines changed: 1326 additions & 229 deletions

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ bazel_dep(name = "protobuf", version = "34.0.bcr.1", repo_name = "com_google_pro
5858
bazel_dep(name = "rules_cc", version = "0.2.8")
5959
bazel_dep(name = "rules_proto", version = "7.1.0")
6060
bazel_dep(name = "rules_python", version = "1.6.3")
61-
bazel_dep(name = "llvm", version = "0.7.7")
61+
bazel_dep(name = "llvm", version = "0.8.0")
6262
bazel_dep(name = "aspect_tools_telemetry", version = "0.3.3")
6363

6464
osx = use_extension("@llvm//extensions:osx.bzl", "osx")

MODULE.bazel.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rs/extensions.bzl

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,19 @@ def _uses_workspace_dependencies(cargo_toml_json):
8989
for spec in cargo_toml_json.get("dependencies", {}).values():
9090
if type(spec) == "dict" and spec.get("workspace") == True:
9191
return True
92-
9392
for spec in cargo_toml_json.get("build-dependencies", {}).values():
9493
if type(spec) == "dict" and spec.get("workspace") == True:
9594
return True
96-
97-
for target in cargo_toml_json.get("target", {}).values():
98-
for spec in target.get("dependencies", {}).values():
95+
for value in cargo_toml_json.get("target", {}).values():
96+
for spec in value.get("dependencies", {}).values():
97+
if type(spec) == "dict" and spec.get("workspace") == True:
98+
return True
99+
for spec in value.get("build-dependencies", {}).values():
99100
if type(spec) == "dict" and spec.get("workspace") == True:
100101
return True
101-
102102
return False
103103

104-
def _cargo_toml_fact(cargo_toml_json, annotation, workspace_cargo_toml_json, strip_prefix = ""):
104+
def _cargo_toml_fact(cargo_toml_json, annotation, workspace_cargo_toml_json, strip_prefix = None):
105105
if _uses_workspace_dependencies(cargo_toml_json):
106106
workspace = (workspace_cargo_toml_json or {}).get("workspace")
107107
if not workspace and annotation.workspace_cargo_toml != "Cargo.toml":
@@ -164,20 +164,21 @@ def _generate_hub_and_spokes(
164164
existing_facts = getattr(mctx, "facts", {}) or {}
165165
facts = {}
166166

167-
split_packages = split_lockfile_packages(
168-
hub_name,
169-
cargo_metadata,
170-
workspace_cargo_toml_json,
171-
all_packages,
167+
workspace_root = _normalize_path(cargo_metadata["workspace_root"])
168+
lockfile_package_info = split_lockfile_packages(
169+
hub_name = hub_name,
170+
cargo_metadata = cargo_metadata,
171+
all_packages = all_packages,
172+
workspace_cargo_toml = workspace_cargo_toml_json,
173+
repo_root = workspace_root,
172174
)
173-
packages = split_packages.packages
174-
workspace_members = split_packages.workspace_members
175+
workspace_members = lockfile_package_info.workspace_members
176+
packages = lockfile_package_info.packages
175177

176178
mctx.report_progress("Computing dependencies and features")
177179

178180
facts_by_fq_crate = {}
179-
for package_index in range(len(packages)):
180-
package = packages[package_index]
181+
for package in packages:
181182
name = package["name"]
182183
version = package["version"]
183184
source = package["source"]
@@ -238,7 +239,8 @@ def _generate_hub_and_spokes(
238239
mctx.watch(mctx.path(cargo_toml_path))
239240
annotation = annotation_for(annotations, name, package["version"])
240241
cargo_toml_json = run_toml2json(mctx, cargo_toml_path)
241-
fact = _cargo_toml_fact(cargo_toml_json, annotation, {})
242+
243+
fact = _cargo_toml_fact(cargo_toml_json, annotation, workspace_cargo_toml_json, strip_prefix = "")
242244

243245
facts[key] = json.encode(fact)
244246
package["strip_prefix"] = fact.get("strip_prefix", "")
@@ -276,9 +278,9 @@ def _generate_hub_and_spokes(
276278

277279
facts_by_fq_crate[_fq_crate(name, version)] = fact
278280

279-
resolved_facts = resolve_package_facts(packages, facts_by_fq_crate, platform_triples)
280-
feature_resolutions_by_fq_crate = resolved_facts.feature_resolutions_by_fq_crate
281-
versions_by_name = resolved_facts.versions_by_name
281+
package_fact_info = resolve_package_facts(packages, facts_by_fq_crate, platform_triples)
282+
versions_by_name = package_fact_info.versions_by_name
283+
feature_resolutions_by_fq_crate = package_fact_info.feature_resolutions_by_fq_crate
282284

283285
# Only files in the current Bazel workspace can/should be watched, so check where our manifests are located.
284286
watch_manifests = cargo_lock_path.repo_name == ""

rs/platforms/config/declare_config_settings.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"""Config settings for Rust target triples."""
22

3-
load("//rs/platforms:triples.bzl", "SUPPORTED_TARGET_TRIPLES", "triple_to_constraint_set")
3+
load("//rs/platforms:triples.bzl", "ALL_TARGET_TRIPLES", "triple_to_constraint_set")
44

5-
def declare_config_settings(targets = SUPPORTED_TARGET_TRIPLES):
5+
def declare_config_settings(targets = ALL_TARGET_TRIPLES):
66
for target_triple in targets:
77
native.config_setting(
88
name = target_triple,

rs/platforms/declare_platforms.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"""Platform definitions for Rust target triples."""
22

3-
load("//rs/platforms:triples.bzl", "SUPPORTED_TARGET_TRIPLES", "triple_to_constraint_set")
3+
load("//rs/platforms:triples.bzl", "ALL_TARGET_TRIPLES", "triple_to_constraint_set")
44

5-
def declare_platforms(targets = SUPPORTED_TARGET_TRIPLES):
5+
def declare_platforms(targets = ALL_TARGET_TRIPLES):
66
for target_triple in targets:
77
native.platform(
88
name = target_triple,

rs/platforms/triples.bzl

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ def triple_to_constraint_set(target_triple):
99
t = triple(target_triple)
1010

1111
if t.system in ("linux", "nixos"):
12+
# TODO: Add LLVM constraint support for libc-less Linux builds.
13+
# if t.abi == "none":
14+
# constraints.append("@llvm//constraints/libc:unconstrained")
15+
# elif t.abi == "musl" or "musl" in target_triple:
1216
if t.abi == "musl" or "musl" in target_triple:
1317
# Rustc passes `-no-pie` on musl so make sure we align.
1418
constraints.append("@llvm//constraints/libc:musl")
@@ -36,7 +40,7 @@ SUPPORTED_EXEC_TRIPLES = [
3640
]
3741

3842
# See https://doc.rust-lang.org/beta/rustc/platform-support.html
39-
SUPPORTED_TARGET_TRIPLES = [
43+
SUPPORTED_TIER_1_AND_2_TRIPLES = [
4044
# Tier 1
4145
"aarch64-apple-darwin", # ARM64 macOS (11.0+, Big Sur+)
4246
"aarch64-pc-windows-msvc", # ARM64 Windows MSVC
@@ -142,6 +146,42 @@ SUPPORTED_TARGET_TRIPLES = [
142146
"x86_64-unknown-none", # * Freestanding/bare-metal x86_64, softfloat
143147
#"x86_64-unknown-redox", # ✓ Redox OS
144148
"x86_64-unknown-uefi", # ? 64-bit UEFI
149+
]
145150

146-
# No Tier3 support.
151+
SUPPORTED_TIER_3_TRIPLES = [
152+
"aarch64-unknown-freebsd",
153+
"aarch64-unknown-netbsd",
154+
"aarch64-unknown-nto-qnx710",
155+
"aarch64-unknown-openbsd",
156+
"arm64e-apple-darwin",
157+
"arm64e-apple-ios",
158+
"armv7-unknown-freebsd",
159+
"armv7-unknown-netbsd-eabihf",
160+
"bpfeb-unknown-none",
161+
"bpfel-unknown-none",
162+
"i386-apple-ios",
163+
"i686-apple-darwin",
164+
"i686-unknown-netbsd",
165+
"i686-unknown-openbsd",
166+
"powerpc-unknown-freebsd",
167+
"powerpc-unknown-linux-musl",
168+
"powerpc-unknown-netbsd",
169+
"powerpc-unknown-openbsd",
170+
"powerpc64-unknown-freebsd",
171+
"powerpc64-unknown-openbsd",
172+
"powerpc64le-unknown-freebsd",
173+
"riscv64-linux-android",
174+
"riscv64gc-unknown-freebsd",
175+
"riscv64gc-unknown-fuchsia",
176+
"riscv64gc-unknown-netbsd",
177+
"riscv64gc-unknown-openbsd",
178+
"s390x-unknown-linux-musl",
179+
"sparc64-unknown-netbsd",
180+
"sparc64-unknown-openbsd",
181+
"wasm64-unknown-unknown",
182+
# TODO: Enable once @llvm has constraint support for libc-less Linux builds.
183+
# "x86_64-unknown-linux-none",
184+
"x86_64-unknown-openbsd",
147185
]
186+
187+
ALL_TARGET_TRIPLES = SUPPORTED_TIER_1_AND_2_TRIPLES + SUPPORTED_TIER_3_TRIPLES

rs/private/BUILD.bazel

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,36 @@
11
load("@bazel_lib//:bzl_library.bzl", "bzl_library")
2+
load("@bazel_skylib//rules:common_settings.bzl", "bool_setting")
3+
load("@rules_rust//rust:defs.bzl", "rust_stdlib_filegroup")
24
load(":all_crate_deps_test.bzl", "all_crate_deps_tests")
5+
load(":cargo_workspace_graph_test.bzl", "cargo_workspace_graph_tests")
36
load(":cfg_parser_test.bzl", "cfg_parser_tests")
47
load(":lint_flags_test.bzl", "lint_flags_tests")
58
load(":semver_test.bzl", "semver_select_tests")
69

10+
bool_setting(
11+
name = "source_stdlib_building",
12+
build_setting_default = False,
13+
visibility = ["//visibility:public"],
14+
)
15+
16+
config_setting(
17+
name = "is_source_stdlib_building",
18+
flag_values = {
19+
":source_stdlib_building": "true",
20+
},
21+
visibility = ["//visibility:public"],
22+
)
23+
24+
rust_stdlib_filegroup(
25+
name = "empty_stdlib",
26+
srcs = [],
27+
visibility = ["//visibility:public"],
28+
)
29+
730
all_crate_deps_tests()
831

32+
cargo_workspace_graph_tests()
33+
934
cfg_parser_tests()
1035

1136
lint_flags_tests()
@@ -109,6 +134,13 @@ bzl_library(
109134
deps = ["@bazel_lib//lib:repo_utils"],
110135
)
111136

137+
bzl_library(
138+
name = "source_stdlib",
139+
srcs = ["source_stdlib.bzl"],
140+
visibility = ["//rs:__subpackages__"],
141+
deps = ["@rules_rust//rust:bzl_lib"],
142+
)
143+
112144
bzl_library(
113145
name = "git_cargo_workspace_repository",
114146
srcs = ["git_cargo_workspace_repository.bzl"],
@@ -126,6 +158,7 @@ bzl_library(
126158
srcs = ["cargo_repository.bzl"],
127159
visibility = ["//rs:__subpackages__"],
128160
deps = [
161+
"//rs/private:rust_repository_utils",
129162
"@rules_rust//rust/platform:bzl_lib",
130163
"@rules_rust//rust/private:bzl_lib",
131164
],
@@ -169,6 +202,11 @@ bzl_library(
169202
srcs = ["rust_src_repository.bzl"],
170203
visibility = ["//rs:__subpackages__"],
171204
deps = [
205+
":cargo_workspace_graph",
206+
":repository_utils",
207+
":toml2json",
208+
"//rs/platforms:triples",
209+
"@bazel_skylib//lib:paths",
172210
"@bazel_tools//tools/build_defs/repo:utils.bzl",
173211
"@rules_rust//rust/private:bzl_lib",
174212
],

0 commit comments

Comments
 (0)