@@ -199,16 +199,6 @@ impl Step for Std {
199
199
200
200
builder. require_submodule ( "library/stdarch" , None ) ;
201
201
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
-
212
202
let mut target_deps = builder. ensure ( StartupObjects { compiler, target } ) ;
213
203
214
204
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
473
463
cargo. env ( "MACOSX_DEPLOYMENT_TARGET" , target) ;
474
464
}
475
465
466
+ // Paths needed by `library/profiler_builtins/build.rs`.
476
467
if let Some ( path) = builder. config . profiler_path ( target) {
477
468
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) ;
478
485
}
479
486
480
487
// 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
507
514
) ;
508
515
let compiler_builtins_root = builder. src . join ( "src/llvm-project/compiler-rt" ) ;
509
516
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 .
512
519
cargo. env ( "RUST_COMPILER_RT_ROOT" , & compiler_builtins_root) ;
513
520
" compiler-builtins-c"
514
521
} else {
0 commit comments