Skip to content

Commit

Permalink
Make the crate work both in rustc and locally
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Jun 2, 2022
1 parent 615f8c5 commit 9abcb5c
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 14 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
target
11 changes: 7 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
2 changes: 1 addition & 1 deletion src/mir.rs
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
31 changes: 22 additions & 9 deletions src/very_unstable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

0 comments on commit 9abcb5c

Please sign in to comment.