5494 Commits

Author SHA1 Message Date
Jakub Beránek
63d6ce03b3
Checkout all submodules when building source tarballs 2024-03-31 12:56:05 +02:00
Jakub Beránek
6f4f39a8d5
Move submodule lookup to Builder 2024-03-31 12:56:05 +02:00
Matthias Krüger
b48411bcd4
Rollup merge of #123186 - onur-ozkan:llvm-library-bug, r=Kobzol
copy any file from stage0/lib to stage0-sysroot/lib

With the LLVM 18 upgrade, the name of the LLVM library has been changed to something like `libLLVM.so.18.1-rust-1.78.0-beta`, which `is_dylib` function cannot determine as it only looks whether files are ending with ".so" or not.
This change resolves this problem by no longer doing that ".so" check, as we need all files from the stage0/lib as they are all dependency of rustc anyway.

Fixes #122913
2024-03-29 15:17:10 +01:00
onur-ozkan
5fe364afdd copy any file from stage0/lib to stage0-sysroot/lib
With the LLVM 18 upgrade, the name of the LLVM library has been changed to something like
`libLLVM.so.18.1-rust-1.78.0-beta`, which `is_dylib` function cannot determine as it only
looks whether files are ending with ".so" or not.
This change resolves this problem by no longer doing that ".so" check, as we need all files
from the stage0/lib as they are all dependency of rustc anyway.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-29 10:07:44 +03:00
bors
9d70954948 Auto merge of #122205 - onur-ozkan:incorrect-sysroot-for-target, r=albertlarsan68
ensure std is prepared for cross-targets

Previously, doing `x test compiler/*` would result in build failures due to missing std. This PR fixes that.
2024-03-27 22:22:42 +00:00
Matthias Krüger
b8e8d658a7
Rollup merge of #123055 - onur-ozkan:miri-rustdoc, r=RalfJung
enable cargo miri test doctests

This was the cleanest solution that came to my mind so far.

cc `@RalfJung`

Resolves #123028
2024-03-26 21:23:49 +01:00
onur-ozkan
69af113f44 enable cargo miri test doctests
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-26 10:27:34 +03:00
Jubilee
01263c45d0
Rollup merge of #122892 - lovesegfault:versioned-vendor, r=onur-ozkan
fix(bootstrap/dist): use versioned dirs when vendoring

Currently, if you attempt to run ui tests in a vendored build, you will
see this failure

```
---- [ui] tests/ui/issues/issue-21763.rs stdout ----
diff of stderr:

8          = note: required because it appears within the type `(Rc<()>, Rc<()>)`
9          = note: required for `hashbrown::raw::RawTable<(Rc<()>, Rc<()>)>` to implement `Send`
10      note: required because it appears within the type `hashbrown::map::HashMap<Rc<()>, Rc<()>, RandomState>`
-         --> $HASHBROWN_SRC_LOCATION
+         --> /rust/deps/hashbrown/src/map.rs:190:12
12      note: required because it appears within the type `HashMap<Rc<()>, Rc<()>>`
13        --> $SRC_DIR/std/src/collections/hash/map.rs:LL:COL
14      note: required by a bound in `foo`
```

This happens because the code that attempts to remap
`HASHBROWN_SRC_LOCATION` expects it to be under `hashbrown-$version`,
which is the case in a normal cargo registry, but not when vendoring, where
by default crates may not have the version in their directory name.

This change passes `--versioned-dirs` to `cargo vendor` to enforce that
every crate includes the version in the subdir name, which fixes the ui
test and brings `--enable-vendor` builds closer to normal ones.
2024-03-25 14:35:35 -07:00
Zalathar
1bbab7148b Add more comments to the bootstrap code that handles tests/coverage 2024-03-25 15:31:33 +11:00
bors
c3b05c6e5b Auto merge of #122911 - Nilstrieb:live-love-patch, r=clubby789
Fix nix patching for LLVM 18

LLVM 18 now ships `libLLVM*.so.*`, so `.so` is not the sole extension anymore, which breaks the dylib detection. Oops! Adjust it to only search for `.so` somewhere.

fixes #122906
2024-03-23 02:41:00 +00:00
bors
c308726599 Auto merge of #119552 - krtab:dead_code_priv_mod_pub_field, r=cjgillot,saethlin
Replace visibility test with reachability test in dead code detection

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

Also included is a fix for an error now flagged by the lint
2024-03-23 00:37:05 +00:00
Arthur Carcano
7342cc46f8 Delete dead fields of deserialized cargo output
The dead_code lint was previously eroneously missing this dead code.
Since this lint bug has been fixed, the unused field need to be removed
or marked as `#[allow(dead_code)]`.

Given that this struct is deserialized without #[serde(deny_unknown_fields)]
it is ok to simply delete the never read fields.
2024-03-22 23:59:19 +01:00
Nilstrieb
60b97a2f3d Fix nix patching for LLVM 18
LLVM 18 now ships `libLLVM*.so.*`, so `.so` is not the sole extension
anymore, which breaks the dylib detection. Oops! Adjust it to only
search for `.so` somewhere.
2024-03-22 22:38:48 +01:00
Bernardo Meurer Costa
25d06013db fix(bootstrap/dist): use versioned dirs when vendoring
Currently, if you attempt to run ui tests in a vendored build, you will
see this failure

```
---- [ui] tests/ui/issues/issue-21763.rs stdout ----
diff of stderr:

8          = note: required because it appears within the type `(Rc<()>, Rc<()>)`
9          = note: required for `hashbrown::raw::RawTable<(Rc<()>, Rc<()>)>` to implement `Send`
10      note: required because it appears within the type `hashbrown::map::HashMap<Rc<()>, Rc<()>, RandomState>`
-         --> $HASHBROWN_SRC_LOCATION
+         --> /rust/deps/hashbrown/src/map.rs:190:12
12      note: required because it appears within the type `HashMap<Rc<()>, Rc<()>>`
13        --> $SRC_DIR/std/src/collections/hash/map.rs:LL:COL
14      note: required by a bound in `foo`
```

This happend because the code that attempts to remap
`HASHBROWN_SRC_LOCATION` expects it to be under `hashbrown-$version`,
which is the case in a normal cargo registry, but not when vendor, where
by default crates may not have the version in their directory name.

This change passes `--versioned-dirs` to `cargo vendor` to enforce that
every crate includes the version in the subdir name, which fixes the ui
test and brings `--enable-vendor` builds closer to normal ones.
2024-03-22 17:30:43 +00:00
Matthias Krüger
05ae329524
Rollup merge of #122831 - onur-ozkan:less-verbose-fail-logs, r=clubby789
make failure logs less verbose

Resolves #122706

Logs without verbose flag:

![image](https://github.com/rust-lang/rust/assets/39852038/f2fc2d35-0954-44b0-bedc-045afedaabe8)

Logs with verbose flag:

![image](https://github.com/rust-lang/rust/assets/39852038/b9308655-ad31-4527-a1be-5a62a78ac469)

I decided to exclude command from the log since it's already included in verbose mode.

cc ```@Nilstrieb```
2024-03-22 01:07:31 +01:00
onur-ozkan
796105ef63 make failure logs less verbose
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-21 19:55:41 +03:00
Alex Crichton
a400dac8ca Inherit RUSTC_BOOTSTRAP when testing wasm
This is implemented with the freshly-released Wasmtime 19 and should
prevent beta breakage from wasm tests that was observed and fixed
in #122640 again.
2024-03-20 14:42:30 -07:00
bors
a128516cf9 Auto merge of #122754 - Mark-Simulacrum:bootstrap-bump, r=albertlarsan68
Bump to 1.78 bootstrap compiler

https://forge.rust-lang.org/release/process.html#master-bootstrap-update-t-2-day-tuesday
2024-03-20 13:43:41 +00:00
Mark Rousskov
9a22a0fdab Fix bootstrap bump fallout 2024-03-20 08:49:13 -04:00
Matthias Krüger
4f3050b85a
Rollup merge of #121543 - onur-ozkan:clippy-args, r=oli-obk
various clippy fixes

We need to keep the order of the given clippy lint rules before passing them.
Since clap doesn't offer any useful interface for this purpose out of the box,
we have to handle it manually.

Additionally, this PR makes `-D` rules work as expected. Previously, lint rules were limited to `-W`. By enabling `-D`, clippy began to complain numerous lines in the tree, all of which have been resolved in this PR as well.

Fixes #121481
cc `@matthiaskrgr`
2024-03-20 05:51:22 +01:00
onur-ozkan
81d7d7aabd resolve clippy errors
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-20 00:12:00 +03:00
Matthias Krüger
1ac0239bd2
Rollup merge of #122649 - cuviper:min-llvm-17, r=nikic
Update the minimum external LLVM to 17

With this change, we'll have stable support for LLVM 17 and 18.
For reference, the previous increase to LLVM 16 was #117947.
2024-03-18 16:27:09 +01:00
bors
3cdcdaf31b Auto merge of #122646 - saethlin:library-frame-pointers, r=onur-ozkan
Enable frame pointers for the standard library

There's been a few past experiments for enabling frame pointers for all our artifacts. I don't think that frame pointers in the distributed compiler are nearly as useful as frame pointers in the standard library. Our users are much more likely to be profiling apps written in Rust than they are profiling the Rust compiler.

So yeah it would be cool to have frame pointers in the compiler, but much more of the value is having them on the precompiled standard library. That's what this PR does.
2024-03-18 12:43:41 +00:00
Kjetil Kjeka
7bdd63dcdd LLVM bitcode linker: use --cfg=parallell_compiler to avoid trashing the cache of rustdoc 2024-03-17 23:20:40 +01:00
onur-ozkan
a61bf3093e use --cap-lints only when deny and forbid rules are not specified
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-18 00:13:52 +03:00
onur-ozkan
1945e8f1f6 pass ignored lints after manual ones
Previously, when passing lint rules manually using `x clippy ..`, ignored lints would
override manual ones. This change corrects the order by passing ignored lints after the
manual ones.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-18 00:13:48 +03:00
onur-ozkan
b43dc065dd add unit test: order_of_clippy_rules
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-18 00:13:29 +03:00
onur-ozkan
ead18f43f8 reorder clippy rules to their original order before passing them
We need to keep the order of the given clippy lint rules before passing them.
Since clap doesn't offer any useful interface for this purpose out of the box,
we have to handle it manually.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-18 00:10:23 +03:00
Josh Stone
29430554f6 Update the minimum external LLVM to 17 2024-03-17 10:11:04 -07:00
Ben Kimock
aeb3447f61 Enable frame pointers for the library 2024-03-17 12:01:18 -04:00
Matthias Krüger
2448162729
Rollup merge of #121787 - onur-ozkan:improve-change-tracker, r=albertlarsan68
run change tracker even when config parse fails

Please note that we are currently validating the build configuration on two entry points (e.g., profile validation is handled on the python side), and change tracker system is handled on the rust side. Once #94829 is completed (scheduled for 2024), we will be able to handle this more effectively.

Fixes #121756
2024-03-17 14:04:14 +01:00
Matthias Krüger
ea0745604f
Rollup merge of #122295 - Nadrieril:mir-opt-run-current-target, r=Mark-Simulacrum
mir-opt: always run tests for the current target

Currently, `./x.py test tests/mir-opt` runs only the tests for the current target, and `./x.py test tests/mir-opt --bless` runs tests for a representative set of targets. That representative set does not include the current target however, which means `--bless` can succeed when tests fail without it. This PR ensures we run the current target always.

Fixes https://github.com/rust-lang/rust/issues/122292
cc ``@RalfJung``
2024-03-17 08:23:26 +01:00
Chris Denton
d3ad841781
Rollup merge of #122590 - Nilstrieb:bootstrap-do-you-know-what-the-word-copy-means, r=Mark-Simulacrum
bootstrap: Don't name things copy that are not copies

The bootstrap copy methods don't actually copy, they just hard link. Simply lying about it being "copying" can be very confusing! (ask me how I know!).

I'm not sure whether the name I chose is the ideal name, but it's definitely better than before.
2024-03-16 18:27:35 +00:00
Chris Denton
491acfa08d
Rollup merge of #122372 - onur-ozkan:change-id-improvement, r=Mark-Simulacrum
prevent notifying the same changes more than once

Prevents re-reporting of previously notified changes by using the .last-warned-change-id value for change detection.

Resolves #122344
2024-03-16 18:27:32 +00:00
Chris Denton
9870116309
Rollup merge of #122323 - heiher:loongarch64-musl-root, r=Mark-Simulacrum
configure.py: add flag for loongarch64 musl-root
2024-03-16 18:27:32 +00:00
Nilstrieb
52f84fa7c2 Remove double remove_file 2024-03-16 12:57:36 +01:00
Nilstrieb
0ec5d374fe bootstrap: Don't name things copy that are not copies
The bootstrap copy methods don't actually copy, they just hard link.
Simply lying about it being "copying" can be very confusing! (ask me how
I know!).
2024-03-16 12:54:10 +01:00
onur-ozkan
5aece7fad0 ensure std for cross-targets
Previously, doing `x test compiler/*` would fail the build due to missing std.
This change ensures that it is prepared.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-14 00:50:32 +03:00
Jubilee
cf3d178e2d
Rollup merge of #122378 - clubby789:rustbook-rebuild, r=onur-ozkan
Properly rebuild rustbooks

Fixes #122367

If the book was out of date but the tool was up to date, this would evaluate to `!(false || true)` == `!true` == `false` and not rebuild.
2024-03-12 09:04:03 -07:00
Jubilee
7b5c63b69a
Rollup merge of #122354 - clubby789:bootstrap-eager-verbose, r=albertlarsan68
bootstrap: Don't eagerly format verbose messages

We `format!` a lot of messages which are only used when we are at some level of verbosity - do this lazily instead
2024-03-12 09:04:01 -07:00
Jubilee
45cc461bfd
Rollup merge of #122081 - onur-ozkan:validate-path-remaps, r=clubby789
validate `builder::PATH_REMAP`

self-explanatory

r? clubby789
2024-03-12 09:04:00 -07:00
Jubilee
7a45c72f24
Rollup merge of #121754 - TimNN:split-target, r=Mark-Simulacrum,onur-ozkan
[bootstrap] Move the `split-debuginfo` setting to the per-target section

As described in #112406, bootstrap currently applies the global `split-debuginfo` setting to all artifacts, irrespective of their target triple.

This doesn't cause problems when the "build" triple defaults `split-debuginfo` to `off` (as is the case on Linux, for example).

However, when the "build" triple has `split-debuginfo` enabled and additional target triples are configured, then artifacts for the additional triples will also be built with `split-debuginfo` (despite not necessarily supporting `split-debuginfo`).

#112406 mentions `riscv32imc-unknown-none-elf` as one target where this happens, and I've run into this with Wasm as well.

This PR does **not** implement `@ehuss's` suggestion that "bootstrap not try to guess how to configure split-debuginfo, and instead use cargo profiles to set it", because that seemed like a lot more significant change.

---

After this PR, anyone explicitly setting `rust.split-debuginfo` should update their configuration to specify the setting in the `target.<triple>` section, though `rust.split-debuginfo` will still be honored for the "build" triple for now.

This PR changes the behavior when `rust.split-debuginfo` was **not** explicitly set **and** bootstrap is configured to cross-compile to a triple that has a different `split-debuginfo` than the "build" triple.

---

If there's a reasonable way to add additional tests for this, please let me know (I didn't find any tests checking cargo arguments in [`builder/tests.rs`](https://github.com/rust-lang/rust/blob/master/src/bootstrap/src/core/builder/tests.rs)).
2024-03-12 09:03:59 -07:00
clubby789
e8cef43dd8 Properly rebuild rustbooks 2024-03-12 12:10:24 +00:00
onur-ozkan
494ce1e224 prevent notifying the same changes more than once
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2024-03-12 12:19:11 +03:00
bors
dc2ffa4054 Auto merge of #122036 - alexcrichton:test-wasm-with-wasi, r=oli-obk
Test wasm32-wasip1 in CI, not wasm32-unknown-unknown

This commit changes CI to no longer test the `wasm32-unknown-unknown` target and instead test the `wasm32-wasip1` target. There was some discussion of this in a [Zulip thread], and the motivations for this PR are:

* Runtime failures on `wasm32-unknown-unknown` print nothing, meaning all you get is "something failed". In contrast `wasm32-wasip1` can print to stdout/stderr.

* The unknown-unknown target is missing lots of pieces of libstd, and while `wasm32-wasip1` is also missing some pieces (e.g. threads) it's missing fewer pieces. This means that many more tests can be run.

Overall my hope is to improve the debuggability of wasm failures on CI and ideally be a bit less of a maintenance burden.

This commit specifically removes the testing of `wasm32-unknown-unknown` and replaces it with testing of `wasm32-wasip1`. Along the way there were a number of other archiectural changes made as well, including:

* A new `target.*.runtool` option can now be specified in `config.toml` which is passed as `--runtool` to `compiletest`. This is used to reimplement execution of WebAssembly in a less-wasm-specific fashion.

* The default value for `runtool` is an ambiently located WebAssembly runtime found on the system, if any. I've implemented logic for Wasmtime.

* Existing testing support for `wasm32-unknown-unknown` and Emscripten has been removed. I'm not aware of Emscripten testing being run any time recently and otherwise `wasm32-wasip1` is in theory the focus now.

* I've added a new `//@ needs-threads` directive for `compiletest` and classified a bunch of wasm-ignored tests as needing threads. In theory these tests can run on `wasm32-wasi-preview1-threads`, for example.

* I've tried to audit all existing tests that are either `ignore-emscripten` or `ignore-wasm*`. Many now run on `wasm32-wasip1` due to being able to emit error messages, for example. Many are updated with comments as to why they can't run as well.

* The `compiletest` output matching for `wasm32-wasip1` automatically uses "match a subset" mode implemented in `compiletest`. This is because WebAssembly runtimes often add extra information on failure, such as the `unreachable` instruction in `panic!`, which isn't able to be matched against the golden output from native platforms.

* I've ported most existing `run-make` tests that use custom Node.js wrapper scripts to the new run-make-based-in-Rust infrastructure. To do this I added `wasmparser` as a dependency of `run-make-support` for the various wasm tests to use that parse wasm files. The one test that executed WebAssembly now uses `wasmtime`-the-CLI to execute the test instead. I have not ported over an exception-handling test as Wasmtime doesn't implement this yet.

* I've updated the `test` crate to print out timing information for WASI targets as it can do that (gets a previously ignored test now passing).

* The `test-various` image now builds a WASI sysroot for the WASI target and additionally downloads a fixed release of Wasmtime, currently the latest one at 18.0.2, and uses that for testing.

[Zulip thread]: https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Have.20wasm.20tests.20ever.20caused.20problems.20on.20CI.3F/near/424317944
2024-03-12 00:03:54 +00:00
clubby789
7f1d08e575 bootstrap: Don't eagerly format verbose messages 2024-03-11 23:49:15 +00:00
Tim Neumann
0e354c98a8 [bootstrap] Move the split-debuginfo setting to the per-target section 2024-03-11 20:17:00 +01:00
Alex Crichton
341215c51d Configure a default runner for WASI targets
If one is not explicitly configured look in the system environment to
try and find one. For now just probing for `wasmtime` is implemented.
2024-03-11 09:36:35 -07:00
Alex Crichton
7d9690a3bc Remove old support for emscripten/wasm32-u-u
This commit removes the `wasm32-shim.js` file, for example, and deletes
old support for Emscripten which hasn't been exercised in some time.
2024-03-11 09:36:35 -07:00
Jubilee
7fa6fa4a1f
Rollup merge of #122330 - tshepang:patch-1, r=clubby789
bootstrap readme: fix, improve, update
2024-03-11 09:29:39 -07:00