mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Rollup merge of #130899 - bjorn3:wasi_bootstrap_fixes, r=davidtwco
Couple of changes to make it easier to compile rustc for wasm This is a subset of the patches I have on my rust fork to compile rustc for wasm32-wasip1.
This commit is contained in:
commit
31fbf67ce3
@ -29,13 +29,12 @@ use std::path::PathBuf;
|
||||
use std::process::{self, Command, Stdio};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::{Arc, OnceLock};
|
||||
use std::time::{Duration, Instant, SystemTime};
|
||||
use std::time::{Instant, SystemTime};
|
||||
use std::{env, str};
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||
use rustc_codegen_ssa::{CodegenErrors, CodegenResults};
|
||||
use rustc_const_eval::CTRL_C_RECEIVED;
|
||||
use rustc_data_structures::profiling::{
|
||||
TimePassesFormat, get_resident_set_size, print_time_passes_entry,
|
||||
};
|
||||
@ -1577,8 +1576,8 @@ pub fn install_ctrlc_handler() {
|
||||
// time to check CTRL_C_RECEIVED and run its own shutdown logic, but after a short amount
|
||||
// of time exit the process. This sleep+exit ensures that even if nobody is checking
|
||||
// CTRL_C_RECEIVED, the compiler exits reasonably promptly.
|
||||
CTRL_C_RECEIVED.store(true, Ordering::Relaxed);
|
||||
std::thread::sleep(Duration::from_millis(100));
|
||||
rustc_const_eval::CTRL_C_RECEIVED.store(true, Ordering::Relaxed);
|
||||
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||
std::process::exit(1);
|
||||
})
|
||||
.expect("Unable to install ctrlc handler");
|
||||
|
@ -76,10 +76,14 @@ pub fn link_or_copy<P: AsRef<Path>, Q: AsRef<Path>>(p: P, q: Q) -> io::Result<Li
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
#[cfg(any(unix, all(target_os = "wasi", target_env = "p1")))]
|
||||
pub fn path_to_c_string(p: &Path) -> CString {
|
||||
use std::ffi::OsStr;
|
||||
#[cfg(unix)]
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
#[cfg(all(target_os = "wasi", target_env = "p1"))]
|
||||
use std::os::wasi::ffi::OsStrExt;
|
||||
|
||||
let p: &OsStr = p.as_ref();
|
||||
CString::new(p.as_bytes()).unwrap()
|
||||
}
|
||||
|
@ -1687,10 +1687,24 @@ impl<'a> Builder<'a> {
|
||||
match mode {
|
||||
Mode::Std | Mode::ToolBootstrap | Mode::ToolStd => {}
|
||||
Mode::Rustc | Mode::Codegen | Mode::ToolRustc => {
|
||||
// Build proc macros both for the host and the target
|
||||
// Build proc macros both for the host and the target unless proc-macros are not
|
||||
// supported by the target.
|
||||
if target != compiler.host && cmd_kind != Kind::Check {
|
||||
cargo.arg("-Zdual-proc-macros");
|
||||
rustflags.arg("-Zdual-proc-macros");
|
||||
let error = command(self.rustc(compiler))
|
||||
.arg("--target")
|
||||
.arg(target.rustc_target_arg())
|
||||
.arg("--print=file-names")
|
||||
.arg("--crate-type=proc-macro")
|
||||
.arg("-")
|
||||
.run_capture(self)
|
||||
.stderr();
|
||||
let not_supported = error
|
||||
.lines()
|
||||
.any(|line| line.contains("unsupported crate type `proc-macro`"));
|
||||
if !not_supported {
|
||||
cargo.arg("-Zdual-proc-macros");
|
||||
rustflags.arg("-Zdual-proc-macros");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,8 @@ pub fn exe(name: &str, target: &str) -> String {
|
||||
format!("{name}.exe")
|
||||
} else if target.contains("uefi") {
|
||||
format!("{name}.efi")
|
||||
} else if target.contains("wasm") {
|
||||
format!("{name}.wasm")
|
||||
} else {
|
||||
name.to_string()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user