mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-19 03:20:38 +00:00

The three panic-related library crates need to have access to `core`, and `compiler-builtins` needs to be in the crate graph. Rather than specifying both dependencies, switch these crates to use `rustc-std-workspace-core` which already does this. This means there is now a single place that the `compiler-builtins` dependency needs to get configured, for everything other than `alloc` and `std`.
39 lines
1.6 KiB
Markdown
39 lines
1.6 KiB
Markdown
# The `rustc-std-workspace-core` crate
|
|
|
|
This crate is a shim and empty crate which simply depends on `libcore` and
|
|
reexports all of its contents. The crate is the crux of empowering the standard
|
|
library to depend on crates from crates.io
|
|
|
|
Crates on crates.io that the standard library depend on need to depend on the
|
|
`rustc-std-workspace-core` crate from crates.io, which is empty. We use
|
|
`[patch]` to override it to this crate in this repository. As a result, crates
|
|
on crates.io will draw a dependency edge to `libcore`, the version defined in
|
|
this repository. That should draw all the dependency edges to ensure Cargo
|
|
builds crates successfully!
|
|
|
|
`rustc-std-workspace-core` also ensures `compiler-builtins` is in the crate
|
|
graph. This crate is used by other crates in `library/`, other than `std` and
|
|
`alloc`, so the `compiler-builtins` setup only needs to be configured in a
|
|
single place. (Otherwise these crates would just need to depend on `core` and
|
|
`compiler-builtins` separately.)
|
|
|
|
Note that crates on crates.io need to depend on this crate with the name `core`
|
|
for everything to work correctly. To do that they can use:
|
|
|
|
```toml
|
|
core = { version = "1.0.0", optional = true, package = 'rustc-std-workspace-core' }
|
|
```
|
|
|
|
Through the use of the `package` key the crate is renamed to `core`, meaning
|
|
it'll look like
|
|
|
|
```
|
|
--extern core=.../librustc_std_workspace_core-XXXXXXX.rlib
|
|
```
|
|
|
|
when Cargo invokes the compiler, satisfying the implicit `extern crate core`
|
|
directive injected by the compiler.
|
|
|
|
The sources for the crates.io version can be found in
|
|
[`src/rustc-std-workspace`](../../src/rustc-std-workspace).
|