Merge commit 'b7091eca6d8eb0fe88b58cc9a7aec405d8de5b85' into subtree-update_cg_gcc_2025-06-28
This commit is contained in:
65
compiler/rustc_codegen_gcc/build_system/src/abi_test.rs
Normal file
65
compiler/rustc_codegen_gcc/build_system/src/abi_test.rs
Normal file
@@ -0,0 +1,65 @@
|
||||
use std::ffi::OsStr;
|
||||
use std::path::Path;
|
||||
|
||||
use crate::utils::run_command_with_output;
|
||||
|
||||
fn show_usage() {
|
||||
println!(
|
||||
r#"
|
||||
`abi-test` command help:
|
||||
--help : Show this help"#
|
||||
);
|
||||
}
|
||||
|
||||
pub fn run() -> Result<(), String> {
|
||||
let mut args = std::env::args().skip(2);
|
||||
// FractalFir: In the future, I'd like to add some more subcommands / options.
|
||||
// So, this loop ought to stay for that purpose. It should also stay as a while loop(to parse args)
|
||||
#[allow(clippy::never_loop, clippy::while_let_on_iterator)]
|
||||
while let Some(arg) = args.next() {
|
||||
match arg.as_str() {
|
||||
"--help" => {
|
||||
show_usage();
|
||||
return Ok(());
|
||||
}
|
||||
_ => return Err(format!("Unknown option {arg:?}")),
|
||||
}
|
||||
}
|
||||
// Ensure that we have a cloned version of abi-cafe on hand.
|
||||
crate::utils::git_clone(
|
||||
"https://github.com/Gankra/abi-cafe.git",
|
||||
Some("clones/abi-cafe".as_ref()),
|
||||
true,
|
||||
)
|
||||
.map_err(|err| (format!("Git clone failed with message: {err:?}!")))?;
|
||||
// Configure abi-cafe to use the exact same rustc version we use - this is crucial.
|
||||
// Otherwise, the concept of ABI compatibility becomes meanignless.
|
||||
std::fs::copy("rust-toolchain", "clones/abi-cafe/rust-toolchain")
|
||||
.expect("Could not copy toolchain configs!");
|
||||
// Get the backend path.
|
||||
// We will use the *debug* build of the backend - it has more checks enabled.
|
||||
let backend_path = std::path::absolute("target/debug/librustc_codegen_gcc.so").unwrap();
|
||||
let backend_arg = format!("--add-rustc-codegen-backend=cg_gcc:{}", backend_path.display());
|
||||
// Run ABI cafe using cargo.
|
||||
let cmd: &[&dyn AsRef<OsStr>] = &[
|
||||
&"cargo",
|
||||
&"run",
|
||||
&"--release",
|
||||
&"--",
|
||||
&backend_arg,
|
||||
// Test rust-LLVM to Rust-GCC calls
|
||||
&"--pairs",
|
||||
&"rustc_calls_cg_gcc",
|
||||
&"--pairs",
|
||||
&"cg_gcc_calls_rustc",
|
||||
// Test Rust-GCC to C calls
|
||||
&"--pairs",
|
||||
&"cg_gcc_calls_c",
|
||||
&"--pairs",
|
||||
&"c_calls_cg_gcc",
|
||||
];
|
||||
// Run ABI cafe.
|
||||
run_command_with_output(cmd, Some(Path::new("clones/abi-cafe")))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
use std::{env, process};
|
||||
|
||||
mod abi_test;
|
||||
mod build;
|
||||
mod clean;
|
||||
mod clone_gcc;
|
||||
@@ -12,7 +13,6 @@ mod rust_tools;
|
||||
mod rustc_info;
|
||||
mod test;
|
||||
mod utils;
|
||||
|
||||
const BUILD_DIR: &str = "build";
|
||||
|
||||
macro_rules! arg_error {
|
||||
@@ -44,7 +44,8 @@ Commands:
|
||||
info : Displays information about the build environment and project configuration.
|
||||
clone-gcc : Clones the GCC compiler from a specified source.
|
||||
fmt : Runs rustfmt
|
||||
fuzz : Fuzzes `cg_gcc` using rustlantis"
|
||||
fuzz : Fuzzes `cg_gcc` using rustlantis
|
||||
abi-test : Runs the abi-cafe test suite on the codegen, checking for ABI compatibility with LLVM"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -59,6 +60,7 @@ pub enum Command {
|
||||
Info,
|
||||
Fmt,
|
||||
Fuzz,
|
||||
AbiTest,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
@@ -77,6 +79,7 @@ fn main() {
|
||||
Some("test") => Command::Test,
|
||||
Some("info") => Command::Info,
|
||||
Some("clone-gcc") => Command::CloneGcc,
|
||||
Some("abi-test") => Command::AbiTest,
|
||||
Some("fmt") => Command::Fmt,
|
||||
Some("fuzz") => Command::Fuzz,
|
||||
Some("--help") => {
|
||||
@@ -102,6 +105,7 @@ fn main() {
|
||||
Command::CloneGcc => clone_gcc::run(),
|
||||
Command::Fmt => fmt::run(),
|
||||
Command::Fuzz => fuzz::run(),
|
||||
Command::AbiTest => abi_test::run(),
|
||||
} {
|
||||
eprintln!("Command failed to run: {e}");
|
||||
process::exit(1);
|
||||
|
||||
@@ -738,14 +738,7 @@ fn test_libcore(env: &Env, args: &TestArg) -> Result<(), String> {
|
||||
let path = get_sysroot_dir().join("sysroot_src/library/coretests");
|
||||
let _ = remove_dir_all(path.join("target"));
|
||||
// TODO(antoyo): run in release mode when we fix the failures.
|
||||
// TODO(antoyo): remove the --skip f16::test_total_cmp when this issue is fixed:
|
||||
// https://github.com/rust-lang/rust/issues/141503
|
||||
run_cargo_command(
|
||||
&[&"test", &"--", &"--skip", &"f16::test_total_cmp"],
|
||||
Some(&path),
|
||||
env,
|
||||
args,
|
||||
)?;
|
||||
run_cargo_command(&[&"test"], Some(&path), env, args)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user