about summary refs log tree commit diff
path: root/src/bootstrap
AgeCommit message (Collapse)AuthorLines
2025-08-14Auto merge of #145131 - Kobzol:bootstrap-clippy, r=jieyouxubors-143/+430
Enforce in bootstrap that clippy must have stage at least 1 This mostly piggybacks on the previous `x check` [rework](https://github.com/rust-lang/rust/pull/143048). The new "rules" follow the new staging logic. So `x clippy <foo>` lints `foo` using stage0 Clippy. `x clippy --stage 2 <foo>` lints `foo` using stage1 Clippy (which is built from in-tree sources). I had to fix some latent issues with `prepare_compiler_for_check` along the way. Checking `rustc_private` tools should now check less compiler crates (or rather not check compiler examples/tests/etc.), potentially speeding it up slightly. I also had to make some manual adjustments to `x clippy ci` so that it doesn't do needless work. r? `@jieyouxu`
2025-08-13Rollup merge of #145341 - Kobzol:codegen-backend-gcc, r=jieyouxuGuillaume Gomez-67/+98
Install libgccjit into the compiler's sysroot when cg_gcc is enabled This PR installs the `libgccjit.so` library (which is essentially GCC) into the rustc sysroot (`stageN/lib` on Linux) when the GCC codegen backend is enabled. This allows using the GCC codegen backend "out of the box" with the resulting rustc. It would be nice to get rid of the `libgccjit.so.0` alias (https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/Forcing.20unversioned.20dylib.20dependencies.20on.20Linux/with/534180740), but it's not blocking for this change. You can try running `x build std --set 'rust.codegen-backends=["llvm", "gcc"]'` and then compiling a hello world with `rustc +stage1 -Zcodegen-backend=gcc main.rs`. It is now also possible to build stage2 rustc when the GCC is configured to be the default codegen backend, without any further `LD_LIBRARY_PATH` hacks: `./x build compiler --stage 2 --set 'rust.codegen-backends=["gcc"]'`. After this change, it should be pretty simple to add a dist/rustup step for actually shipping cg_gcc to end users. CC ```@GuillaumeGomez``` r? ```@jieyouxu```
2025-08-13Rollup merge of #144962 - Gelbpunkt:aarch64_be-unknown-none-softfloat, ↵Guillaume Gomez-0/+1
r=davidtwco Add aarch64_be-unknown-none-softfloat target This adds a new target for bare-metal big endian ARM64 without FPU. We want to use this in [the Hermit unikernel](https://github.com/hermit-os/kernel) because big endian ARM64 is the most accessible big endian architecture for us and it can be supported with our existing aarch64 code. I have compiled our kernel and bootloader with this target and they work as expected in QEMU. Regarding the [tier 3 target policy](https://doc.rust-lang.org/rustc/target-tier-policy.html#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.) The maintainer(s) (currently just me) are listed in the markdown document that documents the target. > - 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 is consistent with the existing `aarch64-unknown-none-softfloat` target and the existing big endian aarch64 targets like `aarch64_be-unknown-linux-gnu`. > - 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. There are no licensing issues and any toolchain that can compile for `aarch64-unknown-none-softfloat` can also compile for `aarch64_be-unknown-none-softfloat` (well, at least GCC and LLVM). No proprietary components are required. > - 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. Ack. > - 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. This target does not implement std and is equivalent to `aarch64-unknown-none-softfloat` in all these regards. > - 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. Ack, that is part of the markdown document. > - 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. Ack. > - 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. This doesn't break any existing targets. > - Tier 3 targets must be able to produce assembly using at least one of rustc's supported backends from any host target. (Having support in a fork of the backend is not sufficient, it must be upstream.) The LLVM backend works. > - If a tier 3 target stops meeting these requirements, or the target maintainers no longer have interest or time, or the target shows no signs of activity and has not built for some time, or removing the target would improve the quality of the Rust codebase, we may post a PR to remove it; any such PR will be CCed to the target maintainers (and potentially other people who have previously worked on the target), to check potential interest in improving the situation. Ack.
2025-08-13Add missing entry in STAGE0_MISSING_TARGETSJens Reidel-0/+1
Signed-off-by: Jens Reidel <adrian@travitia.xyz>
2025-08-13Print crate count for `check::Rustc` in snapshot testsJakub Beránek-9/+13
2025-08-13Remove the `libgccjit.so.0` alias and only create the versioned library when ↵Jakub Beránek-17/+9
installing `libgccjit.so`
2025-08-13Make sure that we won't accidentally ship libgccjit.so in the dist componentJakub Beránek-1/+13
2025-08-13Install libgccjit into the compiler's sysroot when the GCC codegen backend ↵Jakub Beránek-55/+82
is enabled
2025-08-13Bless testsJakub Beránek-1/+7
2025-08-13Manually optimize steps performed by `x clippy ci`Jakub Beránek-25/+32
2025-08-13Only check rustc when linting rustc_codegen_gccJakub Beránek-8/+7
2025-08-13Add change tracker entryJakub Beránek-0/+5
2025-08-13Add more testsJakub Beránek-9/+83
2025-08-13Fix staging of linting toolsJakub Beránek-36/+38
2025-08-13Fix staging for `x clippy std`Jakub Beránek-56/+67
2025-08-13Add snapshot test for `x clippy std`Jakub Beránek-0/+17
2025-08-13Fix Clippy staging for compilerJakub Beránek-53/+84
2025-08-13Add snapshot test for `x clippy ci`Jakub Beránek-0/+57
2025-08-13Forbid running Clippy on stage 0Jakub Beránek-0/+4
2025-08-13Implement `clippy::CodegenGcc` as a separate stepJakub Beránek-7/+81
To correctly pass `RustcPrivateCompilers` to it and to avoid running it on `x clippy compiler`.
2025-08-13Prepare standard library for checking rustc in `prepare_compiler_for_check`Jakub Beránek-27/+23
2025-08-13Rollup merge of #145320 - Kobzol:fix-cranelift-codegen-dist, r=shepmasterJakub Beránek-1/+5
Allow cross-compiling the Cranelift dist component Should help unblock https://github.com/rust-lang/rust/pull/145252 (https://rust-lang.zulipchat.com/#narrow/channel/242791-t-infra/topic/macos-13.20shutting.20down/with/534032174).
2025-08-12Auto merge of #145295 - Kobzol:unify-stages, r=jieyouxubors-262/+237
Consolidate stage directories and group logs in bootstrap My post-stage-0-redesign bootstrap fixes aren't done yet, but I think that enough steps have been migrated to the new system that it makes sense to actually modify the directories on disk, and what gets printed when bootstrap runs, so that it actually corresponds to the new system. Before, the printed stages didn't always make sense. This PR: - Fixes the numbering of `stageN` directories in the build directory. It was not corresponding to the correct stages before; notice that I did not modify `bootstrap/README.md`, as it was essentially describing what happens after this PR (first commit). - Unifies all steps that output a build group to use the `Builder::msg` method. It's probably not the final stage, and some of the test steps might not be fully accurate yet, because I didn't fix test step numbering yet, but I think that it's a clear improvement from before, and now that everything uses the same method, we can easily make changes across the board, to ensure that it stays unified (second commit). r? `@jieyouxu` try-job: dist-x86_64-msvc try-job: dist-x86_64-linux
2025-08-12Allow cross-compiling the Cranelift dist componentJakub Beránek-1/+5
2025-08-12Add change tracker entryJakub Beránek-0/+5
2025-08-12Replace `stage0-tools-bin` with `stage1-tools-bin`Jakub Beránek-1/+1
2025-08-12Resolve review remarksJakub Beránek-9/+5
2025-08-12Change format of messages in `Builder::fmt`Jakub Beránek-2/+3
2025-08-12Unify all groups in bootstrap to use `Builder::msg`Jakub Beránek-239/+206
2025-08-12Consolidate stageN directories in the build directoryJakub Beránek-18/+24
Now stageN-X corresponds to stage N X, as it should.
2025-08-12bootstrap: Only warn about `rust.debug-assertions` if downloading rustcZalathar-1/+1
2025-08-11Auto merge of #145254 - GuillaumeGomez:rollup-7bp43pv, r=GuillaumeGomezbors-3/+5
Rollup of 4 pull requests Successful merges: - rust-lang/rust#144966 ( Improve suggestion for "missing function argument" on multiline call) - rust-lang/rust#145111 (remove some unused private trait impls) - rust-lang/rust#145221 (Fix Cargo cross-compilation (take two)) - rust-lang/rust#145247 (Update `sysinfo` version to `0.37.0`) r? `@ghost` `@rustbot` modify labels: rollup
2025-08-11Auto merge of #145207 - Kobzol:codegen-backend-clif-dist, r=jieyouxubors-30/+35
Ship correct Cranelift library in its dist component The first commit adds a post-dist UI test to check that Cranelift can be used with the extracted dist x64 Linux archive. The original codegen copy logic in the Cranelift dist step was a bit redundant, and I didn't notice in https://github.com/rust-lang/rust/pull/144787 that it's copying the codegen backend from the build compiler's sysroot, rather than the target compiler's sysroot. The second commit modifies the logic to directly access the built codegen file (there is no need to search for it in the compiler's sysroot, in fact when you run just `x dist rustc_codegen_cranelift`, it shouldn't "taint" the sysroot with the codegen backend! Which it did before https://github.com/rust-lang/rust/pull/144787) and copy it to the tarball under a normalized name. Thus we get around any similar potential issues in the future, and make previously implicit logic more explicit. This also fixes running just `x dist rustc_codegen_cranelift` without enabling `cranelift` in `rust.codegen-backends`, which should have been enabled by https://github.com/rust-lang/rust/pull/144787, but it didn't work fully, because the dist step tried to copy the codegen backend from the compiler's sysroot, but it didn't contain the codegen backend if it was not enabled by `rust.codegen-backends`. Fixes: https://github.com/rust-lang/rust/issues/145201 try-job: dist-x86_64-linux
2025-08-11Rollup merge of #145247 - GuillaumeGomez:update-sysinfo, r=KobzolGuillaume Gomez-3/+3
Update `sysinfo` version to `0.37.0` Some small performance improvements and internal cleanups.
2025-08-11Rollup merge of #145221 - Kobzol:cargo-dist-fix-2, r=jieyouxuGuillaume Gomez-0/+2
Fix Cargo cross-compilation (take two) In https://github.com/rust-lang/rust/pull/145083, I fixed the case of manually invoking `x dist cargo`, but I realized that `x install` creates the `tool::Cargo` step through the `from_build_frompiler` constructor, which doesn't go through `get_tool_target_compiler`. So we just prepare both the host and target stdlibs directly before building Cargo. Ideally we would get rid of `from_build_compiler`, but that will require refactoring the dist and test steps, which is upcoming. Hopefully fixes https://github.com/rust-lang/rust/issues/145059 for good.
2025-08-11Update `sysinfo` version to `0.37.0`Guillaume Gomez-3/+3
2025-08-11Auto merge of #145011 - Kobzol:bootstrap-doc, r=jieyouxubors-239/+510
Enforce in bootstrap that doc must have stage at least 1 Following with the bootstrap cleanups, this time around `doc` steps. Should be pretty straightforward, because the supporting infrastructure was already there. The only thing I found a bit fishy is using `Mode::ToolBootstrap` as a "catch-all" mode for non-rustc-private steps in `tool_doc!`, but I don't think that we need to distinguish the tools in some special way when documenting them, apart from supporting `rustc_private`. Before, `x doc` more or less defaulted to what we call stage 2 now. Now it is properly stage 1, so e.g. `x doc compiler` documents the compiler using the stage0/beta rust(do)c. r? `@jieyouxu` try-job: dist-aarch64-msvc
2025-08-11Rollup merge of #145149 - ↵Stuart Cook-306/+439
Shourya742:2025-07-08-convert-config-method-invoke-inside-parse-functions, r=Kobzol Make config method invoke inside parse use dwn_ctx This PR is part of a series of config refactorings. It removes calls from config methods to solid functions defined in `config.rs`. After this, we will remove the default dependencies in the config. r? ```@Kobzol```
2025-08-10Rollup merge of #145121 - ↵Jacob Pratt-0/+14
lambdageek:dist-must-keep-llvm-third-party-siphash, r=Kobzol bootstrap: `x.py dist rustc-src` should keep LLVM's siphash Fixes rust-lang/rust#145117
2025-08-10Fix Cargo cross-compilation (take two)Jakub Beránek-0/+2
2025-08-10Ship the correct Cranelift backend in its dist stepJakub Beránek-30/+35
2025-08-10Explicitly pass path to built stdlib JSON docs and use the correct compiler ↵Jakub Beránek-23/+26
for it
2025-08-10Rollup merge of #145156 - Kobzol:cargo-build-dir, r=lqd,jieyouxuStuart Cook-0/+9
Override custom Cargo `build-dir` in bootstrap The context for this issue is in https://github.com/rust-lang/rust/issues/145107. The issue is that if people configure `build-dir`, it would break bootstrap. For now, we just hard-code it to our self-contained target directories inside the build directory. Tested by putting the following: ```toml [build] build-dir = "/tmp/foo" [unstable] build-dir = true ``` into `<rustc-checkout>/.cargo/config.toml`. `x build` works with this PR, doesn't work without this PR. Fixes: https://github.com/rust-lang/rust/issues/145107
2025-08-10Rollup merge of #145129 - dpaoliello:arm64eclink, r=wesleywiserStuart Cook-0/+7
[win][arm64ec] Add `/machine:arm64ec` when linking LLVM as Arm64EC When the MSVC linker sees an Arm64EC object file, it needs to know if it's linking the final executable as Arm64EC or Arm64X. This change adds the `/machine:arm64ec` flag to the linker when building LLVM as Arm64EC to avoid that ambiguity (and resulting linker error).
2025-08-10Rollup merge of #145089 - Kobzol:bootstrap-cmd-error, r=jieyouxuStuart Cook-82/+83
Improve error output when a command fails in bootstrap I fixed this because it was being an issue for debugging CI failures. We try to print as much information as possible, just with a slightly less verbose command description in non-verbose mode. The code is now more unified and hopefully simpler to understand. I also fixed the `format_short_cmd` logic, it was a bit weird after some recent refactors. Fixes: https://github.com/rust-lang/rust/issues/145002 r? `````````@jieyouxu````````` CC `````````@Shourya742`````````
2025-08-10Bless testsJakub Beránek-3/+20
2025-08-10Review remarksJakub Beránek-2/+6
2025-08-10Add change tracker entryJakub Beránek-0/+5
2025-08-10Update testsJakub Beránek-37/+208
2025-08-10Update `Std` doc stepJakub Beránek-27/+40