Skip to content

Commit 0cf9c52

Browse files
committed
Auto merge of #41954 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 15 pull requests - Successful merges: #41820, #41843, #41847, #41860, #41896, #41912, #41916, #41918, #41919, #41921, #41923, #41934, #41940, #41942, #41943 - Failed merges: #41914
2 parents e19ccb7 + 32d0f0b commit 0cf9c52

File tree

80 files changed

+574
-354
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+574
-354
lines changed

.gitmodules

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
path = src/jemalloc
1414
url = https://github.com/rust-lang/jemalloc.git
1515
[submodule "src/rust-installer"]
16-
path = src/rust-installer
16+
path = src/tools/rust-installer
1717
url = https://github.com/rust-lang/rust-installer.git
1818
[submodule "src/liblibc"]
1919
path = src/liblibc

src/Cargo.lock

+162-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ members = [
1313
"tools/build-manifest",
1414
"tools/remote-test-client",
1515
"tools/remote-test-server",
16+
"tools/rust-installer",
1617
]
1718

1819
# These projects have their own Cargo.lock

src/bootstrap/bin/rustc.rs

+13
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ fn main() {
194194
// do that we pass a weird flag to the compiler to get it to do
195195
// so. Note that this is definitely a hack, and we should likely
196196
// flesh out rpath support more fully in the future.
197+
//
198+
// FIXME: remove condition after next stage0
197199
if stage != "0" {
198200
cmd.arg("-Z").arg("osx-rpath-install-name");
199201
}
@@ -218,6 +220,17 @@ fn main() {
218220
cmd.arg("-Z").arg("unstable-options");
219221
cmd.arg("-C").arg("target-feature=+crt-static");
220222
}
223+
224+
// Force all crates compiled by this compiler to (a) be unstable and (b)
225+
// allow the `rustc_private` feature to link to other unstable crates
226+
// also in the sysroot.
227+
//
228+
// FIXME: remove condition after next stage0
229+
if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() {
230+
if stage != "0" {
231+
cmd.arg("-Z").arg("force-unstable-if-unmarked");
232+
}
233+
}
221234
}
222235

223236
if verbose > 1 {

src/bootstrap/config.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ impl Config {
264264
let table = match p.parse() {
265265
Some(table) => table,
266266
None => {
267-
println!("failed to parse TOML configuration:");
267+
println!("failed to parse TOML configuration '{}':", file.to_str().unwrap());
268268
for err in p.errors.iter() {
269269
let (loline, locol) = p.to_linecol(err.lo);
270270
let (hiline, hicol) = p.to_linecol(err.hi);

src/bootstrap/config.toml.example

+3
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@
175175
[rust]
176176

177177
# Whether or not to optimize the compiler and standard library
178+
# Note: the slowness of the non optimized compiler compiling itself usually
179+
# outweighs the time gains in not doing optimizations, therefore a
180+
# full bootstrap takes much more time with optimize set to false.
178181
#optimize = true
179182

180183
# Number of codegen units to use for each compiler invocation. A value of 0

src/bootstrap/dist.rs

+69-68
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ use std::process::{Command, Stdio};
2626

2727
use build_helper::output;
2828

29-
#[cfg(not(target_os = "solaris"))]
30-
const SH_CMD: &'static str = "sh";
31-
// On Solaris, sh is the historical bourne shell, not a POSIX shell, or bash.
32-
#[cfg(target_os = "solaris")]
33-
const SH_CMD: &'static str = "bash";
34-
3529
use {Build, Compiler, Mode};
3630
use channel;
3731
use util::{cp_r, libdir, is_dylib, cp_filtered, copy, exe};
@@ -55,6 +49,10 @@ pub fn tmpdir(build: &Build) -> PathBuf {
5549
build.out.join("tmp/dist")
5650
}
5751

52+
fn rust_installer(build: &Build) -> Command {
53+
build.tool_cmd(&Compiler::new(0, &build.config.build), "rust-installer")
54+
}
55+
5856
/// Builds the `rust-docs` installer component.
5957
///
6058
/// Slurps up documentation from the `stage`'s `host`.
@@ -74,14 +72,14 @@ pub fn docs(build: &Build, stage: u32, host: &str) {
7472
let src = build.out.join(host).join("doc");
7573
cp_r(&src, &dst);
7674

77-
let mut cmd = Command::new(SH_CMD);
78-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
75+
let mut cmd = rust_installer(build);
76+
cmd.arg("generate")
7977
.arg("--product-name=Rust-Documentation")
8078
.arg("--rel-manifest-dir=rustlib")
8179
.arg("--success-message=Rust-documentation-is-installed.")
82-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
83-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
84-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
80+
.arg("--image-dir").arg(&image)
81+
.arg("--work-dir").arg(&tmpdir(build))
82+
.arg("--output-dir").arg(&distdir(build))
8583
.arg(format!("--package-name={}-{}", name, host))
8684
.arg("--component-name=rust-docs")
8785
.arg("--legacy-manifest-dirs=rustlib,cargo")
@@ -124,14 +122,14 @@ pub fn mingw(build: &Build, host: &str) {
124122
.arg(host);
125123
build.run(&mut cmd);
126124

127-
let mut cmd = Command::new(SH_CMD);
128-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
125+
let mut cmd = rust_installer(build);
126+
cmd.arg("generate")
129127
.arg("--product-name=Rust-MinGW")
130128
.arg("--rel-manifest-dir=rustlib")
131129
.arg("--success-message=Rust-MinGW-is-installed.")
132-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
133-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
134-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
130+
.arg("--image-dir").arg(&image)
131+
.arg("--work-dir").arg(&tmpdir(build))
132+
.arg("--output-dir").arg(&distdir(build))
135133
.arg(format!("--package-name={}-{}", name, host))
136134
.arg("--component-name=rust-mingw")
137135
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -190,15 +188,15 @@ pub fn rustc(build: &Build, stage: u32, host: &str) {
190188
}
191189

192190
// Finally, wrap everything up in a nice tarball!
193-
let mut cmd = Command::new(SH_CMD);
194-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
191+
let mut cmd = rust_installer(build);
192+
cmd.arg("generate")
195193
.arg("--product-name=Rust")
196194
.arg("--rel-manifest-dir=rustlib")
197195
.arg("--success-message=Rust-is-ready-to-roll.")
198-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
199-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
200-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
201-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
196+
.arg("--image-dir").arg(&image)
197+
.arg("--work-dir").arg(&tmpdir(build))
198+
.arg("--output-dir").arg(&distdir(build))
199+
.arg("--non-installed-overlay").arg(&overlay)
202200
.arg(format!("--package-name={}-{}", name, host))
203201
.arg("--component-name=rustc")
204202
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -300,14 +298,14 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) {
300298
let src = build.sysroot(compiler).join("lib/rustlib");
301299
cp_r(&src.join(target), &dst);
302300

303-
let mut cmd = Command::new(SH_CMD);
304-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
301+
let mut cmd = rust_installer(build);
302+
cmd.arg("generate")
305303
.arg("--product-name=Rust")
306304
.arg("--rel-manifest-dir=rustlib")
307305
.arg("--success-message=std-is-standing-at-the-ready.")
308-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
309-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
310-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
306+
.arg("--image-dir").arg(&image)
307+
.arg("--work-dir").arg(&tmpdir(build))
308+
.arg("--output-dir").arg(&distdir(build))
311309
.arg(format!("--package-name={}-{}", name, target))
312310
.arg(format!("--component-name=rust-std-{}", target))
313311
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -356,14 +354,14 @@ pub fn analysis(build: &Build, compiler: &Compiler, target: &str) {
356354
println!("image_src: {:?}, dst: {:?}", image_src, dst);
357355
cp_r(&image_src, &dst);
358356

359-
let mut cmd = Command::new(SH_CMD);
360-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
357+
let mut cmd = rust_installer(build);
358+
cmd.arg("generate")
361359
.arg("--product-name=Rust")
362360
.arg("--rel-manifest-dir=rustlib")
363361
.arg("--success-message=save-analysis-saved.")
364-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
365-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
366-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
362+
.arg("--image-dir").arg(&image)
363+
.arg("--work-dir").arg(&tmpdir(build))
364+
.arg("--output-dir").arg(&distdir(build))
367365
.arg(format!("--package-name={}-{}", name, target))
368366
.arg(format!("--component-name=rust-analysis-{}", target))
369367
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -471,13 +469,17 @@ pub fn rust_src(build: &Build) {
471469
write_file(&plain_dst_src.join("version"), build.rust_version().as_bytes());
472470

473471
// Create plain source tarball
474-
let tarball = rust_src_location(build);
472+
let mut tarball = rust_src_location(build);
473+
tarball.set_extension(""); // strip .gz
474+
tarball.set_extension(""); // strip .tar
475475
if let Some(dir) = tarball.parent() {
476476
t!(fs::create_dir_all(dir));
477477
}
478-
let mut cmd = Command::new("tar");
479-
cmd.arg("-czf").arg(sanitize_sh(&tarball))
480-
.arg(&plain_name)
478+
let mut cmd = rust_installer(build);
479+
cmd.arg("tarball")
480+
.arg("--input").arg(&plain_name)
481+
.arg("--output").arg(&tarball)
482+
.arg("--work-dir=.")
481483
.current_dir(tmpdir(build));
482484
build.run(&mut cmd);
483485

@@ -521,14 +523,14 @@ pub fn rust_src(build: &Build) {
521523
}
522524

523525
// Create source tarball in rust-installer format
524-
let mut cmd = Command::new(SH_CMD);
525-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
526+
let mut cmd = rust_installer(build);
527+
cmd.arg("generate")
526528
.arg("--product-name=Rust")
527529
.arg("--rel-manifest-dir=rustlib")
528530
.arg("--success-message=Awesome-Source.")
529-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
530-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
531-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
531+
.arg("--image-dir").arg(&image)
532+
.arg("--work-dir").arg(&tmpdir(build))
533+
.arg("--output-dir").arg(&distdir(build))
532534
.arg(format!("--package-name={}", name))
533535
.arg("--component-name=rust-src")
534536
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -622,15 +624,15 @@ pub fn cargo(build: &Build, stage: u32, target: &str) {
622624
t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes()));
623625

624626
// Generate the installer tarball
625-
let mut cmd = Command::new("sh");
626-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
627+
let mut cmd = rust_installer(build);
628+
cmd.arg("generate")
627629
.arg("--product-name=Rust")
628630
.arg("--rel-manifest-dir=rustlib")
629631
.arg("--success-message=Rust-is-ready-to-roll.")
630-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
631-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
632-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
633-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
632+
.arg("--image-dir").arg(&image)
633+
.arg("--work-dir").arg(&tmpdir(build))
634+
.arg("--output-dir").arg(&distdir(build))
635+
.arg("--non-installed-overlay").arg(&overlay)
634636
.arg(format!("--package-name={}-{}", name, target))
635637
.arg("--component-name=cargo")
636638
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -671,15 +673,15 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
671673
t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes()));
672674

673675
// Generate the installer tarball
674-
let mut cmd = Command::new("sh");
675-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
676+
let mut cmd = rust_installer(build);
677+
cmd.arg("generate")
676678
.arg("--product-name=Rust")
677679
.arg("--rel-manifest-dir=rustlib")
678680
.arg("--success-message=RLS-ready-to-serve.")
679-
.arg(format!("--image-dir={}", sanitize_sh(&image)))
680-
.arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
681-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
682-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
681+
.arg("--image-dir").arg(&image)
682+
.arg("--work-dir").arg(&tmpdir(build))
683+
.arg("--output-dir").arg(&distdir(build))
684+
.arg("--non-installed-overlay").arg(&overlay)
683685
.arg(format!("--package-name={}-{}", name, target))
684686
.arg("--component-name=rls")
685687
.arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -730,29 +732,28 @@ pub fn extended(build: &Build, stage: u32, target: &str) {
730732
// upgrades rustc was upgraded before rust-std. To avoid rustc clobbering
731733
// the std files during uninstall. To do this ensure that rustc comes
732734
// before rust-std in the list below.
733-
let mut input_tarballs = format!("{},{},{},{},{},{}",
734-
sanitize_sh(&rustc_installer),
735-
sanitize_sh(&cargo_installer),
736-
sanitize_sh(&rls_installer),
737-
sanitize_sh(&analysis_installer),
738-
sanitize_sh(&docs_installer),
739-
sanitize_sh(&std_installer));
735+
let mut tarballs = vec![rustc_installer, cargo_installer, rls_installer,
736+
analysis_installer, docs_installer, std_installer];
740737
if target.contains("pc-windows-gnu") {
741-
input_tarballs.push_str(",");
742-
input_tarballs.push_str(&sanitize_sh(&mingw_installer));
738+
tarballs.push(mingw_installer);
739+
}
740+
let mut input_tarballs = tarballs[0].as_os_str().to_owned();
741+
for tarball in &tarballs[1..] {
742+
input_tarballs.push(",");
743+
input_tarballs.push(tarball);
743744
}
744745

745-
let mut cmd = Command::new(SH_CMD);
746-
cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/combine-installers.sh")))
746+
let mut cmd = rust_installer(build);
747+
cmd.arg("combine")
747748
.arg("--product-name=Rust")
748749
.arg("--rel-manifest-dir=rustlib")
749750
.arg("--success-message=Rust-is-ready-to-roll.")
750-
.arg(format!("--work-dir={}", sanitize_sh(&work)))
751-
.arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
751+
.arg("--work-dir").arg(&work)
752+
.arg("--output-dir").arg(&distdir(build))
752753
.arg(format!("--package-name={}-{}", pkgname(build, "rust"), target))
753754
.arg("--legacy-manifest-dirs=rustlib,cargo")
754-
.arg(format!("--input-tarballs={}", input_tarballs))
755-
.arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)));
755+
.arg("--input-tarballs").arg(input_tarballs)
756+
.arg("--non-installed-overlay").arg(&overlay);
756757
build.run(&mut cmd);
757758

758759
let mut license = String::new();

src/bootstrap/lib.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,8 @@ impl Build {
479479
// compiled with debuginfo.
480480
if mode != Mode::Tool {
481481
cargo.env("RUSTC_DEBUGINFO", self.config.rust_debuginfo.to_string())
482-
.env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string());
482+
.env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string())
483+
.env("RUSTC_FORCE_UNSTABLE", "1");
483484
}
484485

485486
// Enable usage of unstable features
@@ -524,7 +525,9 @@ impl Build {
524525
// the comipiler, libs, and tests are stable and we don't want to make
525526
// their deps unstable (since this would break the first invariant
526527
// above).
527-
if mode != Mode::Tool {
528+
//
529+
// FIXME: remove this after next stage0
530+
if mode != Mode::Tool && stage == 0 {
528531
cargo.env("RUSTBUILD_UNSTABLE", "1");
529532
}
530533

src/bootstrap/native.rs

+17
Original file line numberDiff line numberDiff line change
@@ -309,11 +309,15 @@ pub fn openssl(build: &Build, target: &str) {
309309
configure.arg("no-ssl3");
310310

311311
let os = match target {
312+
"aarch64-linux-android" => "linux-aarch64",
312313
"aarch64-unknown-linux-gnu" => "linux-aarch64",
314+
"arm-linux-androideabi" => "android",
313315
"arm-unknown-linux-gnueabi" => "linux-armv4",
314316
"arm-unknown-linux-gnueabihf" => "linux-armv4",
317+
"armv7-linux-androideabi" => "android-armv7",
315318
"armv7-unknown-linux-gnueabihf" => "linux-armv4",
316319
"i686-apple-darwin" => "darwin-i386-cc",
320+
"i686-linux-android" => "android-x86",
317321
"i686-unknown-freebsd" => "BSD-x86-elf",
318322
"i686-unknown-linux-gnu" => "linux-elf",
319323
"i686-unknown-linux-musl" => "linux-elf",
@@ -326,6 +330,7 @@ pub fn openssl(build: &Build, target: &str) {
326330
"powerpc64le-unknown-linux-gnu" => "linux-ppc64le",
327331
"s390x-unknown-linux-gnu" => "linux64-s390x",
328332
"x86_64-apple-darwin" => "darwin64-x86_64-cc",
333+
"x86_64-linux-android" => "linux-x86_64",
329334
"x86_64-unknown-freebsd" => "BSD-x86_64",
330335
"x86_64-unknown-linux-gnu" => "linux-x86_64",
331336
"x86_64-unknown-linux-musl" => "linux-x86_64",
@@ -337,6 +342,18 @@ pub fn openssl(build: &Build, target: &str) {
337342
for flag in build.cflags(target) {
338343
configure.arg(flag);
339344
}
345+
// There is no specific os target for android aarch64 or x86_64,
346+
// so we need to pass some extra cflags
347+
if target == "aarch64-linux-android" || target == "x86_64-linux-android" {
348+
configure.arg("-mandroid");
349+
configure.arg("-fomit-frame-pointer");
350+
}
351+
// Make PIE binaries
352+
// Non-PIE linker support was removed in Lollipop
353+
// https://source.android.com/security/enhancements/enhancements50
354+
if target == "i686-linux-android" {
355+
configure.arg("no-asm");
356+
}
340357
configure.current_dir(&obj);
341358
println!("Configuring openssl for {}", target);
342359
build.run_quiet(&mut configure);

0 commit comments

Comments
 (0)