-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add kernel target for RustyHermit #92670
Conversation
r? @jackh726 (rust-highfive has picked a reviewer for you, use r? to override) |
|
This comment has been minimized.
This comment has been minimized.
Not really an appropriate reviewer for new targets r? rust-lang/compiler |
Please copy the list of requirements for T3 targets from https://doc.rust-lang.org/rustc/target-tier-policy.html#tier-3-target-policy to a comment on this PR and verify that each of the requirements are being satisfied. See e.g. #89062 (comment) as an example of this. Additionally, please add an entry in the |
src/doc/rustc/src/platform-support/TEMPLATE.md should be a template for the docs? |
🤦♂️ I copied that message from #92300, didn't think to check that it might need updating. |
@davidtwco I added a text to the PR. Does it fulfill your requirements? |
That's great, thanks. Can you add an entry in |
@davidtwco I the description understandable? |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@davidtwco Do you know, why the CI isn't able to build the html files? |
If I'm not mistaken, the target must be set as supported with the correct name in rust/compiler/rustc_target/src/spec/mod.rs Line 803 in 926e784
Currently the new module is dead code as it is not declared anywhere. |
This comment has been minimized.
This comment has been minimized.
Thanks @mkroening for the hint! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this looks good now, though you'll need to remove the merge commit and rebase these changes instead (we don't land pull requests with merge commits in them).
Currently, we are thinking to use *-unknown-none targets instead to define for every platform our own one (see hermit-os/hermit-rs#197). However, the current target aarch64-unknown-none-softfloat doesn't support dynamic relocation. Our kernel uses this feature and consequently we define a new target aarch64-unknown-hermitkernel to support it.
You are right. I removed the merge commit. |
@bors r+ thanks! |
📌 Commit df70adf has been approved by |
…askrgr Rollup of 7 pull requests Successful merges: - rust-lang#92670 (add kernel target for RustyHermit) - rust-lang#93756 (Support custom options for LLVM build) - rust-lang#93802 (fix oversight in the `min_const_generics` checks) - rust-lang#93808 (Remove first headings indent) - rust-lang#93824 (Stabilize cfg_target_has_atomic) - rust-lang#93830 (Refactor sidebar printing code) - rust-lang#93843 (kmc-solid: Fix wait queue manipulation errors in the `Condvar` implementation) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Pkgsrc changes: * Bump available bootstraps to 1.59.0. * Delete one patch which no longer applies, adjust another. Upstream changes: Version 1.60.0 (2022-04-07) ========================== Language -------- - [Stabilize `#[cfg(panic = "...")]` for either `"unwind"` or `"abort"`.] [93658] - [Stabilize `#[cfg(target_has_atomic = "...")]` for each integer size and `"ptr"`.][93824] Compiler -------- - [Enable combining `+crt-static` and `relocation-model=pic` on `x86_64-unknown-linux-gnu`][86374] - [Fixes wrong `unreachable_pub` lints on nested and glob public reexport][87487] - [Stabilize `-Z instrument-coverage` as `-C instrument-coverage`][90132] - [Stabilize `-Z print-link-args` as `--print link-args`][91606] - [Add new Tier 3 target `mips64-openwrt-linux-musl`\*][92300] - [Add new Tier 3 target `armv7-unknown-linux-uclibceabi` (softfloat)\*][92383] - [Fix invalid removal of newlines from doc comments][92357] - [Add kernel target for RustyHermit][92670] - [Deny mixing bin crate type with lib crate types][92933] - [Make rustc use `RUST_BACKTRACE=full` by default][93566] - [Upgrade to LLVM 14][93577] \* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Guarantee call order for `sort_by_cached_key`][89621] - [Improve `Duration::try_from_secs_f32`/`f64` accuracy by directly processing exponent and mantissa][90247] - [Make `Instant::{duration_since, elapsed, sub}` saturating][89926] - [Remove non-monotonic clocks workarounds in `Instant::now`][89926] - [Make `BuildHasherDefault`, `iter::Empty` and `future::Pending` covariant][92630] Stabilized APIs --------------- - [`Arc::new_cyclic`][arc_new_cyclic] - [`Rc::new_cyclic`][rc_new_cyclic] - [`slice::EscapeAscii`][slice_escape_ascii] - [`<[u8]>::escape_ascii`][slice_u8_escape_ascii] - [`u8::escape_ascii`][u8_escape_ascii] - [`Vec::spare_capacity_mut`][vec_spare_capacity_mut] - [`MaybeUninit::assume_init_drop`][assume_init_drop] - [`MaybeUninit::assume_init_read`][assume_init_read] - [`i8::abs_diff`][i8_abs_diff] - [`i16::abs_diff`][i16_abs_diff] - [`i32::abs_diff`][i32_abs_diff] - [`i64::abs_diff`][i64_abs_diff] - [`i128::abs_diff`][i128_abs_diff] - [`isize::abs_diff`][isize_abs_diff] - [`u8::abs_diff`][u8_abs_diff] - [`u16::abs_diff`][u16_abs_diff] - [`u32::abs_diff`][u32_abs_diff] - [`u64::abs_diff`][u64_abs_diff] - [`u128::abs_diff`][u128_abs_diff] - [`usize::abs_diff`][usize_abs_diff] - [`Display for io::ErrorKind`][display_error_kind] - [`From<u8> for ExitCode`][from_u8_exit_code] - [`Not for !` (the "never" type)][not_never] - [_Op_`Assign<$t> for Wrapping<$t>`][wrapping_assign_ops] - [`arch::is_aarch64_feature_detected!`][is_aarch64_feature_detected] Cargo ----- - [Port cargo from `toml-rs` to `toml_edit`][cargo/10086] - [Stabilize `-Ztimings` as `--timings`][cargo/10245] - [Stabilize namespaced and weak dependency features.][cargo/10269] - [Accept more `cargo:rustc-link-arg-*` types from build script output.][cargo/10274] - [cargo-new should not add ignore rule on Cargo.lock inside subdirs][cargo/10379] Misc ---- - [Ship docs on Tier 2 platforms by reusing the closest Tier 1 platform docs][92800] - [Drop rustc-docs from complete profile][93742] - [bootstrap: tidy up flag handling for llvm build][93918] Compatibility Notes ------------------- - [Remove compiler-rt linking hack on Android][83822] - [Mitigations for platforms with non-monotonic clocks have been removed from `Instant::now`][89926]. On platforms that don't provide monotonic clocks, an instant is not guaranteed to be greater than an earlier instant anymore. - [`Instant::{duration_since, elapsed, sub}` do not panic anymore on underflow, saturating to `0` instead][89926]. In the real world the panic happened mostly on platforms with buggy monotonic clock implementations rather than catching programming errors like reversing the start and end times. Such programming errors will now results in `0` rather than a panic. - In a future release we're planning to increase the baseline requirements for the Linux kernel to version 3.2, and for glibc to version 2.17. We'd love your feedback in [PR #95026][95026]. Internal Changes ---------------- These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [Switch all libraries to the 2021 edition][92068] [83822]: rust-lang/rust#83822 [86374]: rust-lang/rust#86374 [87487]: rust-lang/rust#87487 [89621]: rust-lang/rust#89621 [89926]: rust-lang/rust#89926 [90132]: rust-lang/rust#90132 [90247]: rust-lang/rust#90247 [91606]: rust-lang/rust#91606 [92068]: rust-lang/rust#92068 [92300]: rust-lang/rust#92300 [92357]: rust-lang/rust#92357 [92383]: rust-lang/rust#92383 [92630]: rust-lang/rust#92630 [92670]: rust-lang/rust#92670 [92800]: rust-lang/rust#92800 [92933]: rust-lang/rust#92933 [93566]: rust-lang/rust#93566 [93577]: rust-lang/rust#93577 [93658]: rust-lang/rust#93658 [93742]: rust-lang/rust#93742 [93824]: rust-lang/rust#93824 [93918]: rust-lang/rust#93918 [95026]: rust-lang/rust#95026 [cargo/10086]: rust-lang/cargo#10086 [cargo/10245]: rust-lang/cargo#10245 [cargo/10269]: rust-lang/cargo#10269 [cargo/10274]: rust-lang/cargo#10274 [cargo/10379]: rust-lang/cargo#10379 [arc_new_cyclic]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.new_cyclic [rc_new_cyclic]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.new_cyclic [slice_escape_ascii]: https://doc.rust-lang.org/stable/std/slice/struct.EscapeAscii.html [slice_u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.escape_ascii [u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.escape_ascii [vec_spare_capacity_mut]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.spare_capacity_mut [assume_init_drop]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_drop [assume_init_read]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_read [i8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.abs_diff [i16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.abs_diff [i32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.abs_diff [i64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.abs_diff [i128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.abs_diff [isize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.abs_diff [u8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.abs_diff [u16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.abs_diff [u32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.abs_diff [u64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.abs_diff [u128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.abs_diff [usize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.abs_diff [display_error_kind]: https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#impl-Display [from_u8_exit_code]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html#impl-From%3Cu8%3E [not_never]: https://doc.rust-lang.org/stable/std/primitive.never.html#impl-Not [wrapping_assign_ops]: https://doc.rust-lang.org/stable/std/num/struct.Wrapping.html#trait-implementations [is_aarch64_feature_detected]: https://doc.rust-lang.org/stable/std/arch/macro.is_aarch64_feature_detected.html
Pkgsrc changes: * Bump available bootstraps to 1.59.0. * Adjust line number in patches which had non-zero offsets. Upstream changes: Version 1.60.0 (2022-04-07) =========================== Language -------- - [Stabilize `#[cfg(panic = "...")]` for either `"unwind"` or `"abort"`.] [93658] - [Stabilize `#[cfg(target_has_atomic = "...")]` for each integer size and `"ptr"`.][93824] Compiler -------- - [Enable combining `+crt-static` and `relocation-model=pic` on `x86_64-unknown-linux-gnu`][86374] - [Fixes wrong `unreachable_pub` lints on nested and glob public reexport][87487] - [Stabilize `-Z instrument-coverage` as `-C instrument-coverage`][90132] - [Stabilize `-Z print-link-args` as `--print link-args`][91606] - [Add new Tier 3 target `mips64-openwrt-linux-musl`\*][92300] - [Add new Tier 3 target `armv7-unknown-linux-uclibceabi` (softfloat)\*][92383] - [Fix invalid removal of newlines from doc comments][92357] - [Add kernel target for RustyHermit][92670] - [Deny mixing bin crate type with lib crate types][92933] - [Make rustc use `RUST_BACKTRACE=full` by default][93566] - [Upgrade to LLVM 14][93577] \* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Guarantee call order for `sort_by_cached_key`][89621] - [Improve `Duration::try_from_secs_f32`/`f64` accuracy by directly processing exponent and mantissa][90247] - [Make `Instant::{duration_since, elapsed, sub}` saturating][89926] - [Remove non-monotonic clocks workarounds in `Instant::now`][89926] - [Make `BuildHasherDefault`, `iter::Empty` and `future::Pending` covariant][92630] Stabilized APIs --------------- - [`Arc::new_cyclic`][arc_new_cyclic] - [`Rc::new_cyclic`][rc_new_cyclic] - [`slice::EscapeAscii`][slice_escape_ascii] - [`<[u8]>::escape_ascii`][slice_u8_escape_ascii] - [`u8::escape_ascii`][u8_escape_ascii] - [`Vec::spare_capacity_mut`][vec_spare_capacity_mut] - [`MaybeUninit::assume_init_drop`][assume_init_drop] - [`MaybeUninit::assume_init_read`][assume_init_read] - [`i8::abs_diff`][i8_abs_diff] - [`i16::abs_diff`][i16_abs_diff] - [`i32::abs_diff`][i32_abs_diff] - [`i64::abs_diff`][i64_abs_diff] - [`i128::abs_diff`][i128_abs_diff] - [`isize::abs_diff`][isize_abs_diff] - [`u8::abs_diff`][u8_abs_diff] - [`u16::abs_diff`][u16_abs_diff] - [`u32::abs_diff`][u32_abs_diff] - [`u64::abs_diff`][u64_abs_diff] - [`u128::abs_diff`][u128_abs_diff] - [`usize::abs_diff`][usize_abs_diff] - [`Display for io::ErrorKind`][display_error_kind] - [`From<u8> for ExitCode`][from_u8_exit_code] - [`Not for !` (the "never" type)][not_never] - [_Op_`Assign<$t> for Wrapping<$t>`][wrapping_assign_ops] - [`arch::is_aarch64_feature_detected!`][is_aarch64_feature_detected] Cargo ----- - [Port cargo from `toml-rs` to `toml_edit`][cargo/10086] - [Stabilize `-Ztimings` as `--timings`][cargo/10245] - [Stabilize namespaced and weak dependency features.][cargo/10269] - [Accept more `cargo:rustc-link-arg-*` types from build script output.][cargo/10274] - [cargo-new should not add ignore rule on Cargo.lock inside subdirs][cargo/10379] Misc ---- - [Ship docs on Tier 2 platforms by reusing the closest Tier 1 platform docs][92800] - [Drop rustc-docs from complete profile][93742] - [bootstrap: tidy up flag handling for llvm build][93918] Compatibility Notes ------------------- - [Remove compiler-rt linking hack on Android][83822] - [Mitigations for platforms with non-monotonic clocks have been removed from `Instant::now`][89926]. On platforms that don't provide monotonic clocks, an instant is not guaranteed to be greater than an earlier instant anymore. - [`Instant::{duration_since, elapsed, sub}` do not panic anymore on underflow, saturating to `0` instead][89926]. In the real world the panic happened mostly on platforms with buggy monotonic clock implementations rather than catching programming errors like reversing the start and end times. Such programming errors will now results in `0` rather than a panic. - In a future release we're planning to increase the baseline requirements for the Linux kernel to version 3.2, and for glibc to version 2.17. We'd love your feedback in [PR #95026][95026]. Internal Changes ---------------- These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [Switch all libraries to the 2021 edition][92068] [83822]: rust-lang/rust#83822 [86374]: rust-lang/rust#86374 [87487]: rust-lang/rust#87487 [89621]: rust-lang/rust#89621 [89926]: rust-lang/rust#89926 [90132]: rust-lang/rust#90132 [90247]: rust-lang/rust#90247 [91606]: rust-lang/rust#91606 [92068]: rust-lang/rust#92068 [92300]: rust-lang/rust#92300 [92357]: rust-lang/rust#92357 [92383]: rust-lang/rust#92383 [92630]: rust-lang/rust#92630 [92670]: rust-lang/rust#92670 [92800]: rust-lang/rust#92800 [92933]: rust-lang/rust#92933 [93566]: rust-lang/rust#93566 [93577]: rust-lang/rust#93577 [93658]: rust-lang/rust#93658 [93742]: rust-lang/rust#93742 [93824]: rust-lang/rust#93824 [93918]: rust-lang/rust#93918 [95026]: rust-lang/rust#95026 [cargo/10086]: rust-lang/cargo#10086 [cargo/10245]: rust-lang/cargo#10245 [cargo/10269]: rust-lang/cargo#10269 [cargo/10274]: rust-lang/cargo#10274 [cargo/10379]: rust-lang/cargo#10379 [arc_new_cyclic]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.new_cyclic [rc_new_cyclic]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.new_cyclic [slice_escape_ascii]: https://doc.rust-lang.org/stable/std/slice/struct.EscapeAscii.html [slice_u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.escape_ascii [u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.escape_ascii [vec_spare_capacity_mut]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.spare_capacity_mut [assume_init_drop]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_drop [assume_init_read]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_read [i8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.abs_diff [i16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.abs_diff [i32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.abs_diff [i64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.abs_diff [i128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.abs_diff [isize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.abs_diff [u8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.abs_diff [u16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.abs_diff [u32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.abs_diff [u64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.abs_diff [u128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.abs_diff [usize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.abs_diff [display_error_kind]: https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#impl-Display [from_u8_exit_code]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html#impl-From%3Cu8%3E [not_never]: https://doc.rust-lang.org/stable/std/primitive.never.html#impl-Not [wrapping_assign_ops]: https://doc.rust-lang.org/stable/std/num/struct.Wrapping.html#trait-implementations [is_aarch64_feature_detected]: https://doc.rust-lang.org/stable/std/arch/macro.is_aarch64_feature_detected.html
Currently, we are thinking to use *-unknown-none targets instead to define for every platform our own one (see hermit-os/hermit-rs#197). However, the current target aarch64-unknown-none-softfloat doesn't support dynamic relocation. Our RustyHermit project uses this feature and consequently we define a new target aarch64-unknown-hermitkernel to support it.
I would be willing to be a target maintainer, though I would appreciate if others volunteered to help with that as well.
Uses the same naming as the LLVM target, and the same convention as many other kernel targets (e.g.
x86_64_unknown_none_linuxkernel
). In contrast to the bare-metal target for the aarch64 architecture, the unikernel requires dynamic relocation.I don't believe there is any ambiguity here. It use the same convention on x86_64 architecture.
I don't see any legal issues here.
I see no issues with any of the above.
Only relevant to those making approval decisions.
core
andalloc
can be used. Forstd
exists already the targetaarch64_unknown_hermit
, which enables FPU support.Use
--target=aarch64_unknown_hermitkernel
option to cross compile. The target does currently not support running tests.I don't foresee this being a problem.
No other targets should be affected by the pull request.