Commit Graph

306 Commits

Author SHA1 Message Date
Mark Rousskov
a06baa56b9 Format the world 2019-12-22 17:42:47 -05:00
Adam Perry
a08c56295a Implement ./x.py fmt [--check]. 2019-12-21 20:23:39 -05:00
Mark Rousskov
28af652793 Drop petgraph dependency from bootstrap
It was essentially unused, likely leftover from a previous refactoring
iteration.
2019-12-21 10:54:15 -05:00
bors
3964a55ba5 Auto merge of #67077 - Aaron1011:build-llvm-in-binary, r=alexcrichton
rustc: Link LLVM directly into rustc again (take two)

This is a continuation of PR https://github.com/rust-lang/rust/pull/65703
2019-12-13 10:07:38 +00:00
bors
3eeb8d4f2f Auto merge of #67172 - jethrogb:jb/bootstrap-linker, r=alexcrichton
Bootstrap: change logic for choosing linker and rpath

This is a follow-up from #66957 and #67023. Apparently there was one more location with a hard-coded list of targets to influence linking.

I've filed #67171 to track this madness.

r? @alexcrichton
2019-12-12 19:52:27 +00:00
Alex Crichton
7f23e6e8d7
rustc: Link LLVM directly into rustc again
This commit builds on #65501 continue to simplify the build system and
compiler now that we no longer have multiple LLVM backends to ship by
default. Here this switches the compiler back to what it once was long
long ago, which is linking LLVM directly to the compiler rather than
dynamically loading it at runtime. The `codegen-backends` directory of
the sysroot no longer exists and all relevant support in the build
system is removed. Note that `rustc` still supports a dynamically loaded
codegen backend as it did previously, it just no longer supports
dynamically loaded codegen backends in its own sysroot.

Additionally as part of this the `librustc_codegen_llvm` crate now once
again explicitly depends on all of its crates instead of implicitly
loading them through the sysroot. This involved filling out its
`Cargo.toml` and deleting all the now-unnecessary `extern crate`
annotations in the header of the crate. (this in turn required adding a
number of imports for names of macros too).

The end results of this change are:

* Rustbuild's build process for the compiler as all the "oh don't forget
  the codegen backend" checks can be easily removed.
* Building `rustc_codegen_llvm` is much simpler since it's simply
  another compiler crate.
* Managing the dependencies of `rustc_codegen_llvm` is much simpler since
  it's "just another `Cargo.toml` to edit"
* The build process should be a smidge faster because there's more
  parallelism in the main rustc build step rather than splitting
  `librustc_codegen_llvm` out to its own step.
* The compiler is expected to be slightly faster by default because the
  codegen backend does not need to be dynamically loaded.
* Disabling LLVM as part of rustbuild is still supported, supporting
  multiple codegen backends is still supported, and dynamic loading of a
  codegen backend is still supported.
2019-12-11 09:50:11 -05:00
Mark Rousskov
a68d5314fb Add toolstate checking into bootstrap
This is not yet actually used by CI, but implements the logic for
checking that tools are properly building on beta/stable and during beta
cutoff week.

This attempts to mirror the checking functionality in
src/ci/docker/x86_64-gnu-tools/checktools.sh, and called scripts. It
does not attempt to run the relevant steps (that functionality was
originally desired to be moved into bootstrap as well, but doing so
proved more difficult than expected).

This is intended as a way to centralize and make clearer the logic
involved in toolstate checking. In particular, the previous logic was
spread across numerous python and shell scripts in such a way that made
interpretation quite difficult.
2019-12-10 09:26:34 -05:00
Jethro Beekman
786b9d0d62 Bootstrap: change logic for choosing linker and rpath 2019-12-09 09:46:55 +01:00
Yuki Okushi
1cbd34faf2
Rollup merge of #66317 - cuviper:bindir_relative, r=Mark-Simulacrum
Use a relative bindir for rustdoc to find rustc

In bootstrap, we set `RUSTC_INSTALL_BINDIR` to `config.bindir`, so
rustdoc can find rustc relative to the toolchain sysroot. However, if a
distro script like Fedora's `%configure` sets an absolute path, then
rustdoc's `sysroot.join(bin_path)` ignores that sysroot altogether.

That would be OK once the toolchain is actually installed, but it breaks
the in-tree doc tests during the build, since `/usr/bin/rustc` is still
the old version. So now we try to make `RUSTC_INSTALL_BINDIR` relative
to the sysroot prefix in the first place.

r? @Mark-Simulacrum
2019-11-13 22:09:23 +09:00
Mark Rousskov
8783766215 Hopefully fix rustdoc build
It's super unclear why this broke when we switched to beta but not
previously -- but at least it's hopefully fixed now.
2019-11-12 16:36:57 -05:00
Josh Stone
bfa5e5f788 Fallback to the unmodified path in bindir_relative 2019-11-12 09:42:46 -08:00
Josh Stone
1aee3e4d08 Use a relative bindir for rustdoc to find rustc
In bootstrap, we set `RUSTC_INSTALL_BINDIR` to `config.bindir`, so
rustdoc can find rustc relative to the toolchain sysroot. However, if a
distro script like Fedora's `%configure` sets an absolute path, then
rustdoc's `sysroot.join(bin_path)` ignores that sysroot altogether.

That would be OK once the toolchain is actually installed, but it breaks
the in-tree doc tests during the build, since `/usr/bin/rustc` is still
the old version. So now we try to make `RUSTC_INSTALL_BINDIR` relative
to the sysroot prefix in the first place.
2019-11-11 14:22:23 -08:00
bors
8e0007f829 Auto merge of #65474 - Mark-Simulacrum:rustc-dev-split, r=pietroalbini
Split the rustc target libraries into separate rustc-dev component

This is re-applies a squashed version of #64823 as well as including #65337 to fix bugs noted after merging the first PR.

The second PR is confirmed as fixing windows-gnu, and presumably also fixes other platforms, such as musl (i.e. #65335 should be fixed); `RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup toolchain install nightly-2019-10-16` can be installed to confirm that this is indeed the case.
2019-10-24 07:27:00 +00:00
Thomas Lively
2bf59bea48 Upgrade Emscripten targets to use upstream LLVM backend
- Compatible with Emscripten 1.38.46-upstream or later upstream.
 - Refactors the Emscripten target spec to share code with other wasm
   targets.
 - Replaces the old incorrect wasm32 C call ABI with the correct one,
   preserving the old one as wasm32_bindgen_compat for wasm-bindgen
   compatibility.
 - Updates the varargs ABI used by Emscripten and deletes the old one.
 - Removes the obsolete wasm32-experimental-emscripten target.
 - Uses EMCC_CFLAGS on CI to avoid the timeout problems with #63649.
2019-10-16 17:06:48 -07:00
Josh Stone
3a05616cb6 minimize the rust-std component
This splits out a rustc-dev component with the compiler crates, and
keeps the status quo of default installed files on nightly. The default
changing to not install compiler libraries by default is left for a
future pull request.

However, on stable and beta, this does remove the compiler libraries
from the set of libraries installed by default, as they are never needed
there (per our stability story, they "cannot" be used).
2019-10-15 18:38:18 -04:00
Mark Rousskov
fabba8f764 Revert "Auto merge of #64823 - cuviper:min-std, r=Mark-Simulacrum"
This reverts commit 000d90b11f, reversing
changes made to 898f36c83c.
2019-10-12 12:00:34 -04:00
bors
000d90b11f Auto merge of #64823 - cuviper:min-std, r=Mark-Simulacrum
minimize the rust-std component

This changes the `rust-std` dist component to only include the artifacts of compiling the `libstd` step, as listed in `.libstd.stamp`. This does include `test` and `proc-macro` as well. The remaining _unstable_ libraries that are built as part of `rustc` are packaged into a new `rustc-dev` component, intended for use in the development of closely related tools (clippy, miri, rls).

Here are the component sizes from the [try build](https://dev-static.rust-lang.org/dist/2019-10-07/index.html):

| Name | Size
| --- | ---
| rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz | 23.94 MiB
| rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz | 17.4 MiB
| rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.gz | 182.03 MiB
| rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.xz | 157.91 MiB

Fixes #61978
Fixes #62486
2019-10-10 23:43:55 +00:00
bors
8c7b921feb Auto merge of #65129 - andjo403:cargo_args, r=alexcrichton
make it possible to add args to cargo in x.py

eg. make it easier to test -Ztimings for rustc

cc https://github.com/rust-lang/rust/issues/65088
2019-10-10 08:10:49 +00:00
Andreas Jonson
6ae36a37ac make it possible to add args to cargo in x.py
eg. make it easier to test -Ztimings for rustc
2019-10-09 17:45:19 +02:00
Josh Stone
9175f279b5 add dist::RustcDev for unstable compiler libraries 2019-10-07 13:48:16 -07:00
Josh Stone
faee5fd388 [WIP] minimize the rust-std component 2019-10-07 13:48:16 -07:00
Tyler Mandry
d16b7f705b Revert "Auto merge of #63649 - tlively:emscripten-upstream-upgrade, r=alexcrichton"
This reverts commit 7870050796, reversing
changes made to 2e7244807a.
2019-10-05 21:38:45 -07:00
Thomas Lively
5b56c660c9 Fix ABI, run and fix more tests, re-enable CI for PRs 2019-10-04 00:47:21 -07:00
Alex Crichton
008ed188ce rustbuild: Pass -Zsave-analysis during tests
This is needed to ensure that the crates during a normal build are
shared with the crates during testing, otherwise they'll end up hasing
differently and we'll recompile crates like `core` during tests.
2019-09-23 09:34:44 -07:00
Alex Crichton
ff6a7c77ae No need to remove target-specific RUSTFLAGS
Turns out Cargo favors RUSTFLAGS!
2019-09-23 09:34:44 -07:00
Alex Crichton
9b34ef643f Stylistic changes 2019-09-23 09:34:44 -07:00
Alex Crichton
385470b8bb Move handling of -Cprefer-dynamic into builder.rs
This logic is *super* old and can be tweaked and moved into `builder.rs`
2019-09-23 09:34:44 -07:00
Alex Crichton
b3f95f460f Move --cfg bootstrap out of rustc.rs
Instead let's do this via `RUSTFLAGS` in `builder.rs`. Currently
requires a submodule update of `stdarch` to fix a problem with previous
compilers.
2019-09-23 09:34:44 -07:00
Alex Crichton
3d13f46304 Move handling of {MUSL,WASI}_ROOT to compile.rs
No longer any need for them to live in `rustc.rs`!
2019-09-23 09:34:44 -07:00
Alex Crichton
0b6766d8d7 Allow adding RUSTFLAGS after Builder::cargo
This commit changes the return type of `Builder::cargo` to return a
builder that allows dynamically adding more `RUSTFLAGS` values
after-the-fact. While not used yet, this will later be used to delete
more of `rustc.rs`
2019-09-23 09:34:44 -07:00
Alex Crichton
5cc6eb4082 Move debuginfo level handling to builder.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
2d6f3fede0 Move handling of codegen-units to builder.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
22699d3139 Move handling of internal lints to build.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
f8b19f2b78 Move handling of some warnings to builder.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
3a648b6580 Move handling of -Dwarnings to builder.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
1bec962f46 bootstrap: Remove need for RUSTC_RPATH variable 2019-09-23 09:34:44 -07:00
Alex Crichton
b82d86ed60 bootstrap: Handle target-specific cargo env vars
This commit ensure that we handle target-specific env vars for RUSTFLAGS
through Cargo as well.
2019-09-23 09:34:44 -07:00
Alex Crichton
ac29809940 bootstrap: Move RUSTC_CRT_STATIC to builder.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
04cb0653a8 bootstrap: Remove need for RUSTC_SAVE_ANALYSIS 2019-09-23 09:34:44 -07:00
Alex Crichton
d63e2def82 bootstrap: Remove usage of RUSTC_TARGET_LINKER
Cargo has a native enviroment variable for this.
2019-09-23 09:34:44 -07:00
Alex Crichton
c36849a542 bootstrap: Move -Zdual-proc-macros to builder.rs 2019-09-23 09:34:44 -07:00
Alex Crichton
812117af53 bootstrap: Move -Zexternal-macro-backtrace to builder
No need for this to be in `rustc.rs`
2019-09-23 09:34:44 -07:00
Alex Crichton
4f35166f80 bootstrap: Move RUSTC_BREAK_ON_ICE out of shim
This is always set, so let's just always set it elsewhere to reduce the
need for our `rustc.rs` shim.
2019-09-23 09:34:44 -07:00
Alex Crichton
557e69b7ca bootstrap: Delete handling of RUSTC_METADATA_SUFFIX
This is already handled by `__CARGO_DEFAULT_LIB_METADATA` so there's no
need to doubly do it.
2019-09-23 09:34:44 -07:00
Alex Crichton
f6c87aba32 bootstrap: Add a helper for managing RUSTFLAGS
Most of `bootstrap/bin/rustc.rs` doesn't need to exist with the advent
of `RUSTFLAGS` (yes this is super old) so this starts by refactoring a
bit to make it easier locally in the `Builder::cargo` method to append
to `RUSTFLAGS` that gets down to rustc.
2019-09-23 09:34:44 -07:00
Mark Rousskov
2fc32b9e72 Locate rustc binary similarly to codegen backend loading
This ensures that the failure cases for finding the codegen backend and
for finding the rustc binary are essentially the same, and since we
almost always will load the codegen backend, this is essentially meaning
that the rustc change is not a regression.
2019-09-10 16:57:14 -04:00
Alex Crichton
b47c9690d2 bootstrap: Merge the libtest build step with libstd
Since its inception rustbuild has always worked in three stages: one for
libstd, one for libtest, and one for rustc. These three stages were
architected around crates.io dependencies, where rustc wants to depend
on crates.io crates but said crates don't explicitly depend on libstd,
requiring a sysroot assembly step in the middle. This same logic was
applied for libtest where libtest wants to depend on crates.io crates
(`getopts`) but `getopts` didn't say that it depended on std, so it
needed `std` built ahead of time.

Lots of time has passed since the inception of rustbuild, however,
and we've since gotten to the point where even `std` itself is depending
on crates.io crates (albeit with some wonky configuration). This
commit applies the same logic to the two dependencies that the `test`
crate pulls in from crates.io, `getopts` and `unicode-width`. Over the
many years since rustbuild's inception `unicode-width` was the only
dependency picked up by the `test` crate, so the extra configuration
necessary to get crates building in this crate graph is unlikely to be
too much of a burden on developers.

After this patch it means that there are now only two build phasese of
rustbuild, one for libstd and one for rustc. The libtest/libproc_macro
build phase is all lumped into one now with `std`.

This was originally motivated by rust-lang/cargo#7216 where Cargo was
having to deal with synthesizing dependency edges but this commit makes
them explicit in this repository.
2019-08-23 16:46:11 -07:00
Mateusz Mikuła
5cf43bdd54 Run Clippy without json-rendered flag 2019-08-21 12:14:00 +02:00
bors
bea0372a1a Auto merge of #63752 - Centril:rollup-nlxwety, r=Centril
Rollup of 4 pull requests

Successful merges:

 - #62497 (Fix double resolving custom libdir)
 - #63209 (Stabilize `async_await` in Rust 1.39.0)
 - #63746 (Cherry-pick src/test changes with Centril's changes)
 - #63750 (rustc_metadata: replace LazySeq<T> with Lazy<[T]>.)

Failed merges:

r? @ghost
2019-08-20 18:33:16 +00:00
Mazdak Farrokhzad
4593f40b29
Rollup merge of #62497 - o01eg:fix-62496, r=alexcrichton
Fix double resolving custom libdir

Fixes #62496

Related issue is https://bugs.gentoo.org/672816
2019-08-20 19:42:16 +02:00