This crate is currently developed in-tree together with the compiler.
Our goal is to start publishing stable_mir into crates.io. Until then, users will use this as any other rustc crate, by installing the rustup component rustc-dev, and declaring stable-mir as an external crate.
See the StableMIR “Getting Started” guide for more information.
The stable-mir will follow a similar approach to proc-macro2. Its implementation is split between two main crates:
stable_mir: Public crate, to be published on crates.io, which will contain the stable data structure as well as calls to rustc_smir APIs. The translation between stable and internal constructs will also be done in this crate, however, this is currently implemented in the rustc_smir crate.[^translation].rustc_smir: This crate implements the public APIs to the compiler. It is responsible for gathering all the information requested, and providing the data in its unstable form.[^translation]: This is currently implemented in the rustc_smir crate, but we are working to change that.
I.e., tools will depend on stable_mir crate, which will invoke the compiler using APIs defined in rustc_smir.
I.e.:
┌──────────────────────────────────┐ ┌──────────────────────────────────┐
│ External Tool ┌──────────┐ │ │ ┌──────────┐ Rust Compiler │
│ │ │ │ │ │ │ │
│ │stable_mir| │ │ │rustc_smir│ │
│ │ │ ├──────────►| │ │ │
│ │ │ │◄──────────┤ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ └──────────┘ │ │ └──────────┘ │
└──────────────────────────────────┘ └──────────────────────────────────┘
More details can be found here: https://hackmd.io/XhnYHKKuR6-LChhobvlT-g?view