Expand description
The entry point for starting the compilation process for commands like
build
, test
, doc
, rustc
, etc.
The compile
function will do all the work to compile a workspace. A
rough outline is:
- Resolve the dependency graph (see
ops::resolve
). - Download any packages needed (see
PackageSet
). - Generate a list of top-level “units” of work for the targets the user
requested on the command-line. Each
Unit
corresponds to a compiler invocation. This is done in this module (UnitGenerator::generate_root_units
). - Starting from the root
Unit
s, generate theUnitGraph
by walking the dependency graph from the resolver. See alsounit_dependencies
. - Construct the
BuildContext
with all of the information collected so far. This is the end of the “front end” of compilation. - Create a
BuildRunner
which coordinates the compilation process and will perform the following steps:- Prepare the
target
directory (seeLayout
). - Create a
JobQueue
. The queue checks the fingerprint of eachUnit
to determine if it should run or be skipped. - Execute the queue via
drain_the_queue
. Each leaf in the queue’s dependency graph is executed, and then removed from the graph when finished. This repeats until the queue is empty. Note that this is the only point in cargo that currently uses threads.
- Prepare the
- The result of the compilation is stored in the
Compilation
struct. This can be used for various things, such as running tests after the compilation has finished.
Note: “target” inside this module generally refers to “Cargo Target”, which corresponds to artifact that will be built in a package. Not to be confused with target-triple or target architecture.
Re-exports§
pub use compile_filter::CompileFilter;
pub use compile_filter::FilterRule;
pub use compile_filter::LibRule;
pub use packages::Packages;
Modules§
Structs§
- Contains information about how a package should be compiled.
Functions§
- Compiles!
- Like
compile_with_exec
but without warnings from manifest parsing. - Prepares all required information for the actual compilation.
- Override crate types for given units.
- Executes
rustc --print <VALUE>
. - This is used to rebuild the unit graph, sharing host dependencies if possible, and applying other unit adjustments based on the whole graph.
- Removes duplicate
CompileMode::Doc
units that would cause problems with filename collisions. - Gets all of the features enabled for a package, plus its dependencies’ features.
- Recursive function for rebuilding the graph.