feat: Add std Xtensa targets support
This commit is contained in:
parent
f6b4b71ef1
commit
3954b744cc
8 changed files with 144 additions and 1 deletions
|
@ -1767,8 +1767,11 @@ supported_targets! {
|
|||
("nvptx64-nvidia-cuda", nvptx64_nvidia_cuda),
|
||||
|
||||
("xtensa-esp32-none-elf", xtensa_esp32_none_elf),
|
||||
("xtensa-esp32-espidf", xtensa_esp32_espidf),
|
||||
("xtensa-esp32s2-none-elf", xtensa_esp32s2_none_elf),
|
||||
("xtensa-esp32s2-espidf", xtensa_esp32s2_espidf),
|
||||
("xtensa-esp32s3-none-elf", xtensa_esp32s3_none_elf),
|
||||
("xtensa-esp32s3-espidf", xtensa_esp32s3_espidf),
|
||||
|
||||
("i686-wrs-vxworks", i686_wrs_vxworks),
|
||||
("x86_64-wrs-vxworks", x86_64_wrs_vxworks),
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
use crate::abi::Endian;
|
||||
use crate::spec::{base::xtensa, cvs, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
Target {
|
||||
llvm_target: "xtensa-none-elf".into(),
|
||||
pointer_width: 32,
|
||||
data_layout: "e-m:e-p:32:32-v1:8:8-i64:64-i128:128-n32".into(),
|
||||
arch: "xtensa".into(),
|
||||
metadata: crate::spec::TargetMetadata {
|
||||
description: None,
|
||||
tier: None,
|
||||
host_tools: None,
|
||||
std: None,
|
||||
},
|
||||
|
||||
options: TargetOptions {
|
||||
endian: Endian::Little,
|
||||
c_int_width: "32".into(),
|
||||
families: cvs!["unix"],
|
||||
os: "espidf".into(),
|
||||
env: "newlib".into(),
|
||||
vendor: "espressif".into(),
|
||||
|
||||
executables: true,
|
||||
cpu: "esp32".into(),
|
||||
linker: Some("xtensa-esp32-elf-gcc".into()),
|
||||
|
||||
// The esp32 only supports native 32bit atomics.
|
||||
max_atomic_width: Some(32),
|
||||
atomic_cas: true,
|
||||
|
||||
..xtensa::opts()
|
||||
},
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
use crate::abi::Endian;
|
||||
use crate::spec::{base::xtensa, cvs, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
Target {
|
||||
llvm_target: "xtensa-none-elf".into(),
|
||||
pointer_width: 32,
|
||||
data_layout: "e-m:e-p:32:32-v1:8:8-i64:64-i128:128-n32".into(),
|
||||
arch: "xtensa".into(),
|
||||
metadata: crate::spec::TargetMetadata {
|
||||
description: None,
|
||||
tier: None,
|
||||
host_tools: None,
|
||||
std: None,
|
||||
},
|
||||
|
||||
options: TargetOptions {
|
||||
endian: Endian::Little,
|
||||
c_int_width: "32".into(),
|
||||
families: cvs!["unix"],
|
||||
os: "espidf".into(),
|
||||
env: "newlib".into(),
|
||||
vendor: "espressif".into(),
|
||||
|
||||
executables: true,
|
||||
cpu: "esp32-s2".into(),
|
||||
linker: Some("xtensa-esp32s2-elf-gcc".into()),
|
||||
|
||||
// See https://github.com/espressif/rust-esp32-example/issues/3#issuecomment-861054477
|
||||
//
|
||||
// While the ESP32-S2 chip does not natively support atomics, ESP-IDF does support
|
||||
// the __atomic* and __sync* compiler builtins. Setting `max_atomic_width` and `atomic_cas`
|
||||
// and `atomic_cas: true` will cause the compiler to emit libcalls to these builtins. On the
|
||||
// ESP32-S2, these are guaranteed to be lock-free.
|
||||
//
|
||||
// Support for atomics is necessary for the Rust STD library, which is supported by ESP-IDF.
|
||||
max_atomic_width: Some(32),
|
||||
atomic_cas: true,
|
||||
|
||||
..xtensa::opts()
|
||||
},
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
use crate::abi::Endian;
|
||||
use crate::spec::{base::xtensa, cvs, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
Target {
|
||||
llvm_target: "xtensa-none-elf".into(),
|
||||
pointer_width: 32,
|
||||
data_layout: "e-m:e-p:32:32-v1:8:8-i64:64-i128:128-n32".into(),
|
||||
arch: "xtensa".into(),
|
||||
metadata: crate::spec::TargetMetadata {
|
||||
description: None,
|
||||
tier: None,
|
||||
host_tools: None,
|
||||
std: None,
|
||||
},
|
||||
|
||||
options: TargetOptions {
|
||||
endian: Endian::Little,
|
||||
c_int_width: "32".into(),
|
||||
families: cvs!["unix"],
|
||||
os: "espidf".into(),
|
||||
env: "newlib".into(),
|
||||
vendor: "espressif".into(),
|
||||
|
||||
executables: true,
|
||||
cpu: "esp32-s3".into(),
|
||||
linker: Some("xtensa-esp32s3-elf-gcc".into()),
|
||||
|
||||
// The esp32s3 only supports native 32bit atomics.
|
||||
max_atomic_width: Some(32),
|
||||
atomic_cas: true,
|
||||
|
||||
..xtensa::opts()
|
||||
},
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue