Skip to content

Commit 379e94f

Browse files
committed
Auto merge of #94480 - bjorn3:no_build_helper, r=Mark-Simulacrum
Remove build_helper The majority of the code is only used by either rustbuild or rustc_llvm's build script. Rust_build is compiled once for rustbuild and once for every stage. This means that the majority of the code in this crate is needlessly compiled multiple times. By moving only the code actually used by the respective crates to rustbuild and rustc_llvm's build script, this needless duplicate compilation is avoided.
2 parents c8a49fc + e657da7 commit 379e94f

27 files changed

+236
-272
lines changed

Cargo.lock

-6
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ dependencies = [
214214
name = "bootstrap"
215215
version = "0.0.0"
216216
dependencies = [
217-
"build_helper",
218217
"cc",
219218
"cmake",
220219
"filetime",
@@ -256,10 +255,6 @@ dependencies = [
256255
"toml",
257256
]
258257

259-
[[package]]
260-
name = "build_helper"
261-
version = "0.1.0"
262-
263258
[[package]]
264259
name = "bump-stage0"
265260
version = "0.1.0"
@@ -3891,7 +3886,6 @@ dependencies = [
38913886
name = "rustc_llvm"
38923887
version = "0.0.0"
38933888
dependencies = [
3894-
"build_helper",
38953889
"cc",
38963890
"libc",
38973891
]

compiler/rustc_llvm/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,4 @@ emscripten = []
1111
libc = "0.2.73"
1212

1313
[build-dependencies]
14-
build_helper = { path = "../../src/build_helper" }
1514
cc = "1.0.69"

compiler/rustc_llvm/build.rs

+66-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::env;
2+
use std::ffi::{OsStr, OsString};
3+
use std::fmt::Display;
24
use std::path::{Path, PathBuf};
3-
use std::process::Command;
4-
5-
use build_helper::{output, tracked_env_var_os};
5+
use std::process::{Command, Stdio};
66

77
fn detect_llvm_link() -> (&'static str, &'static str) {
88
// Force the link mode we want, preferring static by default, but
@@ -14,13 +14,74 @@ fn detect_llvm_link() -> (&'static str, &'static str) {
1414
}
1515
}
1616

17+
// Because Cargo adds the compiler's dylib path to our library search path, llvm-config may
18+
// break: the dylib path for the compiler, as of this writing, contains a copy of the LLVM
19+
// shared library, which means that when our freshly built llvm-config goes to load it's
20+
// associated LLVM, it actually loads the compiler's LLVM. In particular when building the first
21+
// compiler (i.e., in stage 0) that's a problem, as the compiler's LLVM is likely different from
22+
// the one we want to use. As such, we restore the environment to what bootstrap saw. This isn't
23+
// perfect -- we might actually want to see something from Cargo's added library paths -- but
24+
// for now it works.
25+
fn restore_library_path() {
26+
let key = tracked_env_var_os("REAL_LIBRARY_PATH_VAR").expect("REAL_LIBRARY_PATH_VAR");
27+
if let Some(env) = tracked_env_var_os("REAL_LIBRARY_PATH") {
28+
env::set_var(&key, &env);
29+
} else {
30+
env::remove_var(&key);
31+
}
32+
}
33+
34+
/// Reads an environment variable and adds it to dependencies.
35+
/// Supposed to be used for all variables except those set for build scripts by cargo
36+
/// <https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts>
37+
fn tracked_env_var_os<K: AsRef<OsStr> + Display>(key: K) -> Option<OsString> {
38+
println!("cargo:rerun-if-env-changed={}", key);
39+
env::var_os(key)
40+
}
41+
42+
fn rerun_if_changed_anything_in_dir(dir: &Path) {
43+
let mut stack = dir
44+
.read_dir()
45+
.unwrap()
46+
.map(|e| e.unwrap())
47+
.filter(|e| &*e.file_name() != ".git")
48+
.collect::<Vec<_>>();
49+
while let Some(entry) = stack.pop() {
50+
let path = entry.path();
51+
if entry.file_type().unwrap().is_dir() {
52+
stack.extend(path.read_dir().unwrap().map(|e| e.unwrap()));
53+
} else {
54+
println!("cargo:rerun-if-changed={}", path.display());
55+
}
56+
}
57+
}
58+
59+
#[track_caller]
60+
fn output(cmd: &mut Command) -> String {
61+
let output = match cmd.stderr(Stdio::inherit()).output() {
62+
Ok(status) => status,
63+
Err(e) => {
64+
println!("\n\nfailed to execute command: {:?}\nerror: {}\n\n", cmd, e);
65+
std::process::exit(1);
66+
}
67+
};
68+
if !output.status.success() {
69+
panic!(
70+
"command did not execute successfully: {:?}\n\
71+
expected success, got: {}",
72+
cmd, output.status
73+
);
74+
}
75+
String::from_utf8(output.stdout).unwrap()
76+
}
77+
1778
fn main() {
1879
if tracked_env_var_os("RUST_CHECK").is_some() {
1980
// If we're just running `check`, there's no need for LLVM to be built.
2081
return;
2182
}
2283

23-
build_helper::restore_library_path();
84+
restore_library_path();
2485

2586
let target = env::var("TARGET").expect("TARGET was not set");
2687
let llvm_config =
@@ -160,7 +221,7 @@ fn main() {
160221
cfg.debug(false);
161222
}
162223

163-
build_helper::rerun_if_changed_anything_in_dir(Path::new("llvm-wrapper"));
224+
rerun_if_changed_anything_in_dir(Path::new("llvm-wrapper"));
164225
cfg.file("llvm-wrapper/PassWrapper.cpp")
165226
.file("llvm-wrapper/RustWrapper.cpp")
166227
.file("llvm-wrapper/ArchiveWrapper.cpp")

src/bootstrap/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ path = "bin/llvm-config-wrapper.rs"
3434
test = false
3535

3636
[dependencies]
37-
build_helper = { path = "../build_helper" }
3837
cmake = "0.1.38"
3938
filetime = "0.2"
4039
getopts = "0.2.19"

src/bootstrap/builder.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ use std::path::{Component, Path, PathBuf};
1111
use std::process::Command;
1212
use std::time::{Duration, Instant};
1313

14-
use build_helper::{output, t};
15-
1614
use crate::cache::{Cache, Interned, INTERNER};
1715
use crate::check;
1816
use crate::compile;
@@ -25,7 +23,7 @@ use crate::native;
2523
use crate::run;
2624
use crate::test;
2725
use crate::tool::{self, SourceType};
28-
use crate::util::{self, add_dylib_path, add_link_lib_path, exe, libdir};
26+
use crate::util::{self, add_dylib_path, add_link_lib_path, exe, libdir, output, t};
2927
use crate::EXTRA_CHECK_CFGS;
3028
use crate::{Build, CLang, DocTests, GitRepo, Mode};
3129

src/bootstrap/cc_detect.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ use std::path::{Path, PathBuf};
2626
use std::process::Command;
2727
use std::{env, iter};
2828

29-
use build_helper::output;
30-
3129
use crate::config::{Target, TargetSelection};
30+
use crate::util::output;
3231
use crate::{Build, CLang, GitRepo};
3332

3433
// The `cc` crate doesn't provide a way to obtain a path to the detected archiver,

src/bootstrap/channel.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
use std::path::Path;
99
use std::process::Command;
1010

11-
use build_helper::output;
12-
11+
use crate::util::output;
1312
use crate::Build;
1413

1514
pub enum GitInfo {

src/bootstrap/clean.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ use std::fs;
99
use std::io::{self, ErrorKind};
1010
use std::path::Path;
1111

12-
use build_helper::t;
13-
12+
use crate::util::t;
1413
use crate::Build;
1514

1615
pub fn clean(build: &Build, all: bool) {

src/bootstrap/compile.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use std::path::{Path, PathBuf};
1616
use std::process::{exit, Command, Stdio};
1717
use std::str;
1818

19-
use build_helper::{output, t, up_to_date};
2019
use serde::Deserialize;
2120

2221
use crate::builder::Cargo;
@@ -26,7 +25,7 @@ use crate::config::{LlvmLibunwind, TargetSelection};
2625
use crate::dist;
2726
use crate::native;
2827
use crate::tool::SourceType;
29-
use crate::util::{exe, is_debug_info, is_dylib, symlink_dir};
28+
use crate::util::{exe, is_debug_info, is_dylib, output, symlink_dir, t, up_to_date};
3029
use crate::LLVM_TOOLS;
3130
use crate::{CLang, Compiler, DependencyType, GitRepo, Mode};
3231

src/bootstrap/config.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ use crate::cache::{Interned, INTERNER};
1717
use crate::channel::GitInfo;
1818
pub use crate::flags::Subcommand;
1919
use crate::flags::{Color, Flags};
20-
use crate::util::exe;
21-
use build_helper::t;
20+
use crate::util::{exe, t};
2221
use serde::Deserialize;
2322

2423
macro_rules! check_ci_llvm {

src/bootstrap/dist.rs

+1-11
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ use std::fs;
1414
use std::path::{Path, PathBuf};
1515
use std::process::Command;
1616

17-
use build_helper::{output, t};
18-
1917
use crate::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
2018
use crate::cache::{Interned, INTERNER};
2119
use crate::compile;
2220
use crate::config::TargetSelection;
2321
use crate::tarball::{GeneratedTarball, OverlayKind, Tarball};
2422
use crate::tool::{self, Tool};
25-
use crate::util::{exe, is_dylib, timeit};
23+
use crate::util::{exe, is_dylib, output, t, timeit};
2624
use crate::{Compiler, DependencyType, Mode, LLVM_TOOLS};
2725

2826
pub fn pkgname(builder: &Builder<'_>, component: &str) -> String {
@@ -635,14 +633,6 @@ impl Step for RustcDev {
635633
&[],
636634
&tarball.image_dir().join("lib/rustlib/rustc-src/rust"),
637635
);
638-
// This particular crate is used as a build dependency of the above.
639-
copy_src_dirs(
640-
builder,
641-
&builder.src,
642-
&["src/build_helper"],
643-
&[],
644-
&tarball.image_dir().join("lib/rustlib/rustc-src/rust"),
645-
);
646636
for file in src_files {
647637
tarball.add_file(builder.src.join(file), "lib/rustlib/rustc-src/rust", 0o644);
648638
}

src/bootstrap/doc.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@ use std::fs;
1212
use std::io;
1313
use std::path::{Path, PathBuf};
1414

15-
use crate::Mode;
16-
use build_helper::{t, up_to_date};
17-
1815
use crate::builder::{Builder, Compiler, Kind, RunConfig, ShouldRun, Step};
1916
use crate::cache::{Interned, INTERNER};
2017
use crate::compile;
2118
use crate::config::{Config, TargetSelection};
2219
use crate::tool::{self, prepare_tool_cargo, SourceType, Tool};
23-
use crate::util::symlink_dir;
20+
use crate::util::{symlink_dir, t, up_to_date};
21+
use crate::Mode;
2422

2523
macro_rules! submodule_helper {
2624
($path:expr, submodule) => {

src/bootstrap/flags.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ use std::env;
77
use std::path::PathBuf;
88
use std::process;
99

10-
use build_helper::t;
1110
use getopts::Options;
1211

1312
use crate::builder::Builder;
1413
use crate::config::{Config, TargetSelection};
1514
use crate::setup::Profile;
15+
use crate::util::t;
1616
use crate::{Build, DocTests};
1717

1818
pub enum Color {

src/bootstrap/format.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Runs rustfmt on the repository.
22
3+
use crate::util::{output, t};
34
use crate::Build;
4-
use build_helper::{output, t};
55
use ignore::WalkBuilder;
66
use std::collections::VecDeque;
77
use std::path::{Path, PathBuf};

src/bootstrap/install.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::fs;
88
use std::path::{Component, PathBuf};
99
use std::process::Command;
1010

11-
use build_helper::t;
11+
use crate::util::t;
1212

1313
use crate::dist::{self, sanitize_sh};
1414
use crate::tarball::GeneratedTarball;

src/bootstrap/lib.rs

+6-8
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,13 @@ use std::os::unix::fs::symlink as symlink_file;
116116
#[cfg(windows)]
117117
use std::os::windows::fs::symlink_file;
118118

119-
use build_helper::{mtime, output, run, run_suppressed, t, try_run, try_run_suppressed};
120119
use filetime::FileTime;
121120

122121
use crate::builder::Kind;
123122
use crate::config::{LlvmLibunwind, TargetSelection};
124-
use crate::util::{exe, libdir, CiEnv};
123+
use crate::util::{
124+
exe, libdir, mtime, output, run, run_suppressed, t, try_run, try_run_suppressed, CiEnv,
125+
};
125126

126127
mod builder;
127128
mod cache;
@@ -1301,13 +1302,10 @@ impl Build {
13011302
}
13021303
// Don't include optional deps if their features are not
13031304
// enabled. Ideally this would be computed from `cargo
1304-
// metadata --features …`, but that is somewhat slow. Just
1305-
// skip `build_helper` since there aren't any operations we
1306-
// want to perform on it. In the future, we may want to
1307-
// consider just filtering all build and dev dependencies in
1308-
// metadata::build.
1305+
// metadata --features …`, but that is somewhat slow. In
1306+
// the future, we may want to consider just filtering all
1307+
// build and dev dependencies in metadata::build.
13091308
if visited.insert(dep)
1310-
&& dep != "build_helper"
13111309
&& (dep != "profiler_builtins"
13121310
|| target
13131311
.map(|t| self.config.profiler_enabled(t))

src/bootstrap/metadata.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use std::path::PathBuf;
22
use std::process::Command;
33

4-
use build_helper::output;
54
use serde::Deserialize;
65

76
use crate::cache::INTERNER;
7+
use crate::util::output;
88
use crate::{Build, Crate};
99

1010
#[derive(Deserialize)]

src/bootstrap/native.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@ use std::io;
1616
use std::path::{Path, PathBuf};
1717
use std::process::Command;
1818

19-
use build_helper::{output, t};
20-
2119
use crate::builder::{Builder, RunConfig, ShouldRun, Step};
2220
use crate::config::TargetSelection;
23-
use crate::util::{self, exe};
21+
use crate::util::{self, exe, output, t, up_to_date};
2422
use crate::{CLang, GitRepo};
25-
use build_helper::up_to_date;
2623

2724
pub struct Meta {
2825
stamp: HashStamp,

src/bootstrap/run.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::builder::{Builder, RunConfig, ShouldRun, Step};
22
use crate::dist::distdir;
33
use crate::tool::Tool;
4-
use build_helper::output;
4+
use crate::util::output;
55
use std::process::Command;
66

77
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]

src/bootstrap/sanity.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ use std::fs;
1515
use std::path::PathBuf;
1616
use std::process::Command;
1717

18-
use build_helper::output;
19-
2018
use crate::cache::INTERNER;
2119
use crate::config::Target;
20+
use crate::util::output;
2221
use crate::Build;
2322

2423
pub struct Finder {

src/bootstrap/tarball.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ use std::{
33
process::Command,
44
};
55

6-
use build_helper::t;
7-
86
use crate::builder::Builder;
7+
use crate::util::t;
98

109
#[derive(Copy, Clone)]
1110
pub(crate) enum OverlayKind {

0 commit comments

Comments
 (0)