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:
bors 2018-08-27 06:30:10 +00:00
commit 7625c03167
5 changed files with 10 additions and 11 deletions

View file

@ -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,

View file

@ -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

View file

@ -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),

View file

@ -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

View file

@ -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),