Skip to content

Create an avr-unknown-none target #800

Closed
@Patryk27

Description

@Patryk27

Proposal

I'm proposing to remove the existing avr-unknown-gnu-atmega328 target and replace it with a generic avr-unknown-none variant. This variant can be then specialized for a specific CPU (well, microcontroller) using the -C target-cpu flag, like so:

# .cargo/config.toml

[build]
target = "avr-unknown-none"
rustflags = ["-C", "target-cpu=atmega328p"]

[unstable]
build-std = ["core"]

In my opinion using the generic variant is the better approach here, since it matches how LLVM implements the target internally, making it easier for rustc and LLVM to cooperate; it's also better for end users, considering that the current approach with target.jsons is just awkward.

Having a generic variant does have a downside, though - avr-unknown-none would have to remain a tier 3 target as we won't be able to provide prebuilt standard library for it - especially considering that there's like three hundred possible values for -C target-cpu.

Fortunately, all those three hundred CPUs map down into about ~30 different AVR architecture combinations, so in the future we can think about providing dedicated avr25-unknown-none etc. targets that could be moved into tier 2 and even tier 1 one day. This remains outside the scope of this proposal, though.

To avoid confusing people, I'm proposing to remove the current avr-unknown-gnu-atmega328 target - it shouldn't be widely used in practice, because virtually all tutorials and examples rely on target.jsons (see e.g. examples in avr-hal). If backwards compatibility for tier 3 targets is important though, we can think about providing a dedicated error message for people trying to use the older target.

Bikeshedding

Name

LLVM calls this target avr-unknown-unknown, but discussion on Zulip proposed avr-unknown-none to match rustc's convention better.

Implementation

See: rust-lang/rust#131651.

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-compilerAdd this label so rfcbot knows to poll the compiler teammajor-changeA proposal to make a major change to rustcmajor-change-acceptedA major change proposal that was accepted

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions