Skip to content

add bare metal ARM Cortex-A targets to rustc - #68253

Merged
bors merged 3 commits into
rust-lang:masterfrom
japaric:bare-metal-cortex-a
Jan 23, 2020
Merged

add bare metal ARM Cortex-A targets to rustc#68253
bors merged 3 commits into
rust-lang:masterfrom
japaric:bare-metal-cortex-a

Conversation

@japaric

Copy link
Copy Markdown
Contributor

-> rustc --target armv7a-none-eabi will work

also build rust-std (rustup) components for them

-> rustup target add armv7a-none-eabi will work

this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)

(these target specifications have been tested on a real (no emulation / QEMU) Cortex-A7 core)

-> `rustc --target armv7-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7-none-eabi` will work
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @zackmdavis

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfiverust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jan 15, 2020
@jonas-schievink

Copy link
Copy Markdown
Contributor

r? @alexcrichton

@jonas-schievinkjonas-schievink added O-Arm Target: 32-bit Arm processors (armv6, armv7, thumb...), including 64-bit Arm in AArch32 state relnotes Marks issues that should be documented in the release notes of the next release. WG-embedded Working group: Embedded systems labels Jan 15, 2020
@jonas-schievinkjonas-schievink added this to the 1.42 milestone Jan 15, 2020
@alexcrichton

Copy link
Copy Markdown
Member

@bors: r+

🎉

@bors

bors commented Jan 15, 2020

Copy link
Copy Markdown
Collaborator

📌 Commit 470cdf5 has been approved by alexcrichton

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 15, 2020
@CentrilCentril added T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. and removed O-Arm Target: 32-bit Arm processors (armv6, armv7, thumb...), including 64-bit Arm in AArch32 state WG-embedded Working group: Embedded systems labels Jan 16, 2020
@bors

bors commented Jan 18, 2020

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #68037) made this pull request unmergeable. Please resolve the merge conflicts.

@borsbors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jan 18, 2020
@japaric

Copy link
Copy Markdown
ContributorAuthor

Fixed merge conflict

@bors r=alexcrichton

@bors

bors commented Jan 20, 2020

Copy link
Copy Markdown
Collaborator

📌 Commit a3a0776 has been approved by alexcrichton

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jan 20, 2020
@bors

bors commented Jan 20, 2020

Copy link
Copy Markdown
Collaborator

⌛ Testing commit a3a0776 with merge 6eb8ee8...

Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Jan 20, 2020
AArch64 bare-metal targets: Build rust-std
This PR complements rust-lang#68253
it needs some upstream changes in the build script of the compiler-builtins
crate
@japaric

Copy link
Copy Markdown
ContributorAuthor

Last commit should fix the compiler-builtins build for armv7a-none-eabi.

Fixing the build of that crate on armv7a-none-eabihf is going to require changes in the compiler-builtins crate's build script so I'm going to leave the rust-std build for that target out until that gets addressed upstream.

bors r=alexcrichton

@japaric

Copy link
Copy Markdown
ContributorAuthor

err,

@bors r=alexcrichton

@bors

bors commented Jan 21, 2020

Copy link
Copy Markdown
Collaborator

📌 Commit 8abbd0b has been approved by alexcrichton

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 21, 2020
Centril added a commit to Centril/rust that referenced this pull request Jan 21, 2020
…crichton
add bare metal ARM Cortex-A targets to rustc
-> `rustc --target armv7a-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7a-none-eabi` will work
this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)
(these target specifications have been tested on a real (no emulation / QEMU) [Cortex-A7 core](https://github.com/iqlusioninc/usbarmory.rs/))
@CentrilCentril mentioned this pull request Jan 21, 2020
tmandry added a commit to tmandry/rust that referenced this pull request Jan 22, 2020
…crichton
add bare metal ARM Cortex-A targets to rustc
-> `rustc --target armv7a-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7a-none-eabi` will work
this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)
(these target specifications have been tested on a real (no emulation / QEMU) [Cortex-A7 core](https://github.com/iqlusioninc/usbarmory.rs/))
@tmandrytmandry mentioned this pull request Jan 22, 2020
tmandry added a commit to tmandry/rust that referenced this pull request Jan 22, 2020
…crichton
add bare metal ARM Cortex-A targets to rustc
-> `rustc --target armv7a-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7a-none-eabi` will work
this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)
(these target specifications have been tested on a real (no emulation / QEMU) [Cortex-A7 core](https://github.com/iqlusioninc/usbarmory.rs/))
@tmandrytmandry mentioned this pull request Jan 22, 2020
tmandry added a commit to tmandry/rust that referenced this pull request Jan 22, 2020
…crichton
add bare metal ARM Cortex-A targets to rustc
-> `rustc --target armv7a-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7a-none-eabi` will work
this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)
(these target specifications have been tested on a real (no emulation / QEMU) [Cortex-A7 core](https://github.com/iqlusioninc/usbarmory.rs/))
@tmandrytmandry mentioned this pull request Jan 22, 2020
tmandry added a commit to tmandry/rust that referenced this pull request Jan 23, 2020
…crichton
add bare metal ARM Cortex-A targets to rustc
-> `rustc --target armv7a-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7a-none-eabi` will work
this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)
(these target specifications have been tested on a real (no emulation / QEMU) [Cortex-A7 core](https://github.com/iqlusioninc/usbarmory.rs/))
@tmandrytmandry mentioned this pull request Jan 23, 2020
bors added a commit that referenced this pull request Jan 23, 2020
Rollup of 10 pull requests
Successful merges:
- #67195 ([experiment] Add `-Z no-link` flag)
- #68253 (add bare metal ARM Cortex-A targets to rustc)
- #68361 (Unbreak linking with lld 9 on FreeBSD 13.0-CURRENT i386)
- #68388 (Make `TooGeneric` error in WF checking a proper error)
- #68409 (Micro-optimize OutputFilenames)
- #68410 (Export weak symbols used by MemorySanitizer)
- #68425 (Fix try-op diagnostic in E0277 for methods)
- #68440 (bootstrap: update clippy subcmd decription)
- #68441 (pprust: use as_deref)
- #68462 (librustc_mir: don't allocate vectors where slices will do.)
Failed merges:
r? @ghost
@bors
bors merged commit 8abbd0b into rust-lang:masterJan 23, 2020
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Mar 13, 2020
Version 1.42.0 (2020-03-12)
==========================
Language
--------
- [You can now use the slice pattern syntax with subslices.][67712] e.g.
```rust
fn foo(words: &[&str]) {
match words {
["Hello", "World", "!", ..] => println!("Hello World!"),
["Foo", "Bar", ..] => println!("Baz"),
rest => println!("{:?}", rest),
}
}
```
- [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning
that you can create an enum that has the exact layout and ABI of the type
it contains.
- [There are some *syntax-only* changes:][67131]
- `default` is syntactically allowed before items in `trait` definitions.
- Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically
leave out their bodies in favor of `;`.
- Bounds on associated types in `impl`s are now syntactically allowed
(e.g. `type Foo: Ord;`).
- `...` (the C-variadic type) may occur syntactically directly as the type of
any function parameter.
These are still rejected *semantically*, so you will likely receive an error
but these changes can be seen and parsed by procedural macros and
conditional compilation.
Compiler
--------
- [Added tier 2* support for `armv7a-none-eabi`.][68253]
- [Added tier 2 support for `riscv64gc-unknown-linux-gnu`.][68339]
- [`Option::{expect,unwrap}` and
`Result::{expect, expect_err, unwrap, unwrap_err}` now produce panic messages
pointing to the location where they were called, rather than
`core`'s internals. ][67887]
* Refer to Rust's [platform support page][forge-platform-support] for more
information on Rust's tiered platform support.
Libraries
---------
- [`iter::Empty<T>` now implements `Send` and `Sync` for any `T`.][68348]
- [`Pin::{map_unchecked, map_unchecked_mut}` no longer require the return type
to implement `Sized`.][67935]
- [`io::Cursor` now derives `PartialEq` and `Eq`.][67233]
- [`Layout::new` is now `const`.][66254]
- [Added Standard Library support for `riscv64gc-unknown-linux-gnu`.][66899]
Stabilized APIs
---------------
- [`CondVar::wait_while`]
- [`CondVar::wait_timeout_while`]
- [`DebugMap::key`]
- [`DebugMap::value`]
- [`ManuallyDrop::take`]
- [`matches!`]
- [`ptr::slice_from_raw_parts_mut`]
- [`ptr::slice_from_raw_parts`]
Cargo
-----
- [You no longer need to include `extern crate proc_macro;` to be able to
`use proc_macro;` in the `2018` edition.][cargo/7700]
Compatibility Notes
-------------------
- [`Error::description` has been deprecated, and its use will now produce a
warning.][66919] It's recommended to use `Display`/`to_string` instead.
- [`use $crate;` inside macros is now a hard error.][37390] The compiler
emitted forward compatibility warnings since Rust 1.14.0.
- [As previously announced, this release reduces the level of support for
32-bit Apple targets to tier 3.][apple-32bit-drop]. This means that the
source code is still available to build, but the targets are no longer tested
and no release binary is distributed by the Rust project. Please refer to the
linked blog post for more information.
[37390]: rust-lang/rust#37390
[68253]: rust-lang/rust#68253
[68348]: rust-lang/rust#68348
[67935]: rust-lang/rust#67935
[68339]: rust-lang/rust#68339
[68122]: rust-lang/rust#68122
[67712]: rust-lang/rust#67712
[67887]: rust-lang/rust#67887
[67131]: rust-lang/rust#67131
[67233]: rust-lang/rust#67233
[66899]: rust-lang/rust#66899
[66919]: rust-lang/rust#66919
[66254]: rust-lang/rust#66254
[cargo/7700]: rust-lang/cargo#7700
[`DebugMap::key`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.key
[`DebugMap::value`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.value
[`ManuallyDrop::take`]: https://doc.rust-lang.org/stable/std/mem/struct.ManuallyDrop.html#method.take
[`matches!`]: https://doc.rust-lang.org/stable/std/macro.matches.html
[`ptr::slice_from_raw_parts_mut`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts_mut.html
[`ptr::slice_from_raw_parts`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts.html
[`CondVar::wait_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_while
[`CondVar::wait_timeout_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_timeout_while
Centril added a commit to Centril/rust that referenced this pull request Apr 3, 2020
AArch64 bare-metal targets: Build rust-std
This PR complements rust-lang#68253
ehuss added a commit to ehuss/rust-forge that referenced this pull request May 15, 2020
- aarch64-unknown-none: rust-lang/rust#68334
- aarch64-unknown-none-softfloat: rust-lang/rust#64589
- armv7-unknown-linux-gnueabi: rust-lang/rust#63107
- armv7-unknown-linux-musleabi: rust-lang/rust#63107
- aarch64-apple-tvos: rust-lang/rust#68191
- armv7a-none-eabihf: rust-lang/rust#68253
- i686-unknown-uefi: rust-lang/rust#64334
- thumbv7neon-unknown-linux-musleabihf: rust-lang/rust#66103
- x86_64-apple-ios-macabi: rust-lang/rust#63467
- x86_64-apple-tvos: rust-lang/rust#68191
- x86_64-linux-kernel: rust-lang/rust#64051
- x86_64-unknown-hermit-kernel: rust-lang/rust#66713
- x86_64-unknown-illumos: rust-lang/rust#71145
Moved to tier 2:
- aarch64-unknown-none: rust-lang/rust#68334
msk pushed a commit to msk/pkgsrc that referenced this pull request May 11, 2026
Version 1.42.0 (2020-03-12)
==========================
Language
--------
- [You can now use the slice pattern syntax with subslices.][67712] e.g.
```rust
fn foo(words: &[&str]) {
match words {
["Hello", "World", "!", ..] => println!("Hello World!"),
["Foo", "Bar", ..] => println!("Baz"),
rest => println!("{:?}", rest),
}
}
```
- [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning
that you can create an enum that has the exact layout and ABI of the type
it contains.
- [There are some *syntax-only* changes:][67131]
- `default` is syntactically allowed before items in `trait` definitions.
- Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically
leave out their bodies in favor of `;`.
- Bounds on associated types in `impl`s are now syntactically allowed
(e.g. `type Foo: Ord;`).
- `...` (the C-variadic type) may occur syntactically directly as the type of
any function parameter.
These are still rejected *semantically*, so you will likely receive an error
but these changes can be seen and parsed by procedural macros and
conditional compilation.
Compiler
--------
- [Added tier 2* support for `armv7a-none-eabi`.][68253]
- [Added tier 2 support for `riscv64gc-unknown-linux-gnu`.][68339]
- [`Option::{expect,unwrap}` and
`Result::{expect, expect_err, unwrap, unwrap_err}` now produce panic messages
pointing to the location where they were called, rather than
`core`'s internals. ][67887]
* Refer to Rust's [platform support page][forge-platform-support] for more
information on Rust's tiered platform support.
Libraries
---------
- [`iter::Empty<T>` now implements `Send` and `Sync` for any `T`.][68348]
- [`Pin::{map_unchecked, map_unchecked_mut}` no longer require the return type
to implement `Sized`.][67935]
- [`io::Cursor` now derives `PartialEq` and `Eq`.][67233]
- [`Layout::new` is now `const`.][66254]
- [Added Standard Library support for `riscv64gc-unknown-linux-gnu`.][66899]
Stabilized APIs
---------------
- [`CondVar::wait_while`]
- [`CondVar::wait_timeout_while`]
- [`DebugMap::key`]
- [`DebugMap::value`]
- [`ManuallyDrop::take`]
- [`matches!`]
- [`ptr::slice_from_raw_parts_mut`]
- [`ptr::slice_from_raw_parts`]
Cargo
-----
- [You no longer need to include `extern crate proc_macro;` to be able to
`use proc_macro;` in the `2018` edition.][cargo/7700]
Compatibility Notes
-------------------
- [`Error::description` has been deprecated, and its use will now produce a
warning.][66919] It's recommended to use `Display`/`to_string` instead.
- [`use $crate;` inside macros is now a hard error.][37390] The compiler
emitted forward compatibility warnings since Rust 1.14.0.
- [As previously announced, this release reduces the level of support for
32-bit Apple targets to tier 3.][apple-32bit-drop]. This means that the
source code is still available to build, but the targets are no longer tested
and no release binary is distributed by the Rust project. Please refer to the
linked blog post for more information.
[37390]: rust-lang/rust#37390
[68253]: rust-lang/rust#68253
[68348]: rust-lang/rust#68348
[67935]: rust-lang/rust#67935
[68339]: rust-lang/rust#68339
[68122]: rust-lang/rust#68122
[67712]: rust-lang/rust#67712
[67887]: rust-lang/rust#67887
[67131]: rust-lang/rust#67131
[67233]: rust-lang/rust#67233
[66899]: rust-lang/rust#66899
[66919]: rust-lang/rust#66919
[66254]: rust-lang/rust#66254
[cargo/7700]: rust-lang/cargo#7700
[`DebugMap::key`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.key
[`DebugMap::value`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.value
[`ManuallyDrop::take`]: https://doc.rust-lang.org/stable/std/mem/struct.ManuallyDrop.html#method.take
[`matches!`]: https://doc.rust-lang.org/stable/std/macro.matches.html
[`ptr::slice_from_raw_parts_mut`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts_mut.html
[`ptr::slice_from_raw_parts`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts.html
[`CondVar::wait_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_while
[`CondVar::wait_timeout_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_timeout_while
jperkin added a commit to TritonDataCenter/pkgsrc that referenced this pull request May 14, 2026
Version 1.42.0 (2020-03-12)
==========================
Language
--------
- [You can now use the slice pattern syntax with subslices.][67712] e.g.
```rust
fn foo(words: &[&str]) {
match words {
["Hello", "World", "!", ..] => println!("Hello World!"),
["Foo", "Bar", ..] => println!("Baz"),
rest => println!("{:?}", rest),
}
}
```
- [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning
that you can create an enum that has the exact layout and ABI of the type
it contains.
- [There are some *syntax-only* changes:][67131]
- `default` is syntactically allowed before items in `trait` definitions.
- Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically
leave out their bodies in favor of `;`.
- Bounds on associated types in `impl`s are now syntactically allowed
(e.g. `type Foo: Ord;`).
- `...` (the C-variadic type) may occur syntactically directly as the type of
any function parameter.
These are still rejected *semantically*, so you will likely receive an error
but these changes can be seen and parsed by procedural macros and
conditional compilation.
Compiler
--------
- [Added tier 2* support for `armv7a-none-eabi`.][68253]
- [Added tier 2 support for `riscv64gc-unknown-linux-gnu`.][68339]
- [`Option::{expect,unwrap}` and
`Result::{expect, expect_err, unwrap, unwrap_err}` now produce panic messages
pointing to the location where they were called, rather than
`core`'s internals. ][67887]
* Refer to Rust's [platform support page][forge-platform-support] for more
information on Rust's tiered platform support.
Libraries
---------
- [`iter::Empty<T>` now implements `Send` and `Sync` for any `T`.][68348]
- [`Pin::{map_unchecked, map_unchecked_mut}` no longer require the return type
to implement `Sized`.][67935]
- [`io::Cursor` now derives `PartialEq` and `Eq`.][67233]
- [`Layout::new` is now `const`.][66254]
- [Added Standard Library support for `riscv64gc-unknown-linux-gnu`.][66899]
Stabilized APIs
---------------
- [`CondVar::wait_while`]
- [`CondVar::wait_timeout_while`]
- [`DebugMap::key`]
- [`DebugMap::value`]
- [`ManuallyDrop::take`]
- [`matches!`]
- [`ptr::slice_from_raw_parts_mut`]
- [`ptr::slice_from_raw_parts`]
Cargo
-----
- [You no longer need to include `extern crate proc_macro;` to be able to
`use proc_macro;` in the `2018` edition.][cargo/7700]
Compatibility Notes
-------------------
- [`Error::description` has been deprecated, and its use will now produce a
warning.][66919] It's recommended to use `Display`/`to_string` instead.
- [`use $crate;` inside macros is now a hard error.][37390] The compiler
emitted forward compatibility warnings since Rust 1.14.0.
- [As previously announced, this release reduces the level of support for
32-bit Apple targets to tier 3.][apple-32bit-drop]. This means that the
source code is still available to build, but the targets are no longer tested
and no release binary is distributed by the Rust project. Please refer to the
linked blog post for more information.
[37390]: rust-lang/rust#37390
[68253]: rust-lang/rust#68253
[68348]: rust-lang/rust#68348
[67935]: rust-lang/rust#67935
[68339]: rust-lang/rust#68339
[68122]: rust-lang/rust#68122
[67712]: rust-lang/rust#67712
[67887]: rust-lang/rust#67887
[67131]: rust-lang/rust#67131
[67233]: rust-lang/rust#67233
[66899]: rust-lang/rust#66899
[66919]: rust-lang/rust#66919
[66254]: rust-lang/rust#66254
[cargo/7700]: rust-lang/cargo#7700
[`DebugMap::key`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.key
[`DebugMap::value`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.value
[`ManuallyDrop::take`]: https://doc.rust-lang.org/stable/std/mem/struct.ManuallyDrop.html#method.take
[`matches!`]: https://doc.rust-lang.org/stable/std/macro.matches.html
[`ptr::slice_from_raw_parts_mut`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts_mut.html
[`ptr::slice_from_raw_parts`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts.html
[`CondVar::wait_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_while
[`CondVar::wait_timeout_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_timeout_while
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

relnotesMarks issues that should be documented in the release notes of the next release.S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@japaric@rust-highfive@jonas-schievink@alexcrichton@bors@Centril@zackmdavis