@@ -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 {
0 commit comments