Unit is the primary data structure representing a single execution of
the compiler. It (mostly) contains all the information needed to determine
which flags to pass to the compiler.
The entry to the compilation process is located in the
module. The compilation can be conceptually broken into these steps:
- Perform dependency resolution (see the resolution chapter).
- Generate the root
Units, the things the user requested to compile on the command-line. This is done in
- Starting from the root
Units, generate the
UnitGraphby walking the dependency graph from the resolver. The
UnitGraphcontains all of the
Unitstructs, and information about the dependency relationships between units. This is done in the
- Construct the
BuildContextwith all of the information collected so far. This is the end of the "front end" of compilation.
- Create a
Context, a large, mutable data structure that coordinates the compilation process.
Contextwill create a
JobQueue, a data structure that tracks which units need to be built.
drain_the_queuedoes the compilation process. This is the only point in Cargo that currently uses threads.
- The result of the compilation is stored in the
Compilationstruct. This can be used for various things, such as running tests after the compilation has finished.