Create an avr-unknown-none target #800
Labels
major-change
A proposal to make a major change to rustc
T-compiler
Add this label so rfcbot knows to poll the compiler team
Proposal
I'm proposing to remove the existing
avr-unknown-gnu-atmega328
target and replace it with a genericavr-unknown-none
variant. This variant can be then specialized for a specific CPU (well, microcontroller) using the-C target-cpu
flag, like so: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 proposedavr-unknown-none
to match rustc's convention better.Implementation
See: rust-lang/rust#131651.
The text was updated successfully, but these errors were encountered: