sysroot_kind: SysrootKind,
) -> SysrootTarget {
match sysroot_kind {
- SysrootKind::None => SysrootTarget { triple: compiler.triple, libs: vec![] },
+ SysrootKind::None => build_rtstartup(dirs, &compiler)
+ .unwrap_or(SysrootTarget { triple: compiler.triple, libs: vec![] }),
SysrootKind::Llvm => build_llvm_sysroot_for_triple(compiler),
SysrootKind::Clif => {
build_clif_sysroot_for_triple(dirs, channel, compiler, &cg_clif_dylib_path)
let mut target_libs = SysrootTarget { triple: compiler.triple.clone(), libs: vec![] };
- if compiler.triple.ends_with("windows-gnu") {
- eprintln!("[BUILD] rtstartup for {}", compiler.triple);
-
- RTSTARTUP_SYSROOT.ensure_fresh(dirs);
-
- let rtstartup_src = SYSROOT_SRC.to_path(dirs).join("library").join("rtstartup");
- let mut rtstartup_target_libs =
- SysrootTarget { triple: compiler.triple.clone(), libs: vec![] };
-
- for file in ["rsbegin", "rsend"] {
- let obj = RTSTARTUP_SYSROOT.to_path(dirs).join(format!("{file}.o"));
- let mut build_rtstartup_cmd = Command::new(&compiler.rustc);
- build_rtstartup_cmd
- .arg("--target")
- .arg(&compiler.triple)
- .arg("--emit=obj")
- .arg("-o")
- .arg(&obj)
- .arg(rtstartup_src.join(format!("{file}.rs")));
- spawn_and_wait(build_rtstartup_cmd);
- rtstartup_target_libs.libs.push(obj.clone());
- target_libs.libs.push(obj);
- }
-
+ if let Some(rtstartup_target_libs) = build_rtstartup(dirs, &compiler) {
rtstartup_target_libs.install_into_sysroot(&RTSTARTUP_SYSROOT.to_path(dirs));
+
+ target_libs.libs.extend(rtstartup_target_libs.libs);
}
let build_dir = STANDARD_LIBRARY.target_dir(dirs).join(&compiler.triple).join(channel);
target_libs
}
+
+fn build_rtstartup(dirs: &Dirs, compiler: &Compiler) -> Option<SysrootTarget> {
+ if !compiler.triple.ends_with("windows-gnu") {
+ return None;
+ }
+
+ RTSTARTUP_SYSROOT.ensure_fresh(dirs);
+
+ let rtstartup_src = SYSROOT_SRC.to_path(dirs).join("library").join("rtstartup");
+ let mut target_libs = SysrootTarget { triple: compiler.triple.clone(), libs: vec![] };
+
+ for file in ["rsbegin", "rsend"] {
+ let obj = RTSTARTUP_SYSROOT.to_path(dirs).join(format!("{file}.o"));
+ let mut build_rtstartup_cmd = Command::new(&compiler.rustc);
+ build_rtstartup_cmd
+ .arg("--target")
+ .arg(&compiler.triple)
+ .arg("--emit=obj")
+ .arg("-o")
+ .arg(&obj)
+ .arg(rtstartup_src.join(format!("{file}.rs")));
+ spawn_and_wait(build_rtstartup_cmd);
+ target_libs.libs.push(obj.clone());
+ }
+
+ Some(target_libs)
+}