From 280dffd82cba287bdac74cc23a0ea8359d7cd4e8 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 14 Jan 2023 18:32:19 +0000 Subject: [PATCH] Build rtstartup for none sysroot too Even mini_core needs it --- build_system/build_sysroot.rs | 57 ++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/build_system/build_sysroot.rs b/build_system/build_sysroot.rs index 3f52721a469..f92841ab993 100644 --- a/build_system/build_sysroot.rs +++ b/build_system/build_sysroot.rs @@ -129,7 +129,8 @@ fn build_sysroot_for_triple( 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) @@ -198,31 +199,10 @@ fn build_clif_sysroot_for_triple( 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); @@ -266,3 +246,30 @@ fn build_clif_sysroot_for_triple( target_libs } + +fn build_rtstartup(dirs: &Dirs, compiler: &Compiler) -> Option { + 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) +}