Merge pull request #1255 from afonso360/abi-checker
Add abi-checker to y.rs and run it on CI
This commit is contained in:
commit
8c407e0fb4
1
.gitignore
vendored
1
.gitignore
vendored
@ -19,3 +19,4 @@ perf.data.old
|
|||||||
/regex
|
/regex
|
||||||
/simple-raytracer
|
/simple-raytracer
|
||||||
/portable-simd
|
/portable-simd
|
||||||
|
/abi-checker
|
||||||
|
60
build_system/abi_checker.rs
Normal file
60
build_system/abi_checker.rs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
use super::build_sysroot;
|
||||||
|
use super::config;
|
||||||
|
use super::utils::spawn_and_wait;
|
||||||
|
use build_system::SysrootKind;
|
||||||
|
use std::env;
|
||||||
|
use std::path::Path;
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
pub(crate) fn run(
|
||||||
|
channel: &str,
|
||||||
|
sysroot_kind: SysrootKind,
|
||||||
|
target_dir: &Path,
|
||||||
|
cg_clif_build_dir: &Path,
|
||||||
|
host_triple: &str,
|
||||||
|
target_triple: &str,
|
||||||
|
) {
|
||||||
|
if !config::get_bool("testsuite.abi-checker") {
|
||||||
|
eprintln!("[SKIP] abi-checker");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if host_triple != target_triple {
|
||||||
|
eprintln!("[SKIP] abi-checker (cross-compilation not supported)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
eprintln!("Building sysroot for abi-checker");
|
||||||
|
build_sysroot::build_sysroot(
|
||||||
|
channel,
|
||||||
|
sysroot_kind,
|
||||||
|
target_dir,
|
||||||
|
cg_clif_build_dir,
|
||||||
|
host_triple,
|
||||||
|
target_triple,
|
||||||
|
);
|
||||||
|
|
||||||
|
eprintln!("Running abi-checker");
|
||||||
|
let mut abi_checker_path = env::current_dir().unwrap();
|
||||||
|
abi_checker_path.push("abi-checker");
|
||||||
|
env::set_current_dir(abi_checker_path.clone()).unwrap();
|
||||||
|
|
||||||
|
let build_dir = abi_checker_path.parent().unwrap().join("build");
|
||||||
|
let cg_clif_dylib_path = build_dir.join(if cfg!(windows) { "bin" } else { "lib" }).join(
|
||||||
|
env::consts::DLL_PREFIX.to_string() + "rustc_codegen_cranelift" + env::consts::DLL_SUFFIX,
|
||||||
|
);
|
||||||
|
|
||||||
|
let pairs = ["rustc_calls_cgclif", "cgclif_calls_rustc", "cgclif_calls_cc", "cc_calls_cgclif"];
|
||||||
|
|
||||||
|
let mut cmd = Command::new("cargo");
|
||||||
|
cmd.arg("run");
|
||||||
|
cmd.arg("--target");
|
||||||
|
cmd.arg(target_triple);
|
||||||
|
cmd.arg("--");
|
||||||
|
cmd.arg("--pairs");
|
||||||
|
cmd.args(pairs);
|
||||||
|
cmd.arg("--add-rustc-codegen-backend");
|
||||||
|
cmd.arg(format!("cgclif:{}", cg_clif_dylib_path.display()));
|
||||||
|
|
||||||
|
spawn_and_wait(cmd);
|
||||||
|
}
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
use self::utils::is_ci;
|
use self::utils::is_ci;
|
||||||
|
|
||||||
|
mod abi_checker;
|
||||||
mod build_backend;
|
mod build_backend;
|
||||||
mod build_sysroot;
|
mod build_sysroot;
|
||||||
mod config;
|
mod config;
|
||||||
@ -141,6 +142,15 @@ pub fn main() {
|
|||||||
&host_triple,
|
&host_triple,
|
||||||
&target_triple,
|
&target_triple,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
abi_checker::run(
|
||||||
|
channel,
|
||||||
|
sysroot_kind,
|
||||||
|
&target_dir,
|
||||||
|
&cg_clif_build_dir,
|
||||||
|
&host_triple,
|
||||||
|
&target_triple,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Command::Build => {
|
Command::Build => {
|
||||||
build_sysroot::build_sysroot(
|
build_sysroot::build_sysroot(
|
||||||
|
@ -14,6 +14,14 @@ pub(crate) fn prepare() {
|
|||||||
eprintln!("[INSTALL] hyperfine");
|
eprintln!("[INSTALL] hyperfine");
|
||||||
Command::new("cargo").arg("install").arg("hyperfine").spawn().unwrap().wait().unwrap();
|
Command::new("cargo").arg("install").arg("hyperfine").spawn().unwrap().wait().unwrap();
|
||||||
|
|
||||||
|
clone_repo_shallow_github(
|
||||||
|
"abi-checker",
|
||||||
|
"Gankra",
|
||||||
|
"abi-checker",
|
||||||
|
"a2232d45f202846f5c02203c9f27355360f9a2ff",
|
||||||
|
);
|
||||||
|
apply_patches("abi-checker", Path::new("abi-checker"));
|
||||||
|
|
||||||
clone_repo_shallow_github(
|
clone_repo_shallow_github(
|
||||||
"rand",
|
"rand",
|
||||||
"rust-random",
|
"rust-random",
|
||||||
|
@ -3,4 +3,4 @@ set -e
|
|||||||
|
|
||||||
rm -rf build_sysroot/{sysroot_src/,target/,compiler-builtins/,rustc_version}
|
rm -rf build_sysroot/{sysroot_src/,target/,compiler-builtins/,rustc_version}
|
||||||
rm -rf target/ build/ perf.data{,.old} y.bin
|
rm -rf target/ build/ perf.data{,.old} y.bin
|
||||||
rm -rf rand/ regex/ simple-raytracer/ portable-simd/
|
rm -rf rand/ regex/ simple-raytracer/ portable-simd/ abi-checker/
|
||||||
|
@ -48,3 +48,5 @@ test.libcore
|
|||||||
test.regex-shootout-regex-dna
|
test.regex-shootout-regex-dna
|
||||||
test.regex
|
test.regex
|
||||||
test.portable-simd
|
test.portable-simd
|
||||||
|
|
||||||
|
testsuite.abi-checker
|
||||||
|
36
patches/0029-abi-checker-Disable-failing-tests.patch
Normal file
36
patches/0029-abi-checker-Disable-failing-tests.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
From 1a315ba225577dbbd1f449d9609f16f984f68708 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Afonso Bordado <afonso360@users.noreply.github.com>
|
||||||
|
Date: Fri, 12 Aug 2022 22:51:58 +0000
|
||||||
|
Subject: [PATCH] Disable abi-checker tests
|
||||||
|
|
||||||
|
---
|
||||||
|
src/report.rs | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/report.rs b/src/report.rs
|
||||||
|
index 7346f5e..8347762 100644
|
||||||
|
--- a/src/report.rs
|
||||||
|
+++ b/src/report.rs
|
||||||
|
@@ -45,6 +45,20 @@ pub fn get_test_rules(test: &TestKey, caller: &dyn AbiImpl, callee: &dyn AbiImpl
|
||||||
|
//
|
||||||
|
// THIS AREA RESERVED FOR VENDORS TO APPLY PATCHES
|
||||||
|
|
||||||
|
+ // Currently MSVC has some broken ABI issues. Furthermore, they cause
|
||||||
|
+ // a STATUS_ACCESS_VIOLATION, so we can't even run them. Ensure that they compile and link.
|
||||||
|
+ if cfg!(windows) && (test.test_name == "bool" || test.test_name == "ui128") {
|
||||||
|
+ result.run = Link;
|
||||||
|
+ result.check = Pass(Link);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // structs is broken in the current release of cranelift for aarch64.
|
||||||
|
+ // It has been fixed for cranelift 0.88: https://github.com/bytecodealliance/wasmtime/pull/4634
|
||||||
|
+ if cfg!(target_arch = "aarch64") && test.test_name == "structs" {
|
||||||
|
+ result.run = Link;
|
||||||
|
+ result.check = Pass(Link);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// END OF VENDOR RESERVED AREA
|
||||||
|
//
|
||||||
|
//
|
||||||
|
--
|
||||||
|
2.34.1
|
Loading…
Reference in New Issue
Block a user