Skip to content

Commit a874c65

Browse files
authored
Rollup merge of rust-lang#64589 - andre-richter:aarch64_bare_metal, r=Amanieu
Differentiate AArch64 bare-metal targets between hf and non-hf. CC @parched, kindly request you to review. ~~Note: This change breaks code that uses the target `aarch64-unknown-none` for the sake of clearer naming as discussed in the links posted below. A search on github reveals that code using `aarch64-unknown-none` is almost exclusively forked from our embedded WG's OS tutorials repo at https://github.com/rust-embedded/rust-raspi3-OS-tutorials, for which the target was originally created.~~ ~~I will adapt this repo to the new target name asap once this PR would go upstream. The minor annoyance for the forks to break temporarily should be acceptable for the sake of introducing a better differentiation now before it is too late. Also, the break would only happen upon updating the toolchain, giving the user a good hint at what has happened.~~ ---------- Patch commit message: Following up on [1] and [2], this PR adds differntiation for aarch64 bare-metal targets between versions with and without floating point enabled. This streamlines the target naming with other existing ARM targets and provides the user clear indication if he is getting float or non-float for his bare-metal target. [1] rust-lang#60135 (comment) [2] rust-embedded/wg#230 Closes: rust-embedded/wg#230
2 parents 37333b5 + d2762ac commit a874c65

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

src/librustc_target/spec/aarch64_unknown_none.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generic AArch64 target for bare-metal code
1+
// Generic AArch64 target for bare-metal code - Floating point enabled
22
//
33
// Can be used in conjunction with the `target-feature` and
44
// `target-cpu` compiler flags to opt-in more hardware-specific
@@ -11,7 +11,7 @@ use super::{LldFlavor, LinkerFlavor, Target, TargetOptions, PanicStrategy};
1111
pub fn target() -> Result<Target, String> {
1212
let opts = TargetOptions {
1313
linker: Some("rust-lld".to_owned()),
14-
features: "+strict-align".to_string(),
14+
features: "+strict-align,+neon,+fp-armv8".to_string(),
1515
executables: true,
1616
relocation_model: "static".to_string(),
1717
disable_redzone: true,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Generic AArch64 target for bare-metal code - Floating point disabled
2+
//
3+
// Can be used in conjunction with the `target-feature` and
4+
// `target-cpu` compiler flags to opt-in more hardware-specific
5+
// features.
6+
//
7+
// For example, `-C target-cpu=cortex-a53`.
8+
9+
use super::{LldFlavor, LinkerFlavor, Target, TargetOptions, PanicStrategy};
10+
11+
pub fn target() -> Result<Target, String> {
12+
let opts = TargetOptions {
13+
linker: Some("rust-lld".to_owned()),
14+
features: "+strict-align,-neon,-fp-armv8".to_string(),
15+
executables: true,
16+
relocation_model: "static".to_string(),
17+
disable_redzone: true,
18+
linker_is_gnu: true,
19+
max_atomic_width: Some(128),
20+
panic_strategy: PanicStrategy::Abort,
21+
abi_blacklist: super::arm_base::abi_blacklist(),
22+
.. Default::default()
23+
};
24+
Ok(Target {
25+
llvm_target: "aarch64-unknown-none".to_string(),
26+
target_endian: "little".to_string(),
27+
target_pointer_width: "64".to_string(),
28+
target_c_int_width: "32".to_string(),
29+
target_os: "none".to_string(),
30+
target_env: String::new(),
31+
target_vendor: String::new(),
32+
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(),
33+
arch: "aarch64".to_string(),
34+
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
35+
options: opts,
36+
})
37+
}

src/librustc_target/spec/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ supported_targets! {
489489
("riscv64gc-unknown-none-elf", riscv64gc_unknown_none_elf),
490490

491491
("aarch64-unknown-none", aarch64_unknown_none),
492+
("aarch64-unknown-none-softfloat", aarch64_unknown_none_softfloat),
492493

493494
("x86_64-fortanix-unknown-sgx", x86_64_fortanix_unknown_sgx),
494495

0 commit comments

Comments
 (0)