You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
By now developers have to compile whole custom Rust toolchain to work with xtensa isa. Is there any possibility to merge xtensa instruction set support into main branch Rust? Then developers can install them easily by using rustup toolchain add command.
Reacted by Adam, Tastaturtaste, Suraj, Johnny Santos, thomas725, Felix Schröter, stef-steos-engineering, Ariel Richtman and Godvin Ouseph
We have indeed got the first patch set merged into LLVM, however that set of patches is not yet sufficient for a working Rust compiler.
We will update the tracking issue with the next series of patches as soon as we post them for review. You can find the entire set of Xtensa patches here: espressif/llvm-project#62.
Hey guys, just wanted to ping this as it seems there is some new traction over at the tracking issue espressif/llvm-project#4 seems this might be coming pretty close
My understanding (somebody can correct me if I'm wrong) is that there are still a large number of patches which need to be merged into LLVM before full Xtensa support is realized. Once this is complete, it will take time for these changes to propagate into Rust as well.
In the latest comment on the llvm upstreaming tracking issue there are no open llvm tasks only some clang task. Does that mean the LLVM upstreaming is now no longer a blocker? Or what is missing now?
I'm not sure if all the required functionality of LLVM is already merged upstream, but we would still need to wait for Rust to use the LLVM release that includes the Xtensa changes, which is about 6 months after release iirc
As of now, I have been trying to compile ESP32 code using the nightly compiler and have encountered the following issues:
Directly use the xtensa-esp32-none-elf target
[build]
target = "xtensa-esp32-none-elf"
I got
data-layout for target `xtensa-esp32-none-elf-4712693060684062482`, `e-m:e-p:32:32-v8:8:8-i8:8:32-i16:16:32-i64:64-n32`, differs from LLVM target's `xtensa-none-elf` default layout, `
2e-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32`
Use custom_target.json
[build]
target = "xtensa-esp32-none-elf.json"
Due to the fact that some commit of LLVM (add esp32 CPU and atomic access) has not been obtained by rust/llvm yet:
"cpu": "generic",
-fp
-s32c1i
-highpriinterruptslevel7
"max-atomic-width": 0,
@823984418 it is indeed close, at least for building simple programs. Thanks for hint about the asm patch, I need to find some time to clean up the asm patch and submit it upstream. I'll do that soon.
Last nights nightly can now build core, but to build anything useful (anything using asm) there is a further few bug fixes coming into LLVM - the good news is that almost all the changes on the Rust side are done! So we're just waiting on the some more LLVM patches now.
Reacted by A_D
Reacted by Ralph Ursprung and Luo Jia / Zhouqi Jiang
Activity
mcilloni commentedon Oct 28, 2021
I don't think this can be done until the Xtensa backend is merged into upstream LLVM, but I could be wrong.
MabezDev commentedon Oct 28, 2021
@mcilloni is correct, Rust won't accept Xtensa support upstream without atleast an experimental backend in LLVM upstream.
With the riscv chips, we've already upstreamed everything we can.
stappersg commentedon Apr 24, 2022
Where to check the status?
URLs that I'm missing:
MabezDev commentedon Apr 26, 2022
paulocsanz commentedon Feb 12, 2023
espressif/llvm-project#4 implies that all of the repo's changes have been merged to upstream LLVM, although the PR hasn't been closed yet.
What are the next steps?
igrr commentedon Feb 12, 2023
We have indeed got the first patch set merged into LLVM, however that set of patches is not yet sufficient for a working Rust compiler.
We will update the tracking issue with the next series of patches as soon as we post them for review. You can find the entire set of Xtensa patches here: espressif/llvm-project#62.
noahbliss commentedon Mar 1, 2024
Hey guys, just wanted to ping this as it seems there is some new traction over at the tracking issue espressif/llvm-project#4 seems this might be coming pretty close
jessebraham commentedon Mar 1, 2024
My understanding (somebody can correct me if I'm wrong) is that there are still a large number of patches which need to be merged into LLVM before full Xtensa support is realized. Once this is complete, it will take time for these changes to propagate into Rust as well.
SergioGasquez commentedon Mar 5, 2025
Quick update as we've made some progress about upstreaming our Rust patches, the following PRs were merged:
+forced-atomicsfeature to esp32s2 no_std target rust-lang/rust#133599We are still awaiting on the LLVM upstreaming effort to be able to continue upstreaming our Rust patches.
Skgland commentedon Aug 12, 2025
In the latest comment on the llvm upstreaming tracking issue there are no open llvm tasks only some clang task. Does that mean the LLVM upstreaming is now no longer a blocker? Or what is missing now?
SergioGasquez commentedon Aug 12, 2025
I'm not sure if all the required functionality of LLVM is already merged upstream, but we would still need to wait for Rust to use the LLVM release that includes the Xtensa changes, which is about 6 months after release iirc
823984418 commentedon Aug 22, 2025
As of now, I have been trying to compile ESP32 code using the nightly compiler and have encountered the following issues:
Directly use the
xtensa-esp32-none-elftargetI got
Use custom_target.json
Due to the fact that some commit of LLVM (add esp32 CPU and atomic access) has not been obtained by rust/llvm yet:
"cpu": "generic",
-fp
-s32c1i
-highpriinterruptslevel7
"max-atomic-width": 0,
xtensa-esp32-none-elf.json:
Cannot use inline assembly
xtensa-lxinline assembly is unsupported on this targetThis seems to be because the commit has not yet been sent upstream:
Some other issues, but I think this is because I turned off all atomic types
core/allocwas compiled normally, so I think we are very close to using the default compiler directly!MabezDev commentedon Oct 2, 2025
@823984418 it is indeed close, at least for building simple programs. Thanks for hint about the asm patch, I need to find some time to clean up the asm patch and submit it upstream. I'll do that soon.
MabezDev commentedon Oct 3, 2025
I've opened a condensed asm! PR upstream: rust-lang#147302
A-UNDERSCORE-D commentedon Jun 10, 2026
so that PR was merged!
MabezDev commentedon Jun 12, 2026
Last nights nightly can now build core, but to build anything useful (anything using asm) there is a further few bug fixes coming into LLVM - the good news is that almost all the changes on the Rust side are done! So we're just waiting on the some more LLVM patches now.
A-UNDERSCORE-D commentedon Jun 12, 2026
Is the LLVM tracking issue a good place to watch that?
SergioGasquez commentedon Jun 15, 2026
Yes, see espressif/llvm-project#4 to be updated!