pub struct Options<'a> {
pub user: &'a [PathBuf],
pub resources: Option<&'a Path>,
pub sysroot: &'a [PathBuf],
pub sdk: &'a [PathBuf],
pub bundled: Option<&'a Sysroot>,
pub kernel: Option<&'a Kernel>,
pub host_include: &'a [PathBuf],
pub no_std_inc: bool,
pub no_builtin_inc: bool,
}Expand description
What the driver knows that the rule needs.
A struct rather than seven arguments, because six of the seven are empty in the common case and a function with six defaulted parameters is a function somebody calls wrong.
Fields§
§user: &'a [PathBuf]-I, in the order given. Order is preserved exactly, because a user who put one -I before
another meant it.
resources: Option<&'a Path>The compiler’s own header directory, which is where stddef.h and the intrinsic headers
live. Supplied by the caller rather than found here, because finding it means asking the
host where the compiler is installed and that is not this crate’s business.
sysroot: &'a [PathBuf]--sysroot or -isysroot, as the directories under the tree the user named.
Paths rather than a Sysroot, because a tree somebody else assembled has whatever shape
they gave it. A buildroot or Yocto or distribution tree keeps its headers under
usr/include and not under the two directories Sysroot::includes names, so the caller
computes the list and this replaces step 3 with it wholesale. A user who did lay their tree
out the way we lay one out passes Sysroot::includes and gets the same thing.
sdk: &'a [PathBuf]The include directories of an Apple SDK this machine has, for an Apple target.
Paths rather than a root, for the same reason Options::sysroot is paths: the layout inside
an SDK is Apple’s and the caller is the half of the compiler that knows it. Empty on every
other target and on a machine that has no SDK, and the second of those is what
spec/cross-compile/08-sysroots.md section 8.6 turns into a refusal that names the licence.
bundled: Option<&'a Sysroot>The tree we bundle for this target, when there is one.
Ignored for a target behind a licence wall, because there is no such tree and there will not be one. The caller is free to pass the layout it computed without having to ask.
kernel: Option<&'a Kernel>The kernel headers for this target, when it has any and we have them.
Used only with Options::bundled, because it is the other half of the tree we produced.
A user who named a tree of their own named one that has a linux/ in it or does not need
one, and putting ours underneath it would be composing with a named sysroot, which section
8.5 does not do.
host_include: &'a [PathBuf]The host’s own include directories, as the driver computes them today.
Used only when the target is the host. On any other target this field is ignored, and that is the whole of the cross compilation guarantee in this file.
no_std_inc: bool-nostdinc. Removes step 3.
no_builtin_inc: bool-nobuiltininc. Removes step 2.