Auto merge of #53648 - japaric:thumb-lld, r=alexcrichton
change the default linker of the ARM Cortex-M targets to rust-lld so users won't need an external linker to build programs This will break nightly builds. We discussed this within the embedded WG and with the embedded community in rust-embedded/wg#160 and there was consensus in that this breaking change is worthwhile and that we should do it now before it becomes impossible to do without breaking stable builds. We have already written an announcement (see rust-embedded/wg#196) that explains the breakage and instructs the users how to fix their builds. The TL;DR is that they can switch to the old behavior by passing the `-C linker` flag to rustc. We'll post the announcement as soon as this change makes into nightly. closes rust-embedded/wg#160 r? @alexcrichton
This commit is contained in:
commit
7625c03167
5 changed files with 10 additions and 11 deletions
|
|
@ -42,9 +42,8 @@ pub fn opts() -> TargetOptions {
|
|||
// See rust-lang/rfcs#1645 for a discussion about these defaults
|
||||
TargetOptions {
|
||||
executables: true,
|
||||
// In 99%+ of cases, we want to use the `arm-none-eabi-gcc` compiler (there aren't many
|
||||
// options around)
|
||||
linker: Some("arm-none-eabi-gcc".to_string()),
|
||||
// In most cases, LLD is good enough
|
||||
linker: Some("rust-lld".to_string()),
|
||||
// Because these devices have very little resources having an unwinder is too onerous so we
|
||||
// default to "abort" because the "unwind" strategy is very rare.
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
// Targets the Cortex-M0, Cortex-M0+ and Cortex-M1 processors (ARMv6-M architecture)
|
||||
|
||||
use spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
|
||||
use spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
|
||||
|
||||
pub fn target() -> TargetResult {
|
||||
Ok(Target {
|
||||
|
|
@ -23,7 +23,7 @@ pub fn target() -> TargetResult {
|
|||
target_os: "none".to_string(),
|
||||
target_env: String::new(),
|
||||
target_vendor: String::new(),
|
||||
linker_flavor: LinkerFlavor::Gcc,
|
||||
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
|
||||
|
||||
options: TargetOptions {
|
||||
// The ARMv6-M architecture doesn't support unaligned loads/stores so we disable them
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
// To opt-in to hardware accelerated floating point operations, you can use, for example,
|
||||
// `-C target-feature=+vfp4` or `-C target-cpu=cortex-m4`.
|
||||
|
||||
use spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
|
||||
use spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
|
||||
|
||||
pub fn target() -> TargetResult {
|
||||
Ok(Target {
|
||||
|
|
@ -32,7 +32,7 @@ pub fn target() -> TargetResult {
|
|||
target_os: "none".to_string(),
|
||||
target_env: String::new(),
|
||||
target_vendor: String::new(),
|
||||
linker_flavor: LinkerFlavor::Gcc,
|
||||
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
|
||||
|
||||
options: TargetOptions {
|
||||
max_atomic_width: Some(32),
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
//
|
||||
// To opt into double precision hardware support, use the `-C target-feature=-fp-only-sp` flag.
|
||||
|
||||
use spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
|
||||
use spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
|
||||
|
||||
pub fn target() -> TargetResult {
|
||||
Ok(Target {
|
||||
|
|
@ -31,7 +31,7 @@ pub fn target() -> TargetResult {
|
|||
target_os: "none".to_string(),
|
||||
target_env: String::new(),
|
||||
target_vendor: String::new(),
|
||||
linker_flavor: LinkerFlavor::Gcc,
|
||||
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
|
||||
|
||||
options: TargetOptions {
|
||||
// `+vfp4` is the lowest common denominator between the Cortex-M4 (vfp4-16) and the
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
// Targets the Cortex-M3 processor (ARMv7-M)
|
||||
|
||||
use spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
|
||||
use spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
|
||||
|
||||
pub fn target() -> TargetResult {
|
||||
Ok(Target {
|
||||
|
|
@ -23,7 +23,7 @@ pub fn target() -> TargetResult {
|
|||
target_os: "none".to_string(),
|
||||
target_env: String::new(),
|
||||
target_vendor: String::new(),
|
||||
linker_flavor: LinkerFlavor::Gcc,
|
||||
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
|
||||
|
||||
options: TargetOptions {
|
||||
max_atomic_width: Some(32),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue