@@ -1430,10 +1430,12 @@ fn rustc_llvm_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetSelect
14301430 if builder. config . llvm_enzyme {
14311431 cargo. env ( "LLVM_ENZYME" , "1" ) ;
14321432 }
1433+ let llvm:: LlvmResult { host_llvm_config, .. } = builder. ensure ( llvm:: Llvm { target } ) ;
14331434 if builder. config . llvm_offload {
1435+ builder. ensure ( llvm:: OmpOffload { target } ) ;
14341436 cargo. env ( "LLVM_OFFLOAD" , "1" ) ;
14351437 }
1436- let llvm :: LlvmResult { host_llvm_config , .. } = builder . ensure ( llvm :: Llvm { target } ) ;
1438+
14371439 cargo. env ( "LLVM_CONFIG" , & host_llvm_config) ;
14381440
14391441 // Some LLVM linker flags (-L and -l) may be needed to link `rustc_llvm`. Its build script
@@ -2296,6 +2298,24 @@ impl Step for Assemble {
22962298 }
22972299 }
22982300
2301+ if builder. config . llvm_offload && !builder. config . dry_run ( ) {
2302+ debug ! ( "`llvm_offload` requested" ) ;
2303+ let offload_install = builder. ensure ( llvm:: OmpOffload { target : build_compiler. host } ) ;
2304+ if let Some ( _llvm_config) = builder. llvm_config ( builder. config . host_target ) {
2305+ let target_libdir =
2306+ builder. sysroot_target_libdir ( target_compiler, target_compiler. host ) ;
2307+ for p in offload_install. offload_paths ( ) {
2308+ let libname = p. file_name ( ) . unwrap ( ) ;
2309+ let dst_lib = target_libdir. join ( libname) ;
2310+ builder. resolve_symlink_and_copy ( & p, & dst_lib) ;
2311+ }
2312+ // FIXME(offload): Add amdgcn-amd-amdhsa and nvptx64-nvidia-cuda folder
2313+ // This one is slightly more tricky, since we have the same file twice, in two
2314+ // subfolders for amdgcn and nvptx64. We'll likely find two more in the future, once
2315+ // Intel and Spir-V support lands in offload.
2316+ }
2317+ }
2318+
22992319 // Build the libraries for this compiler to link to (i.e., the libraries
23002320 // it uses at runtime).
23012321 debug ! (
0 commit comments