Skip to content

Commit 4acc531

Browse files
committed
Build library/profiler_builtins from ci-llvm if appropriate
1 parent 585804f commit 4acc531

File tree

3 files changed

+32
-16
lines changed

3 files changed

+32
-16
lines changed

library/profiler_builtins/build.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//! See the build.rs for libcompiler_builtins crate for details.
44
55
use std::env;
6-
use std::path::Path;
6+
use std::path::PathBuf;
77

88
fn main() {
99
println!("cargo:rerun-if-env-changed=LLVM_PROFILER_RT_LIB");
@@ -79,9 +79,13 @@ fn main() {
7979
cfg.define("COMPILER_RT_HAS_ATOMICS", Some("1"));
8080
}
8181

82-
// Note that this should exist if we're going to run (otherwise we just
83-
// don't build profiler builtins at all).
84-
let root = Path::new("../../src/llvm-project/compiler-rt");
82+
// Get the LLVM `compiler-rt` directory from bootstrap.
83+
println!("cargo:rerun-if-env-changed=RUST_COMPILER_RT_FOR_PROFILER");
84+
let root = PathBuf::from(env::var("RUST_COMPILER_RT_FOR_PROFILER").unwrap_or_else(|_| {
85+
let path = "../../src/llvm-project/compiler-rt";
86+
println!("RUST_COMPILER_RT_FOR_PROFILER was not set; falling back to {path:?}");
87+
path.to_owned()
88+
}));
8589

8690
let src_root = root.join("lib").join("profile");
8791
assert!(src_root.exists(), "profiler runtime source directory not found: {src_root:?}");

src/bootstrap/src/core/build_steps/compile.rs

+19-12
Original file line numberDiff line numberDiff line change
@@ -199,16 +199,6 @@ impl Step for Std {
199199

200200
builder.require_submodule("library/stdarch", None);
201201

202-
// Profiler information requires LLVM's compiler-rt
203-
if builder.config.profiler {
204-
builder.require_submodule(
205-
"src/llvm-project",
206-
Some(
207-
"The `build.profiler` config option requires `compiler-rt` sources from LLVM.",
208-
),
209-
);
210-
}
211-
212202
let mut target_deps = builder.ensure(StartupObjects { compiler, target });
213203

214204
let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target);
@@ -473,8 +463,25 @@ pub fn std_cargo(builder: &Builder<'_>, target: TargetSelection, stage: u32, car
473463
cargo.env("MACOSX_DEPLOYMENT_TARGET", target);
474464
}
475465

466+
// Paths needed by `library/profiler_builtins/build.rs`.
476467
if let Some(path) = builder.config.profiler_path(target) {
477468
cargo.env("LLVM_PROFILER_RT_LIB", path);
469+
} else if builder.config.profiler_enabled(target) {
470+
let compiler_rt = if builder.config.llvm_from_ci {
471+
// There's a copy of `compiler-rt` in the CI LLVM tarball,
472+
// so we don't need to check out the LLVM submodule.
473+
builder.config.ci_llvm_root().join("compiler-rt")
474+
} else {
475+
builder.require_submodule("src/llvm-project", {
476+
Some("The `build.profiler` config option requires `compiler-rt` sources from LLVM.")
477+
});
478+
builder.src.join("src/llvm-project/compiler-rt")
479+
};
480+
assert!(compiler_rt.exists(), "compiler-rt directory not found: {compiler_rt:?}");
481+
// Currently this is separate from the env var used by `compiler_builtins`
482+
// (below) so that adding support for CI LLVM here doesn't risk breaking
483+
// the compiler builtins. But they could be unified if desired.
484+
cargo.env("RUST_COMPILER_RT_FOR_PROFILER", compiler_rt);
478485
}
479486

480487
// Determine if we're going to compile in optimized C intrinsics to
@@ -507,8 +514,8 @@ pub fn std_cargo(builder: &Builder<'_>, target: TargetSelection, stage: u32, car
507514
);
508515
let compiler_builtins_root = builder.src.join("src/llvm-project/compiler-rt");
509516
assert!(compiler_builtins_root.exists());
510-
// Note that `libprofiler_builtins/build.rs` also computes this so if
511-
// you're changing something here please also change that.
517+
// The path to `compiler-rt` is also used by `profiler_builtins` (above),
518+
// so if you're changing something here please also change that as appropriate.
512519
cargo.env("RUST_COMPILER_RT_ROOT", &compiler_builtins_root);
513520
" compiler-builtins-c"
514521
} else {

src/bootstrap/src/utils/change_tracker.rs

+5
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
230230
severity: ChangeSeverity::Warning,
231231
summary: "./x test --rustc-args was renamed to --compiletest-rustc-args as it only applies there. ./x miri --rustc-args was also removed.",
232232
},
233+
ChangeInfo {
234+
change_id: 129295,
235+
severity: ChangeSeverity::Info,
236+
summary: "The `build.profiler` option now uses source code from `download-ci-llvm` if possible, instead of syncing the `src/llvm-project` submodule.",
237+
},
233238
];

0 commit comments

Comments
 (0)