build: vendor Rust crate dependencies
This commit is contained in:
436
third_party/crates/crates.bzl
vendored
Normal file
436
third_party/crates/crates.bzl
vendored
Normal file
@@ -0,0 +1,436 @@
|
||||
###############################################################################
|
||||
# @generated
|
||||
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
|
||||
# regenerate this file, run the following:
|
||||
#
|
||||
# bazel run @@//third_party:vendor_crates
|
||||
###############################################################################
|
||||
"""
|
||||
# `crates_repository` API
|
||||
|
||||
- [aliases](#aliases)
|
||||
- [crate_edition](#crate_edition)
|
||||
- [crate_deps](#crate_deps)
|
||||
- [all_crate_deps](#all_crate_deps)
|
||||
- [crate_repositories](#crate_repositories)
|
||||
|
||||
"""
|
||||
|
||||
load("@bazel_skylib//lib:selects.bzl", "selects")
|
||||
|
||||
###############################################################################
|
||||
# MACROS API
|
||||
###############################################################################
|
||||
|
||||
# An identifier that represent common dependencies (unconditional).
|
||||
_COMMON_CONDITION = ""
|
||||
|
||||
def _flatten_dependency_maps(all_dependency_maps):
|
||||
"""Flatten a list of dependency maps into one dictionary.
|
||||
|
||||
Dependency maps have the following structure:
|
||||
|
||||
```python
|
||||
DEPENDENCIES_MAP = {
|
||||
# The first key in the map is a Bazel package
|
||||
# name of the workspace this file is defined in.
|
||||
"workspace_member_package": {
|
||||
|
||||
# Not all dependencies are supported for all platforms.
|
||||
# the condition key is the condition required to be true
|
||||
# on the host platform.
|
||||
"condition": {
|
||||
|
||||
# An alias to a crate target. # The label of the crate target the
|
||||
# Aliases are only crate names. # package name refers to.
|
||||
"package_name": "@full//:label",
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Args:
|
||||
all_dependency_maps (list): A list of dicts as described above
|
||||
|
||||
Returns:
|
||||
dict: A dictionary as described above
|
||||
"""
|
||||
dependencies = {}
|
||||
|
||||
for workspace_deps_map in all_dependency_maps:
|
||||
for pkg_name, conditional_deps_map in workspace_deps_map.items():
|
||||
if pkg_name not in dependencies:
|
||||
non_frozen_map = dict()
|
||||
for key, values in conditional_deps_map.items():
|
||||
non_frozen_map.update({key: dict(values.items())})
|
||||
dependencies.setdefault(pkg_name, non_frozen_map)
|
||||
continue
|
||||
|
||||
for condition, deps_map in conditional_deps_map.items():
|
||||
# If the condition has not been recorded, do so and continue
|
||||
if condition not in dependencies[pkg_name]:
|
||||
dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
|
||||
continue
|
||||
|
||||
# Alert on any miss-matched dependencies
|
||||
inconsistent_entries = []
|
||||
for crate_name, crate_label in deps_map.items():
|
||||
existing = dependencies[pkg_name][condition].get(crate_name)
|
||||
if existing and existing != crate_label:
|
||||
inconsistent_entries.append((crate_name, existing, crate_label))
|
||||
dependencies[pkg_name][condition].update({crate_name: crate_label})
|
||||
|
||||
return dependencies
|
||||
|
||||
def crate_deps(deps, package_name = None):
|
||||
"""Finds the fully qualified label of the requested crates for the package where this macro is called.
|
||||
|
||||
Args:
|
||||
deps (list): The desired list of crate targets.
|
||||
package_name (str, optional): The package name of the set of dependencies to look up.
|
||||
Defaults to `native.package_name()`.
|
||||
|
||||
Returns:
|
||||
list: A list of labels to generated rust targets (str)
|
||||
"""
|
||||
|
||||
if not deps:
|
||||
return []
|
||||
|
||||
if package_name == None:
|
||||
package_name = native.package_name()
|
||||
|
||||
# Join both sets of dependencies
|
||||
dependencies = _flatten_dependency_maps([
|
||||
_NORMAL_DEPENDENCIES,
|
||||
_NORMAL_DEV_DEPENDENCIES,
|
||||
_PROC_MACRO_DEPENDENCIES,
|
||||
_PROC_MACRO_DEV_DEPENDENCIES,
|
||||
_BUILD_DEPENDENCIES,
|
||||
_BUILD_PROC_MACRO_DEPENDENCIES,
|
||||
]).pop(package_name, {})
|
||||
|
||||
# Combine all conditional packages so we can easily index over a flat list
|
||||
# TODO: Perhaps this should actually return select statements and maintain
|
||||
# the conditionals of the dependencies
|
||||
flat_deps = {}
|
||||
for deps_set in dependencies.values():
|
||||
for crate_name, crate_label in deps_set.items():
|
||||
flat_deps.update({crate_name: crate_label})
|
||||
|
||||
missing_crates = []
|
||||
crate_targets = []
|
||||
for crate_target in deps:
|
||||
if crate_target not in flat_deps:
|
||||
missing_crates.append(crate_target)
|
||||
else:
|
||||
crate_targets.append(flat_deps[crate_target])
|
||||
|
||||
if missing_crates:
|
||||
fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
|
||||
missing_crates,
|
||||
package_name,
|
||||
dependencies,
|
||||
))
|
||||
|
||||
return crate_targets
|
||||
|
||||
def crate_edition(package_name = None):
|
||||
"""Finds the Rust edition for the package where this macro is called.
|
||||
|
||||
Args:
|
||||
package_name (str, optional): The package name whose edition should be
|
||||
looked up. Defaults to `native.package_name()` when unset.
|
||||
|
||||
Returns:
|
||||
str: The Rust edition declared by the package's Cargo.toml file.
|
||||
"""
|
||||
if package_name == None:
|
||||
package_name = native.package_name()
|
||||
|
||||
if package_name not in _CRATE_EDITIONS:
|
||||
fail("Tried to get crate_edition for package " + package_name + " but that package had no Cargo.toml file")
|
||||
|
||||
return _CRATE_EDITIONS[package_name]
|
||||
|
||||
def all_crate_deps(
|
||||
normal = False,
|
||||
normal_dev = False,
|
||||
proc_macro = False,
|
||||
proc_macro_dev = False,
|
||||
build = False,
|
||||
build_proc_macro = False,
|
||||
package_name = None):
|
||||
"""Finds the fully qualified label of all requested direct crate dependencies \
|
||||
for the package where this macro is called.
|
||||
|
||||
If no parameters are set, all normal dependencies are returned. Setting any one flag will
|
||||
otherwise impact the contents of the returned list.
|
||||
|
||||
Args:
|
||||
normal (bool, optional): If True, normal dependencies are included in the
|
||||
output list.
|
||||
normal_dev (bool, optional): If True, normal dev dependencies will be
|
||||
included in the output list.
|
||||
proc_macro (bool, optional): If True, proc_macro dependencies are included
|
||||
in the output list.
|
||||
proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
|
||||
included in the output list.
|
||||
build (bool, optional): If True, build dependencies are included
|
||||
in the output list.
|
||||
build_proc_macro (bool, optional): If True, build proc_macro dependencies are
|
||||
included in the output list.
|
||||
package_name (str, optional): The package name of the set of dependencies to look up.
|
||||
Defaults to `native.package_name()` when unset.
|
||||
|
||||
Returns:
|
||||
list: A list of labels to generated rust targets (str)
|
||||
"""
|
||||
|
||||
if package_name == None:
|
||||
package_name = native.package_name()
|
||||
|
||||
# Determine the relevant maps to use
|
||||
all_dependency_maps = []
|
||||
if normal:
|
||||
all_dependency_maps.append(_NORMAL_DEPENDENCIES)
|
||||
if normal_dev:
|
||||
all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
|
||||
if proc_macro:
|
||||
all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
|
||||
if proc_macro_dev:
|
||||
all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
|
||||
if build:
|
||||
all_dependency_maps.append(_BUILD_DEPENDENCIES)
|
||||
if build_proc_macro:
|
||||
all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
|
||||
|
||||
# Default to always using normal dependencies
|
||||
if not all_dependency_maps:
|
||||
all_dependency_maps.append(_NORMAL_DEPENDENCIES)
|
||||
|
||||
dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
|
||||
|
||||
if not dependencies:
|
||||
if dependencies == None:
|
||||
fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
|
||||
else:
|
||||
return []
|
||||
|
||||
crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
|
||||
for condition, deps in dependencies.items():
|
||||
crate_deps += selects.with_or({
|
||||
tuple(_CONDITIONS[condition]): deps.values(),
|
||||
"//conditions:default": [],
|
||||
})
|
||||
|
||||
return crate_deps
|
||||
|
||||
def aliases(
|
||||
normal = False,
|
||||
normal_dev = False,
|
||||
proc_macro = False,
|
||||
proc_macro_dev = False,
|
||||
build = False,
|
||||
build_proc_macro = False,
|
||||
package_name = None):
|
||||
"""Produces a map of Crate alias names to their original label
|
||||
|
||||
If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
|
||||
Setting any one flag will otherwise determine the contents of the returned dict.
|
||||
|
||||
Args:
|
||||
normal (bool, optional): If True, normal dependencies are included in the
|
||||
output list.
|
||||
normal_dev (bool, optional): If True, normal dev dependencies will be
|
||||
included in the output list..
|
||||
proc_macro (bool, optional): If True, proc_macro dependencies are included
|
||||
in the output list.
|
||||
proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
|
||||
included in the output list.
|
||||
build (bool, optional): If True, build dependencies are included
|
||||
in the output list.
|
||||
build_proc_macro (bool, optional): If True, build proc_macro dependencies are
|
||||
included in the output list.
|
||||
package_name (str, optional): The package name of the set of dependencies to look up.
|
||||
Defaults to `native.package_name()` when unset.
|
||||
|
||||
Returns:
|
||||
dict: The aliases of all associated packages
|
||||
"""
|
||||
if package_name == None:
|
||||
package_name = native.package_name()
|
||||
|
||||
# Determine the relevant maps to use
|
||||
all_aliases_maps = []
|
||||
if normal:
|
||||
all_aliases_maps.append(_NORMAL_ALIASES)
|
||||
if normal_dev:
|
||||
all_aliases_maps.append(_NORMAL_DEV_ALIASES)
|
||||
if proc_macro:
|
||||
all_aliases_maps.append(_PROC_MACRO_ALIASES)
|
||||
if proc_macro_dev:
|
||||
all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
|
||||
if build:
|
||||
all_aliases_maps.append(_BUILD_ALIASES)
|
||||
if build_proc_macro:
|
||||
all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
|
||||
|
||||
# Default to always using normal aliases
|
||||
if not all_aliases_maps:
|
||||
all_aliases_maps.append(_NORMAL_ALIASES)
|
||||
all_aliases_maps.append(_PROC_MACRO_ALIASES)
|
||||
|
||||
aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
|
||||
|
||||
if not aliases:
|
||||
return dict()
|
||||
|
||||
common_items = aliases.pop(_COMMON_CONDITION, {}).items()
|
||||
|
||||
# If there are only common items in the dictionary, immediately return them
|
||||
if not len(aliases.keys()) == 1:
|
||||
return dict(common_items)
|
||||
|
||||
# Build a single select statement where each conditional has accounted for the
|
||||
# common set of aliases.
|
||||
crate_aliases = {"//conditions:default": dict(common_items)}
|
||||
for condition, deps in aliases.items():
|
||||
condition_triples = _CONDITIONS[condition]
|
||||
for triple in condition_triples:
|
||||
if triple in crate_aliases:
|
||||
crate_aliases[triple].update(deps)
|
||||
else:
|
||||
crate_aliases.update({triple: dict(deps.items() + common_items)})
|
||||
|
||||
return select(crate_aliases)
|
||||
|
||||
###############################################################################
|
||||
# WORKSPACE MEMBER DEPS, ALIASES, AND EDITIONS
|
||||
###############################################################################
|
||||
|
||||
_CRATE_EDITIONS = {
|
||||
"src/machoke": "2024",
|
||||
}
|
||||
|
||||
_NORMAL_DEPENDENCIES = {
|
||||
"src/machoke": {
|
||||
_COMMON_CONDITION: {
|
||||
"anyhow": Label("//third_party/crates/anyhow-1.0.104:anyhow"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
_NORMAL_ALIASES = {
|
||||
"src/machoke": {
|
||||
_COMMON_CONDITION: {
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
_NORMAL_DEV_DEPENDENCIES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_NORMAL_DEV_ALIASES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_PROC_MACRO_DEPENDENCIES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_PROC_MACRO_ALIASES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_PROC_MACRO_DEV_DEPENDENCIES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_PROC_MACRO_DEV_ALIASES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_BUILD_DEPENDENCIES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_BUILD_ALIASES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_BUILD_PROC_MACRO_DEPENDENCIES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_BUILD_PROC_MACRO_ALIASES = {
|
||||
"src/machoke": {
|
||||
},
|
||||
}
|
||||
|
||||
_CONDITIONS = {
|
||||
"aarch64-apple-darwin": ["@rules_rust//rust/platform:aarch64-apple-darwin"],
|
||||
"aarch64-apple-ios": ["@rules_rust//rust/platform:aarch64-apple-ios"],
|
||||
"aarch64-apple-ios-macabi": ["@rules_rust//rust/platform:aarch64-apple-ios-macabi"],
|
||||
"aarch64-apple-ios-sim": ["@rules_rust//rust/platform:aarch64-apple-ios-sim"],
|
||||
"aarch64-linux-android": ["@rules_rust//rust/platform:aarch64-linux-android"],
|
||||
"aarch64-pc-windows-msvc": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc"],
|
||||
"aarch64-unknown-fuchsia": ["@rules_rust//rust/platform:aarch64-unknown-fuchsia"],
|
||||
"aarch64-unknown-linux-gnu": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu"],
|
||||
"aarch64-unknown-nixos-gnu": ["@rules_rust//rust/platform:aarch64-unknown-nixos-gnu"],
|
||||
"aarch64-unknown-none": ["@rules_rust//rust/platform:aarch64-unknown-none"],
|
||||
"aarch64-unknown-nto-qnx710": ["@rules_rust//rust/platform:aarch64-unknown-nto-qnx710"],
|
||||
"aarch64-unknown-uefi": ["@rules_rust//rust/platform:aarch64-unknown-uefi"],
|
||||
"arm-unknown-linux-gnueabi": ["@rules_rust//rust/platform:arm-unknown-linux-gnueabi"],
|
||||
"arm-unknown-linux-musleabi": ["@rules_rust//rust/platform:arm-unknown-linux-musleabi"],
|
||||
"armv7-linux-androideabi": ["@rules_rust//rust/platform:armv7-linux-androideabi"],
|
||||
"armv7-unknown-linux-gnueabi": ["@rules_rust//rust/platform:armv7-unknown-linux-gnueabi"],
|
||||
"i686-apple-darwin": ["@rules_rust//rust/platform:i686-apple-darwin"],
|
||||
"i686-linux-android": ["@rules_rust//rust/platform:i686-linux-android"],
|
||||
"i686-pc-windows-msvc": ["@rules_rust//rust/platform:i686-pc-windows-msvc"],
|
||||
"i686-unknown-freebsd": ["@rules_rust//rust/platform:i686-unknown-freebsd"],
|
||||
"i686-unknown-linux-gnu": ["@rules_rust//rust/platform:i686-unknown-linux-gnu"],
|
||||
"loongarch64-unknown-linux-gnu": ["@rules_rust//rust/platform:loongarch64-unknown-linux-gnu"],
|
||||
"mips-unknown-linux-gnu": ["@rules_rust//rust/platform:mips-unknown-linux-gnu"],
|
||||
"powerpc-unknown-linux-gnu": ["@rules_rust//rust/platform:powerpc-unknown-linux-gnu"],
|
||||
"riscv32imac-unknown-none-elf": ["@rules_rust//rust/platform:riscv32imac-unknown-none-elf"],
|
||||
"riscv32imc-unknown-none-elf": ["@rules_rust//rust/platform:riscv32imc-unknown-none-elf"],
|
||||
"riscv64gc-unknown-linux-gnu": ["@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu"],
|
||||
"riscv64gc-unknown-none-elf": ["@rules_rust//rust/platform:riscv64gc-unknown-none-elf"],
|
||||
"s390x-unknown-linux-gnu": ["@rules_rust//rust/platform:s390x-unknown-linux-gnu"],
|
||||
"sparc64-unknown-linux-gnu": ["@rules_rust//rust/platform:sparc64-unknown-linux-gnu"],
|
||||
"sparc64-unknown-netbsd": ["@rules_rust//rust/platform:sparc64-unknown-netbsd"],
|
||||
"sparc64-unknown-openbsd": ["@rules_rust//rust/platform:sparc64-unknown-openbsd"],
|
||||
"thumbv6m-none-eabi": ["@rules_rust//rust/platform:thumbv6m-none-eabi"],
|
||||
"thumbv7em-none-eabi": ["@rules_rust//rust/platform:thumbv7em-none-eabi"],
|
||||
"thumbv7em-none-eabihf": ["@rules_rust//rust/platform:thumbv7em-none-eabihf"],
|
||||
"thumbv7m-none-eabi": ["@rules_rust//rust/platform:thumbv7m-none-eabi"],
|
||||
"thumbv8m.main-none-eabi": ["@rules_rust//rust/platform:thumbv8m.main-none-eabi"],
|
||||
"thumbv8m.main-none-eabihf": ["@rules_rust//rust/platform:thumbv8m.main-none-eabihf"],
|
||||
"wasm32-unknown-emscripten": ["@rules_rust//rust/platform:wasm32-unknown-emscripten"],
|
||||
"wasm32-unknown-unknown": ["@rules_rust//rust/platform:wasm32-unknown-unknown"],
|
||||
"wasm32-wasip1": ["@rules_rust//rust/platform:wasm32-wasip1"],
|
||||
"wasm32-wasip1-threads": ["@rules_rust//rust/platform:wasm32-wasip1-threads"],
|
||||
"wasm32-wasip2": ["@rules_rust//rust/platform:wasm32-wasip2"],
|
||||
"x86_64-apple-darwin": ["@rules_rust//rust/platform:x86_64-apple-darwin"],
|
||||
"x86_64-apple-ios": ["@rules_rust//rust/platform:x86_64-apple-ios"],
|
||||
"x86_64-apple-ios-macabi": ["@rules_rust//rust/platform:x86_64-apple-ios-macabi"],
|
||||
"x86_64-linux-android": ["@rules_rust//rust/platform:x86_64-linux-android"],
|
||||
"x86_64-pc-windows-msvc": ["@rules_rust//rust/platform:x86_64-pc-windows-msvc"],
|
||||
"x86_64-unknown-freebsd": ["@rules_rust//rust/platform:x86_64-unknown-freebsd"],
|
||||
"x86_64-unknown-fuchsia": ["@rules_rust//rust/platform:x86_64-unknown-fuchsia"],
|
||||
"x86_64-unknown-linux-gnu": ["@rules_rust//rust/platform:x86_64-unknown-linux-gnu"],
|
||||
"x86_64-unknown-nixos-gnu": ["@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"],
|
||||
"x86_64-unknown-none": ["@rules_rust//rust/platform:x86_64-unknown-none"],
|
||||
"x86_64-unknown-uefi": ["@rules_rust//rust/platform:x86_64-unknown-uefi"],
|
||||
}
|
||||
Reference in New Issue
Block a user