rust/src/tools
bors 48c0c25395 Auto merge of #114004 - hermitcore:riscv64gc-unknown-hermit, r=davidtwco
Add `riscv64gc-unknown-hermit` target

This PR adds the new `riscv64gc-unknown-hermit` target, initially created by `@simonschoening,` a 64-bit RISC-V target for the [Hermit] unikernel project.

Furthermore, this cleans up the existing Hermit targets and adds a platform support documentation page for _all_ Hermit targets and goes through the new tier 3 target policy process:

[Hermit]: https://github.com/hermitcore

## Tier 3 target policy

> - A tier 3 target must have a designated developer or developers (the "target
>   maintainers") on record to be CCed when issues arise regarding the target.
>   (The mechanism to track and CC such developers may evolve over time.)

`@stlankes` as the Hermit project lead and I will be the target maintainers.

> - Targets must use naming consistent with any existing targets; for instance, a
>   target for the same CPU or OS as an existing Rust target should use the same
>   name for that CPU or OS. Targets should normally use the same names and
>   naming conventions as used elsewhere in the broader ecosystem beyond Rust
>   (such as in other toolchains), unless they have a very good reason to
>   diverge. Changing the name of a target can be highly disruptive, especially
>   once the target reaches a higher tier, so getting the name right is important
>   even for a tier 3 target.
>   - Target names should not introduce undue confusion or ambiguity unless
>     absolutely necessary to maintain ecosystem compatibility. For example, if
>     the name of the target makes people extremely likely to form incorrect
>     beliefs about what it targets, the name should be changed or augmented to
>     disambiguate it.
>   - If possible, use only letters, numbers, dashes and underscores for the name.
>     Periods (`.`) are known to cause issues in Cargo.

The target name `riscv64gc-unknown-hermit` was derived from the existing `x86_64-unknown-hermit` and `aarch64-unknown-hermit` targets.

> - Tier 3 targets may have unusual requirements to build or use, but must not
>   create legal issues or impose onerous legal terms for the Rust project or for
>   Rust developers or users.
>   - The target must not introduce license incompatibilities.
>   - Anything added to the Rust repository must be under the standard Rust
>     license (`MIT OR Apache-2.0`).
>   - The target must not cause the Rust tools or libraries built for any other
>     host (even when supporting cross-compilation to the target) to depend
>     on any new dependency less permissive than the Rust licensing policy. This
>     applies whether the dependency is a Rust crate that would require adding
>     new license exceptions (as specified by the `tidy` tool in the
>     rust-lang/rust repository), or whether the dependency is a native library
>     or binary. In other words, the introduction of the target must not cause a
>     user installing or running a version of Rust or the Rust tools to be
>     subject to any new license requirements.
>   - Compiling, linking, and emitting functional binaries, libraries, or other
>     code for the target (whether hosted on the target itself or cross-compiling
>     from another target) must not depend on proprietary (non-FOSS) libraries.
>     Host tools built for the target itself may depend on the ordinary runtime
>     libraries supplied by the platform and commonly used by other applications
>     built for the target, but those libraries must not be required for code
>     generation for the target; cross-compilation to the target must not require
>     such libraries at all. For instance, `rustc` built for the target may
>     depend on a common proprietary C runtime library or console output library,
>     but must not depend on a proprietary code generation library or code
>     optimization library. Rust's license permits such combinations, but the
>     Rust project has no interest in maintaining such combinations within the
>     scope of Rust itself, even at tier 3.
>   - "onerous" here is an intentionally subjective term. At a minimum, "onerous"
>     legal/licensing terms include but are *not* limited to: non-disclosure
>     requirements, non-compete requirements, contributor license agreements
>     (CLAs) or equivalent, "non-commercial"/"research-only"/etc terms,
>     requirements conditional on the employer or employment of any particular
>     Rust developers, revocable terms, any requirements that create liability
>     for the Rust project or its developers or users, or any requirements that
>     adversely affect the livelihood or prospects of the Rust project or its
>     developers or users.

No dependencies were added to Rust.

> - Neither this policy nor any decisions made regarding targets shall create any
>   binding agreement or estoppel by any party. If any member of an approving
>   Rust team serves as one of the maintainers of a target, or has any legal or
>   employment requirement (explicit or implicit) that might affect their
>   decisions regarding a target, they must recuse themselves from any approval
>   decisions regarding the target's tier status, though they may otherwise
>   participate in discussions.
>   - This requirement does not prevent part or all of this policy from being
>     cited in an explicit contract or work agreement (e.g. to implement or
>     maintain support for a target). This requirement exists to ensure that a
>     developer or team responsible for reviewing and approving a target does not
>     face any legal threats or obligations that would prevent them from freely
>     exercising their judgment in such approval, even if such judgment involves
>     subjective matters or goes beyond the letter of these requirements.

Understood.
I am not a member of a Rust team.

> - Tier 3 targets should attempt to implement as much of the standard libraries
>   as possible and appropriate (`core` for most targets, `alloc` for targets
>   that can support dynamic memory allocation, `std` for targets with an
>   operating system or equivalent layer of system-provided functionality), but
>   may leave some code unimplemented (either unavailable or stubbed out as
>   appropriate), whether because the target makes it impossible to implement or
>   challenging to implement. The authors of pull requests are not obligated to
>   avoid calling any portions of the standard library on the basis of a tier 3
>   target not implementing those portions.

Understood.
`std` is supported.

> - The target must provide documentation for the Rust community explaining how
>   to build for the target, using cross-compilation if possible. If the target
>   supports running binaries, or running tests (even if they do not pass), the
>   documentation must explain how to run such binaries or tests for the target,
>   using emulation if possible or dedicated hardware if necessary.

Building is described in the platform support doc.

> - Tier 3 targets must not impose burden on the authors of pull requests, or
>   other developers in the community, to maintain the target. In particular,
>   do not post comments (automated or manual) on a PR that derail or suggest a
>   block on the PR based on a tier 3 target. Do not send automated messages or
>   notifications (via any medium, including via ``@`)` to a PR author or others
>   involved with a PR regarding a tier 3 target, unless they have opted into
>   such messages.
>   - Backlinks such as those generated by the issue/PR tracker when linking to
>     an issue or PR are not considered a violation of this policy, within
>     reason. However, such messages (even on a separate repository) must not
>     generate notifications to anyone involved with a PR who has not requested
>     such notifications.

Understood.

> - Patches adding or updating tier 3 targets must not break any existing tier 2
>   or tier 1 target, and must not knowingly break another tier 3 target without
>   approval of either the compiler team or the maintainers of the other tier 3
>   target.
>   - In particular, this may come up when working on closely related targets,
>     such as variations of the same architecture with different features. Avoid
>     introducing unconditional uses of features that another variation of the
>     target may not have; use conditional compilation or runtime detection, as
>     appropriate, to let each target run code supported by that target.

I don't think this PR breaks anything.

r? compiler-team
2023-07-24 13:28:18 +00:00
..
build-manifest compiler: Add riscv64gc-unknown-hermit target 2023-07-24 10:36:05 +02:00
build_helper Rollup merge of #113644 - jyn514:bootstrap-cleanups, r=albertlarsan68 2023-07-15 19:42:51 +02:00
bump-stage0 Upgrade to indexmap 2.0.0 2023-07-03 13:51:54 -07:00
cargo@1b15556767 Update cargo 2023-07-18 19:45:12 +01:00
cargotest
clippy XSimplifiedType to SimplifiedType::X 2023-07-20 11:05:52 +02:00
collect-license-metadata Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
compiletest On nightly, dump ICE backtraces to disk 2023-07-19 14:10:07 +00:00
error_index_generator Provide more context for rustc +nightly -Zunstable-options on stable 2023-06-27 23:23:33 +08:00
expand-yaml-anchors
generate-copyright Fix remaining typos 2023-04-10 21:02:49 +02:00
generate-windows-sys Move arm32 shim to c.rs 2023-06-24 17:30:27 +01:00
html-checker
jsondocck Allow to have - in the rustdoc-json test file name 2023-07-12 10:45:49 +02:00
jsondoclint Allow to have - in the rustdoc-json test file name 2023-07-12 10:45:49 +02:00
linkchecker Appease lints 2023-05-14 22:00:23 +02:00
lint-docs Revert "Fix x test lint-docs when download-rustc is enabled" 2023-07-11 22:30:28 -05:00
lld-wrapper
miri Merge from rustc 2023-07-23 09:27:28 +02:00
miropt-test-tools add way to split mir-opt into panic=abort and panic=unwind 2023-06-12 09:34:14 +02:00
opt-dist Use log groups in opt-dist 2023-07-16 10:36:13 +02:00
remote-test-client
remote-test-server
replace-version-placeholder Only depend on CFG_VERSION in rustc_interface 2023-05-17 23:54:21 -05:00
rls Don't use serde-derive in the rls shim 2023-07-10 14:53:57 -07:00
rust-analyzer Merge commit '99718d0c8b' into sync-from-ra 2023-07-24 12:21:34 +03:00
rust-demangler
rust-installer rust-installer: Use env(1) in the shebang. 2023-07-21 17:55:49 -07:00
rustbook bump few deps 2023-04-06 18:21:37 +03:00
rustdoc
rustdoc-gui Transform backslash into slashes in DOC_FOLDER variable for browser-ui-test 2023-06-14 10:37:56 +02:00
rustdoc-gui-test Make try_run return a Result<(), ()> instead of a boolean 2023-06-23 17:07:34 +02:00
rustdoc-js Change format of rustdoc-js tests by putting query and correction directly alongside the expected values 2023-06-09 17:00:47 +02:00
rustdoc-themes
rustfmt On nightly, dump ICE backtraces to disk 2023-07-19 14:10:07 +00:00
suggest-tests Fix the test directories suggested by ./x.py suggest 2023-04-30 11:05:13 +10:00
tidy Fix tidy error 2023-07-22 13:47:39 +00:00
tier-check
unicode-table-generator remove some unneeded imports 2023-04-12 19:27:18 +02:00
unstable-book-gen
x Add other workspaces to linkedProjects in rust_analyzer_settings.json 2023-05-26 12:08:58 -05:00
cherry-pick.sh
publish_toolstate.py Apply changes to fix python linting errors 2023-06-16 20:56:01 -04:00