Skip to content

Add target="host" meaning the current host #13051

Open
@kpreid

Description

@kpreid

Problem

Cargo defaults to compiling for the host's target triple, which is appropriate for most cases, particularly because this is the only (default) way to build tests that can be run. However, once the target has been overridden by configuration, there is no way to explicitly request on the command line that it be the host.

Proposed Solution

Wherever a target triple is accepted, accept the special string host as an alias for the host platform's target triple.

Notes

Use cases:

  • Any build automation that wishes to work with different target triples can unconditionally pass a string without needing a special “absent” case.
  • Library code that supports no_std, or is concerned with other platform limitations such as pointer width and atomics, could have an accompanying configuration file which automatically builds for the host, for testing, and another target, as a compatibility check; e.g. build.target = ["host", "thumbv7em-none-eabihf"].
  • This could be used as cargo test --target=host to run some platform-independent tests in a package otherwise devoted to being cross-compiled (such that its config.toml has a target specified to enable IDE support and better default behaviors).
  • --target=host will not be identical to the behavior with no options specified, due to the behavior differences triggered by using --target at all. This feature will introduce a way to trigger that intentionally without also needing to specify a particular target. This could be considered an alternative to target-applies-to-host = false, but specifically does not introduce any new semantics that are not currently obtainable by --target=<whatever the host triple is>.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-configurationArea: cargo config files and env varsA-cross-compilingArea: using --target flag for other platformsC-feature-requestCategory: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`S-needs-designStatus: Needs someone to work further on the design for the feature or fix. NOT YET accepted.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions