cargo::core::compiler

Module unit_dependencies

Source
Expand description

Constructs the dependency graph for compilation.

Rust code is typically organized as a set of Cargo packages. The dependencies between the packages themselves are stored in the Resolve struct. However, we can’t use that information as is for compilation! A package typically contains several targets, or crates, and these targets has inter-dependencies. For example, you need to compile the lib target before the bin one, and you need to compile build.rs before either of those.

So, we need to lower the Resolve, which specifies dependencies between packages, to a graph of dependencies between their targets, and this is exactly what this module is doing! Well, almost exactly: another complication is that we might want to compile the same target several times (for example, with and without tests), so we actually build a dependency graph of Units, which capture these properties.

Structs§

  • State πŸ”’
    Collection of stuff used while creating the UnitGraph.

Enums§

  • A boolean-like to indicate if a Unit is an artifact or not.

Constants§

Functions§

  • Given a parent unit containing a dependency dep whose package is artifact_pkg, find all targets in artifact_pkg which refer to the deps artifact declaration and turn them into units. Due to the nature of artifact dependencies, a single dependency in a manifest can cause one or more targets to be build, for instance with artifact = ["bin:a", "bin:b", "staticlib"], which is very different from normal dependencies which cause only a single unit to be created.
  • attach_std_deps πŸ”’
    Add the standard library units to the unit_dependencies.
  • Then entry point for building a dependency graph of compilation units.
  • Find artifacts for all deps of unit and add units that build these artifacts to ret.
  • calc_deps_of_std πŸ”’
    Compute all the dependencies for the standard library.
  • Choose the correct mode for dependencies.
  • compute_deps πŸ”’
    Returns the direct unit dependencies for the given Unit.
  • Returns the dependencies needed to run a build script.
  • compute_deps_doc πŸ”’
    Returns the dependencies necessary to document a package.
  • Fill in missing dependencies for units of the RunCustomBuild
  • dep_build_script πŸ”’
    If a build script is scheduled to be run for the package specified by unit, this function will return the unit to run that build script.
  • deps_of πŸ”’
    Compute the dependencies of a single unit, recursively computing all transitive dependencies.
  • deps_of_roots πŸ”’
    Compute all the dependencies of the given root units. The result is stored in state.unit_dependencies.
  • maybe_lib πŸ”’
  • new_unit_dep πŸ”’
    Create a new Unit for a dependency from parent to pkg and target.