Commit Graph

5772 Commits

Author SHA1 Message Date
onur-ozkan b3fb67e050 set on-broken-pipe in prepare_cargo_tool
Currently rustdoc breaks the build cache (due to having different rustflags) when building
rustdoc before building another tool (e.g., `x test miri && x test rustdoc && x test miri`).

This change fixes that by moving `on-broken-pipe` into `prepare_cargo_tool` so it is
set for all tools.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-26 08:03:55 +03:00
Matthias Krüger 7babf99ea9 Rollup merge of #126298 - heiher:loongarch64-musl-ci, r=Mark-Simulacrum
Promote loongarch64-unknown-linux-musl to Tier 2 with host tools

MCP: https://github.com/rust-lang/compiler-team/issues/753
Tracking issue: https://github.com/rust-lang/rust/issues/122592

try-job: dist-loongarch64-musl
2024-06-24 06:27:13 +02:00
Matthias Krüger 4a3863e7e3 Rollup merge of #126616 - onur-ozkan:less-warnings, r=Mark-Simulacrum
less bootstrap warnings

This is how the build logs looks like currently:

```sh
$ x build
Building bootstrap
   Compiling bootstrap v0.0.0 (/home/nimda/devspace/onur-ozkan/rust/src/bootstrap)
    Finished `dev` profile [unoptimized] target(s) in 3.43s
WARNING: no codegen-backends config matched the requested path to build a codegen backend. HELP: add backend to codegen-backends in config.toml.
WARNING: creating symbolic link `/home/nimda/devspace/.other/rustc-builds/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/rustc-src/rust` to `/home/nimda/devspace/onur-ozkan/rust` failed with File exists (os
error 17)
Creating a sysroot for stage2 compiler (use `rustup toolchain link 'name' build/host/stage2`)
WARNING: creating symbolic link `/home/nimda/devspace/.other/rustc-builds/build/x86_64-unknown-linux-gnu/ci-rustc-sysroot/lib/rustlib/rustc-src/rust` to `/home/nimda/devspace/onur-ozkan/rust` failed with File e
xists (os error 17)
Building tool rustdoc (stage1 -> stage2, x86_64-unknown-linux-gnu)
   Compiling rustdoc v0.0.0 (/home/nimda/devspace/onur-ozkan/rust/src/librustdoc)
   Compiling rustdoc-tool v0.0.0 (/home/nimda/devspace/onur-ozkan/rust/src/tools/rustdoc)
    Finished `release` profile [optimized + debuginfo] target(s) in 13.57s
Build completed successfully in 0:00:17
```

This PR removes artifact linking warnings and only shows the codegen-backend warning if explicitly called or during Dist or Install steps.
2024-06-23 22:38:59 +02:00
Matthias Krüger f016552b1c Rollup merge of #126230 - onur-ozkan:followup-126225, r=Mark-Simulacrum
tidy: skip submodules if not present for non-CI environments

Right now tidy requires rustc-perf to be fetched as it checks its license, but this doesn't make sense for most contributors since rustc-perf is a dist-specific tool and its license will not change frequently, especially during compiler development. This PR makes tidy to skip rustc-perf if it's not fetched and if it's not running in CI.

Applies https://github.com/rust-lang/rust/pull/126225#issuecomment-2158143674 and reverts #126225.
2024-06-23 22:38:58 +02:00
WANG Rui 16fef40896 Promote loongarch64-unknown-linux-musl to Tier 2 with host tools
MCP: https://github.com/rust-lang/compiler-team/issues/753
2024-06-23 22:36:46 +08:00
Matthias Krüger 92af6703b8 Rollup merge of #126782 - mtilda:mtilda/patch/x-test-with-absolute-paths, r=onur-ozkan
Support absolute source paths in bootstrap

Fixes https://github.com/rust-lang/rust/issues/126765

`x test [PATHS]` should work when each path

1. Is the name of a build step, such as `tidy` in `x test tidy` or
2. Points to an existing file that is a descendant of the builder's source directory (root of this repository).
2024-06-23 09:45:29 +02:00
Mathilda 57cb0e23d9 Support absolute PATHS in x.py test [PATHS] 2024-06-22 23:33:52 -04:00
Zalathar 16cf2682ee Try to clarify the confusingly-named RustDev and RustcDev steps 2024-06-23 11:31:21 +10:00
Matthias Krüger 162120b4fa Rollup merge of #126318 - Kobzol:bootstrap-perf, r=onur-ozkan
Add a `x perf` command for integrating bootstrap with `rustc-perf`

This PR adds a new `x perf` command to bootstrap. The idea is to let rustc developers profile (`profile_local`) and benchmark (`bench_local`) a stage1/stage2 compiler directly from within `rust`.

Before, if you wanted to use `rustc-perf`, you had to clone it, set it up, copy the `rustc` sysroot after every change to `rust` etc. This is an attempt to automate that.

I opened this PR mostly for discussion. My idea is to offer an interface that looks something like this (a random sample of commands):
```bash
x perf --stage 2 profile eprintln
x perf --stage1 profile cachegrind
x perf benchmark --id baseline
x perf benchmark --id after-edit
x perf cmp baseline after-edit
```

In this PR, I'd like to only implement the simplest case (`profile_local (eprintln)`), because that only requires a single sysroot (you don't compare anything), and it's relatively easy to set up. Also, I'd like to avoid forcing developers to deal with the rustc-perf UI, so more complex use-cases (like benchmarking two sysroots and comparing the results) should probably wait for https://github.com/rust-lang/rustc-perf/issues/1734 (which is hopefully coming along soon-ish).

I'm not sure if it's better to do this in bootstrap directly, or if I should create some shim tool that will receive a `rustc` sysroot, and offer a simplified CLI on top of `rustc-perf`.

## Why is a separate CLI needed?
We definitely need to add some support to bootstrap to automate preparing `rustc-perf` and the `rustc` sysroot, but in theory after that we could just let people invoke `rustc-perf` manually. While that is definitely possible, you'd need to manually figure out where is your sysroot located, which seems annoying to me. The `rustc-perf` CLI is also relatively complex, and for this use-case it makes sense to only use a subset of it. So I thought that it would be better to offer a simplified interface on top of it that would make life easier for contributors. But maybe it's not worth it.

CC `@onur-ozkan`
2024-06-22 19:33:56 +02:00
Guillaume Gomez 25bcc7d130 Rollup merge of #126731 - Kobzol:bootstrap-cmd-refactor, r=onur-ozkan
Bootstrap command refactoring: refactor `BootstrapCommand` (step 1)

This PR is a first step towards https://rust-lang.zulipchat.com/#narrow/stream/326414-t-infra.2Fbootstrap.

It refactors `BoostrapCommand` to get it closer to a state where it is an actual command wrapper that can be routed through a central place of command execution, and also to make the distinction between printing output vs handling output programatically clearer (since now it's a mess).

The existing usages of `BootstrapCommand` are complicated primarily because of different ways of handling output. There are commands that:
1) Want to eagerly print stdout/stderr of the executed command, plus print an error message if the command fails (output mode `PrintAll`). Note that this error message attempts to print stdout/stderr of the command when `-v` is enabled, but that will always be empty, since this mode uses `.status()` and not `.output()`.
2) Want to eagerly print stdout/stderr of the executed command, but do not print any additional error message if it fails (output mode `PrintOutput`)
3) Want to capture stdout/stderr of the executed command, but print an error message if it fails (output mode `PrintFailure`). This means that the user wants to either ignore the output or handle it programatically, but that's not obvious from the name.

The difference between 1) and 2) (unless explicitly specified) is determined dynamically based on the bootstrap verbosity level.

It is very difficult for me to wrap my head around all these modes. I think that in a future PR, we should split these axes into e.g. this:
1) Do I want to handle the output programmatically or print it to the terminal? This should be a separate axis, true/false. (Note that "hiding the output" essentially just means saying that I handle it programmatically, and then I ignore the output).
2) Do I want to print a message if the command fails? Yes/No/Based on verbosity (which would be the default).

Then there is also the failure mode, but that is relatively simple to handle, the command execution will just shutdown bootstrap (either eagerly or late) when the command fails.

Note that this is just a first refactoring steps, there are a lot of other things to be done, so some things might not look "final" yet. The next steps are (not necessarily in this order):
- Remove `run` and `run_cmd` and implement everything in terms of `run_tracked` and rename `run_tracked` to `run`
- Implement the refactoring specified above (change how output modes work)
- Modify `BootstrapCmd` so that it stores `Command` instead of `&mut Command` and remove all the annoying `BootstrapCmd::from` by changing `Command::new` to `BootstrapCmd::new`
- Refactor the rest of command executions not currently using `BootstrapCmd` that can access Builder to use the correct output and failure modes. This will include passing Builder to additional places.
- Handle the most complex cases, such as output streaming. That will probably need to be handled separately.
- Refactor the rest of commands that cannot access builder (e.g. `Config::parse`) by introducing a new command context that will be passed to these places, and then stored in `Builder`. Move certain fields (such as `fail_fast`) from `Builder` to the command context.
- Handle the co-operation of `Builder`, `Build`, `Config` and command context. There are some fields and logic used during command execution that are distributed amongst `Builder/Build/Config`, so it will require some refactoring to make it work if the execution will happen on a separate place (in the command context).
- Refactor logging of commands, so that it is either logged to a file or printed in a nice hierarchical way that cooperates with the `Step` debug hierarchical output.
- Implement profiling of commands (add command durations to the command log, print a log of slowest commands and their execution counts at the end of bootstrap execution, perhaps store command executions to `metrics.json`).
- Implement caching of commands.
- Implement testing of commands through snapshot tests/mocking.

Best reviewed commit by commit.

r? ``@onur-ozkan``
2024-06-22 12:57:20 +02:00
Jakub Beránek 0bd58d8122 Apply review comments. 2024-06-22 09:35:39 +02:00
Jakub Beránek 250586cb2e Wrap std Output in CommandOutput 2024-06-22 09:18:58 +02:00
bors 684b3553f7 Auto merge of #124032 - Voultapher:a-new-sort, r=thomcc
Replace sort implementations

This PR replaces the sort implementations with tailor-made ones that strike a balance of run-time, compile-time and binary-size, yielding run-time and compile-time improvements. Regressing binary-size for `slice::sort` while improving it for `slice::sort_unstable`. All while upholding the existing soft and hard safety guarantees, and even extending the soft guarantees, detecting strict weak ordering violations with a high chance and reporting it to users via a panic.

* `slice::sort` -> driftsort [design document](https://github.com/Voultapher/sort-research-rs/blob/main/writeup/driftsort_introduction/text.md), includes detailed benchmarks and analysis.

* `slice::sort_unstable` -> ipnsort [design document](https://github.com/Voultapher/sort-research-rs/blob/main/writeup/ipnsort_introduction/text.md), includes detailed benchmarks and analysis.

#### Why should we change the sort implementations?

In the [2023 Rust survey](https://blog.rust-lang.org/2024/02/19/2023-Rust-Annual-Survey-2023-results.html#challenges), one of the questions was: "In your opinion, how should work on the following aspects of Rust be prioritized?". The second place was "Runtime performance" and the third one "Compile Times". This PR aims to improve both.

#### Why is this one big PR and not multiple?

* The current documentation gives performance recommendations for `slice::sort` and `slice::sort_unstable`. If for example only one of them were to be changed, this advice would be misleading for some Rust versions. By replacing them atomically, the advice remains largely unchanged, and users don't have to change their code.
* driftsort and ipnsort share a substantial part of their implementations.
* The implementation of `select_nth_unstable` uses internals of `slice::sort_unstable`, which makes it impractical to split changes.

---

This PR is a collaboration with `@orlp.`
2024-06-20 20:40:43 +00:00
Lukas Bergdoll 5caa7f9a4a Improve html-checker error message
The previous message omits which of the dozens of tools called tidy is
meant. And it's written in a way that one can easily miss the *not*,
thinking it reads "Note that `tidy` is the in-tree `src/tools/tidy` but
needs to be installed". The error message should hopefully help future
contributors.
2024-06-20 18:03:42 +02:00
Jakub Beránek 3fe4d134dd Appease clippy 2024-06-20 13:00:12 +02:00
Jakub Beránek c15293407f Remove unused import 2024-06-20 12:30:41 +02:00
Jakub Beránek 5c4318d02c Implement run_cmd in terms of run_tracked 2024-06-20 11:54:06 +02:00
Jakub Beránek 0de7b92cc6 Remove run_delaying_failure 2024-06-20 11:52:48 +02:00
Jakub Beránek e933cfb13c Remove run_quiet_delaying_failure 2024-06-20 11:43:42 +02:00
Jakub Beránek 949e667d3f Remove run_quiet 2024-06-20 11:40:15 +02:00
Jakub Beránek a12f541a18 Implement new command execution logic
This function both handles error printing and early/late failures, but it also always returns the actual output of the command
2024-06-20 11:33:23 +02:00
León Orell Valerian Liehr cbf9d57e89 Rollup merge of #126572 - onur-ozkan:channel-problem, r=clubby789
override user defined channel when using precompiled rustc

We need to override `rust.channel` if it's manually specified when using the CI rustc. This is because if the compiler uses a different channel than the one specified in config.toml, tests may fail due to using a different channel than the one used by the compiler during tests.

For more context, see https://github.com/rust-lang/rust/pull/122709#issuecomment-2165246281.
2024-06-19 13:04:59 +02:00
Zalathar fd4fe7d129 Remove src/tools/rust-demangler 2024-06-19 20:41:34 +10:00
onur-ozkan 521e707d7a make codegen-backend config warning less noisy
If `codegen-backends` is missing "cranelift" and "gcc" (which is common),
bootstrap will now only show this warning during `dist` and `install` steps,
or if codegen-backends was explicitly called for build.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-18 13:34:34 +03:00
onur-ozkan f76c3b7fb9 replace remove_dir with remove_dir_all in helpers::symlink_dir
When using `symlink_dir`, it first removes the existing link with `remove_dir`.
However, if the path isn't a link and contains files, `remove_dir` fails
with "DirectoryNotEmpty", which causes the symbolic linking to fail as well.
We have this problem on linking 'rustlib/rust' because it contains files as an
actual directory.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-18 13:28:29 +03:00
Ralf Jung e3e71404ca fix checking git submodules during a commit hook 2024-06-17 16:19:04 +02:00
onur-ozkan 5ae2446109 simplify Builder::doc_rust_lang_org_channel
This is already handled at the config parsing level, so we can simplify it.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-17 08:49:36 +03:00
onur-ozkan 207c5bc5a9 override user defined channel when using precompiled rustc
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-17 08:48:49 +03:00
onur-ozkan e9e3c38d01 tidy: skip submodules if not present for non-CI environments
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-17 07:56:06 +03:00
许杰友 Jieyou Xu (Joe) edfadbf692 Rollup merge of #126524 - klensy:bump-15-06-24, r=onur-ozkan
bump few deps

This bump deps to cut dupes:

Updating html5ever 0.27
Updating derive_more 0.99.18
Updating crossbeam-deque v0.8.5
Updating crossbeam-epoch v0.9.18
Updating crossbeam-utils v0.8.20
Updating junction v1.1.0

No interesting changes in changelogs.
2024-06-16 21:14:41 +01:00
Jacob Pratt e345ddb2d1 Rollup merge of #126309 - onur-ozkan:unify-git-utilization, r=Kobzol
unify git command preperation

Due to https://github.com/rust-lang/rust/issues/125954, we had to modify git invocations with certain flags in https://github.com/rust-lang/rust/pull/126255. However, because there are so many instances of `Command::new("git")` in bootstrap, it is difficult to apply these solutions to all of them.

This PR creates a helper function that unifies the git usage in bootstrap. Meaning, whenever special flags or hacks are needed, we can apply them to this single function which makes things much simpler for the bootstrap team.
2024-06-16 03:41:58 -04:00
bors bc3618f31e Auto merge of #126479 - Kobzol:disable-llvm-linker-by-default, r=onur-ozkan
Disable `llvm-bitcode-linker` in the default bootstrap profiles

I don't think that we really need to enable `llvm-bitcode-linker` in the default bootstrap profiles, since it seems that it is only useful for running `nvptx` tests. It should be enabled on CI, which it is, and that should be enough. People can enable it easily locally, if they want.

The linker causes occasionally some rebuild issues (https://github.com/rust-lang/rust/issues/122491, https://github.com/rust-lang/rust/issues/126464), but more importantly it is just needless work to build it locally.

I kept it enabled for `dist`, because it is distributed as a `rustup` component (for some reason it's not included in `extended`? not sure).

Fixes: https://github.com/rust-lang/rust/issues/126464
2024-06-16 01:07:45 +00:00
klensy 52242f2c72 bump few deps 2024-06-15 18:53:45 +03:00
bors 92af831290 Auto merge of #126518 - matthiaskrgr:rollup-wb70rzq, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - #125829 (rustc_span: Add conveniences for working with span formats)
 - #126361 (Unify intrinsics body handling in StableMIR)
 - #126417 (Add `f16` and `f128` inline ASM support for `x86` and `x86-64`)
 - #126424 ( Also sort `crt-static` in `--print target-features` output)
 - #126428 (Polish `std::path::absolute` documentation.)
 - #126429 (Add `f16` and `f128` const eval for binary and unary operationations)
 - #126448 (End support for Python 3.8 in tidy)
 - #126488 (Use `std::path::absolute` in bootstrap)
 - #126511 (.mailmap: Associate both my work and my private email with me)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-15 14:51:12 +00:00
Matthias Krüger b5dd3d4ada Rollup merge of #126472 - onur-ozkan:improve-libcxx-build, r=Kobzol
build `libcxx-version` only when it doesn't exist

In https://github.com/rust-lang/rust/issues/126423, it seems like c++ parsing takes quite amount of time on bootstrap startups. This PR makes libcxx-version to be compiled only when it doesn't exist.

A simple demonstration on the overhead of buiding `libcxx-version`:

```sh
$ rm -rf build/host/libcxx-version

$ x build
Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.07s

 ----- LIBCXX VERSION CHECK TOOK: 509ms
Building tool rustdoc (stage1 -> stage2, x86_64-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.25s
Build completed successfully in 0:00:02

$ x build
Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.07s

 ----- LIBCXX VERSION CHECK TOOK: 2ms
Creating a sysroot for stage2 compiler (use `rustup toolchain link 'name' build/host/stage2`)
Building tool rustdoc (stage1 -> stage2, x86_64-unknown-linux-gnu)
    Finished `release` profile [optimized] target(s) in 0.14s
Build completed successfully in 0:00:01
```
2024-06-15 10:56:43 +02:00
Chris Denton 78d4802448 Use std::path::absolute in bootstrap 2024-06-14 19:50:11 +00:00
Jakub Beránek b4df72aae2 Do not enable llvm-bitcode-linker in most default bootstrap profiles 2024-06-14 15:49:09 +02:00
onur-ozkan e2e1afaf6d update libstdc++ compatibility error log
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-14 13:30:53 +03:00
onur-ozkan ad787c1034 build libcxx-version only when it doesn't exist
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-14 13:30:16 +03:00
Matthias Krüger b7dcdf684c Rollup merge of #126399 - onur-ozkan:126156, r=albertlarsan68
extend the check for LLVM build

We don't build LLVM when using the precompiled version from the CI builder.

Closes #126156
2024-06-14 12:23:38 +02:00
Matthias Krüger 24c94f0e4f Rollup merge of #126238 - Nilstrieb:run,miri,run, r=RalfJung
Fix Miri sysroot for `x run`

Miri no longer (after https://github.com/rust-lang/miri/pull/3411) respects `MIRI_SYSROOT` and wants to be treated like a REAL rustc, with `--sysroot`. \*pats Miri\* sure Miri, just for you :3.

fixes #126233

r? RalfJung (or whoever else feels like it)
2024-06-13 22:55:45 +02:00
Nilstrieb a1667a98e8 Fix Miri sysroot for x run
Miri no longer respects `MIRI_SYSROOT` and wants to be treated like a
REAL rustc, with `--sysroot`. *pats Miri* sure Miri, just for you :3.
2024-06-13 20:10:23 +02:00
onur-ozkan c8d2b9397a fix bootstrap CI failure
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-13 18:43:46 +03:00
onur-ozkan 58e3ac0877 extend the check for LLVM build
We don't build LLVM when using the precompiled version from the CI builder.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-06-13 15:06:34 +03:00
bors 8337ba9189 Auto merge of #126345 - compiler-errors:rollup-lue8u92, r=compiler-errors
Rollup of 8 pull requests

Successful merges:

 - #125869 (Add `target_env = "p1"` to the `wasm32-wasip1` target)
 - #126019 (Add TODO comment to unsafe env modification)
 - #126036 (Migrate `run-make/short-ice` to `rmake`)
 - #126276 (Detect pub structs never constructed even though they impl pub trait with assoc constants)
 - #126282 (Ensure self-contained linker is only enabled on dev/nightly )
 - #126317 (Avoid a bunch of booleans in favor of Result<(), ErrorGuaranteed> as that more robustly proves that an error has been emitted)
 - #126324 (Adjust LoongArch64 data layouts for LLVM update)
 - #126340 (Fix outdated predacates_of.rs comments)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-12 20:48:06 +00:00
Jakub Beránek 87d2e61428 Add x perf command for profiling the compiler using rustc-perf 2024-06-12 21:05:55 +02:00
Michael Goulet 49b28a4f6a Rollup merge of #126282 - lqd:contain-the-self-contained-linker, r=Mark-Simulacrum
Ensure self-contained linker is only enabled on dev/nightly

This is a version of #126278 for the master branch. It should be no-op _here_, compared to beta.

I'll r? `@Mark-Simulacrum` like the other one.
2024-06-12 14:26:26 -04:00
Jakub Beránek fd44aca2aa Copy rustc-fake binary when building the rustc-perf tool 2024-06-12 20:25:16 +02:00
Jakub Beránek 9e0b76201b Add RustcPerf bootstrap tool
So that it is easier to use `rustc-perf` with `rustc` directly.
2024-06-12 20:25:16 +02:00
Jakub Beránek 9ec178df0b Add cargo_args to ToolBuild 2024-06-12 20:21:44 +02:00