Closed boozook closed 6 months ago
This being missing makes me unable to use arduino-hal
templates with cargo generate
because their dependencies use this crate through quote
, and using stable is not an option for this. I'm trying to figure out how to force transitive dependencies to use 1.0.35
of quote
or 1.0.79
of proc-macro2
, but simply specifying it for cargo with a cargo update -p proc-macro2 --precise 1.0.79
does not do it.
It looks like you are using an old nightly compiler. In general, old nightly compilers are not supported. The expectation is that if you are using a nightly toolchain, then you are remaining on top of recent nightly changes.
If you need to pin to an old nightly toolchain, then you would need to use corresponding old crate versions, too (such as via a lockfile).
The avr-hal
templates for arduino, aka. arduino-hal
templates, use a rust-toolchain.toml
file to specify specific versions of nightly similar to what you describe, but like you imply, they use an older version of nightly (in my case: 2024-03-22).
Anyways, I was able to solve the issue by adding this to my my Cargo.toml
, which ends up modifying my "lockfile" (assuming you are refering to Cargo.lock
):
[patch.crates-io]
proc-macro2 = { git = "https://github.com/dtolnay/proc-macro2", rev = "4ba4ab1ec52d9e8286826a898430683ba002a002" }
Actually, thinking about it, the version in rust-toolchain.toml
is probably infered from current latest installed nightly, and I updated nightly only after generating the template today. Sorry for the confusion.
@dtolnay Just to provide some context, the reason we pin older nightlies for Rust on AVR is that there are compiler regressions in the AVR backend from time to time. This has two implications:
Such is the life of a tier 3 target...
In general, old nightly compilers are not supported. The expectation is that if you are using a nightly toolchain, then you are remaining on top of recent nightly changes.
This is a bit unfortunate, as for the stated reason, we A) cannot always upgrade nightly and B) this makes regression-hunting quite difficult if certain crates break with not-that-old compiler versions.
then you would need to use corresponding old crate versions, too (such as via a lockfile).
This is a good pointer though, I guess we can try doing that for crates that are AVR-specific. This of course won't work as soon as any non-platform-specific crate in the dependency tree pulls in later versions...
Crate: 1.0.80 Rustc:
1.79.0-nightly (8df7e723e 2024-03-30)
I suppose there should be crate attribute:
Probably this is not a problem because
proc_macro_c_str_literals
was stabilised nearly, so 🤷🏻♂️.