Make the crate work both in rustc and locally

This commit is contained in:
Oli Scherer 2022-06-02 09:55:54 +00:00 committed by Oli Scherer
parent 615f8c5dbb
commit 9abcb5c7b5
6 changed files with 45 additions and 14 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
target

View File

@ -4,7 +4,10 @@ version = "0.0.0"
edition = "2021"
[dependencies]
rustc_middle = { path = "../rustc_middle" }
rustc_driver = { path = "../rustc_driver" }
rustc_borrowck = { path = "../rustc_borrowck" }
rustc_interface = { path = "../rustc_interface" }
rustc_middle = { path = "../rustc_middle", optional = true }
rustc_driver = { path = "../rustc_driver", optional = true }
rustc_borrowck = { path = "../rustc_borrowck", optional = true }
rustc_interface = { path = "../rustc_interface", optional = true }
[features]
default = ["rustc_middle", "rustc_driver", "rustc_borrowck", "rustc_interface"]

View File

@ -7,6 +7,18 @@ sync is pushed entirely onto us, without affecting rustc workflows negatively.
This may change in the future, but changes to policy should only be done via a
compiler team MCP.
## Instructions for working on this crate locally
Since the crate is the same in the rustc repo and here, the dependencies on rustc_* crates
will only either work here or there, but never in both places at the same time. Thus we use
optional dependencies on the rustc_* crates, requiring local development to use
```
cargo build --no-default-features -Zavoid-dev-deps
```
in order to compile successfully.
## Instructions for syncing
### Updating this repository

View File

@ -11,6 +11,8 @@
test(attr(allow(unused_variables), deny(warnings)))
)]
#![cfg_attr(not(feature = "default"), feature(rustc_private))]
pub mod mir;
pub mod very_unstable;

View File

@ -1,4 +1,4 @@
pub use rustc_middle::mir::{
pub use crate::very_unstable::middle::mir::{
visit::MutVisitor, AggregateKind, AssertKind, BasicBlock, BasicBlockData, BinOp, BindingForm,
BlockTailInfo, Body, BorrowKind, CastKind, ClearCrossCrate, Constant, ConstantKind,
CopyNonOverlapping, Coverage, FakeReadCause, Field, GeneratorInfo, ImplicitSelfKind,

View File

@ -3,12 +3,25 @@
//! Only use rustc_smir in your dependencies and use the reexports here instead of
//! directly referring to the unstable crates.
pub use rustc_borrowck as borrowck;
pub use rustc_driver as driver;
pub use rustc_hir as hir;
pub use rustc_interface as interface;
pub use rustc_middle as middle;
pub use rustc_mir_dataflow as dataflow;
pub use rustc_mir_transform as transform;
pub use rustc_serialize as serialize;
pub use rustc_trait_selection as trait_selection;
macro_rules! crates {
($($rustc_name:ident -> $name:ident,)*) => {
$(
#[cfg(not(feature = "default"))]
pub extern crate $rustc_name as $name;
#[cfg(feature = "default")]
pub use $rustc_name as $name;
)*
}
}
crates! {
rustc_borrowck -> borrowck,
rustc_driver -> driver,
rustc_hir -> hir,
rustc_interface -> interface,
rustc_middle -> middle,
rustc_mir_dataflow -> dataflow,
rustc_mir_transform -> transform,
rustc_serialize -> serialize,
rustc_trait_selection -> trait_selection,
}