# Struct cargo::core::compiler::compilation::Compilation

source ·

    pub struct Compilation<'gctx> {Show 17 fields
        pub tests: Vec<UnitOutput>,
        pub binaries: Vec<UnitOutput>,
        pub cdylibs: Vec<UnitOutput>,
        pub root_crate_names: Vec<String>,
        pub native_dirs: BTreeSet<PathBuf>,
        pub root_output: HashMap<CompileKind, PathBuf>,
        pub deps_output: HashMap<CompileKind, PathBuf>,
        sysroot_target_libdir: HashMap<CompileKind, PathBuf>,
        pub extra_env: HashMap<Metadata, Vec<(String, String)>>,
        pub to_doc_test: Vec<Doctest>,
        pub host: String,
        gctx: &'gctx GlobalContext,
        rustc_process: ProcessBuilder,
        rustc_workspace_wrapper_process: ProcessBuilder,
        primary_rustc_process: Option<ProcessBuilder>,
        target_runners: HashMap<CompileKind, Option<(PathBuf, Vec<String>)>>,
        target_linkers: HashMap<CompileKind, Option<PathBuf>>,
    }

Expand description

A structure returning the result of a compilation.

## Fields§

§`tests: Vec<UnitOutput>`

An array of all tests created during this compilation.

§`binaries: Vec<UnitOutput>`

An array of all binaries created.

§`cdylibs: Vec<UnitOutput>`

An array of all cdylibs created.

§`root_crate_names: Vec<String>`

The crate names of the root units specified on the command-line.

§`native_dirs: BTreeSet<PathBuf>`

All directories for the output of native build commands.

This is currently used to drive some entries which are added to the LD_LIBRARY_PATH as appropriate.

The order should be deterministic.

§`root_output: HashMap<CompileKind, PathBuf>`

Root output directory (for the local package’s artifacts)

§`deps_output: HashMap<CompileKind, PathBuf>`

Output directory for rust dependencies. May be for the host or for a specific target.

§`sysroot_target_libdir: HashMap<CompileKind, PathBuf>`

The path to libstd for each target

§`extra_env: HashMap<Metadata, Vec<(String, String)>>`

Extra environment variables that were passed to compilations and should be passed to future invocations of programs.

The key is the build script metadata for uniquely identifying the `RunCustomBuild` unit that generated these env vars.

§`to_doc_test: Vec<Doctest>`

Libraries to test with rustdoc.

§`host: String`

The target host triple.

§`gctx: &'gctx GlobalContext`§`rustc_process: ProcessBuilder`

Rustc process to be used by default

§`rustc_workspace_wrapper_process: ProcessBuilder`

Rustc process to be used for workspace crates instead of rustc_process

§`primary_rustc_process: Option<ProcessBuilder>`

Optional rustc process to be used for primary crates instead of either rustc_process or rustc_workspace_wrapper_process

§`target_runners: HashMap<CompileKind, Option<(PathBuf, Vec<String>)>>`§`target_linkers: HashMap<CompileKind, Option<PathBuf>>`

The linker to use for each host or target.

## Implementations§

source§

### impl<'gctx> Compilation<'gctx>

source

#### pub fn new<'a>(bcx: &BuildContext<'a, 'gctx>) -> CargoResult<Compilation<'gctx>>

source

#### pub fn rustc_process( &self, unit: &Unit, is_primary: bool, is_workspace: bool ) -> CargoResult<ProcessBuilder>

Returns a `ProcessBuilder` for running `rustc`.

`is_primary` is true if this is a “primary package”, which means it was selected by the user on the command-line (such as with a `-p` flag), see `crate::core::compiler::BuildRunner::primary_packages`.

`is_workspace` is true if this is a workspace member.

source

#### pub fn rustdoc_process( &self, unit: &Unit, script_meta: Option<Metadata> ) -> CargoResult<ProcessBuilder>

Returns a `ProcessBuilder` for running `rustdoc`.

source

#### pub fn host_process<T: AsRef<OsStr>>( &self, cmd: T, pkg: &Package ) -> CargoResult<ProcessBuilder>

Returns a `ProcessBuilder` appropriate for running a process for the host platform.

This is currently only used for running build scripts. If you use this for anything else, please be extra careful on how environment variables are set!

source

#### pub fn target_runner( &self, kind: CompileKind ) -> Option<&(PathBuf, Vec<String>)>

source

#### pub fn target_linker(&self, kind: CompileKind) -> Option<PathBuf>

Gets the user-specified linker for a particular host or target.

source

#### pub fn target_process<T: AsRef<OsStr>>( &self, cmd: T, kind: CompileKind, pkg: &Package, script_meta: Option<Metadata> ) -> CargoResult<ProcessBuilder>

Returns a `ProcessBuilder` appropriate for running a process for the target platform. This is typically used for `cargo run` and `cargo test`.

`script_meta` is the metadata for the `RunCustomBuild` unit that this unit used for its build script. Use `None` if the package did not have a build script.

source

#### fn fill_env( &self, cmd: ProcessBuilder, pkg: &Package, script_meta: Option<Metadata>, kind: CompileKind, tool_kind: ToolKind ) -> CargoResult<ProcessBuilder>

Prepares a new process with an appropriate environment to run against the artifacts produced by the build process.

The package argument is also used to configure environment variables as well as the working directory of the child process.

## Auto Trait Implementations§

§

### impl<'gctx> Freeze for Compilation<'gctx>

§

### impl<'gctx> !RefUnwindSafe for Compilation<'gctx>

§

### impl<'gctx> !Send for Compilation<'gctx>

§

### impl<'gctx> !Sync for Compilation<'gctx>

§

### impl<'gctx> Unpin for Compilation<'gctx>

§

### impl<'gctx> !UnwindSafe for Compilation<'gctx>

## Blanket Implementations§

source§

### impl<T> Any for T
where T: 'static + ?Sized,

source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
source§

### impl<T> Borrow<T> for T
where T: ?Sized,

source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

### impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

### impl<T> From<T> for T

source§

#### fn from(t: T) -> T

Returns the argument unchanged.

§

### impl<T> Instrument for T

§

#### fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [`Span`], returning an `Instrumented` wrapper. Read more
§

#### fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more
source§

### impl<T, U> Into<U> for T
where U: From<T>,

source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

§

### impl<T> Pointable for T

§

#### const ALIGN: usize = _

The alignment of pointer.
§

#### type Init = T

The type for initializers.
§

#### unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

#### unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

#### unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

#### unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

### impl<T> Same for T

§

#### type Output = T

Should always be `Self`
source§

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

#### type Error = Infallible

The type returned in the event of a conversion error.
source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

### impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

#### fn vzip(self) -> V

§

### impl<T> WithSubscriber for T

§

#### fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

#### fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more

## Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain `repr(...)` attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 944 bytes