about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-04-19 19:30:48 +0200
committerGitHub <noreply@github.com>2024-04-19 19:30:48 +0200
commitb1eee427a0bc0459ec5176b71ff71797727a1794 (patch)
tree481d88ed25d35c1e3b15422bf689ac7403712640 /tests
parent6c4657c086a387719d5fcdc9823ac20c284cdfe3 (diff)
parentca945e9ed83a76921ba29d27d4640afe0e278a17 (diff)
downloadrust-b1eee427a0bc0459ec5176b71ff71797727a1794.tar.gz
rust-b1eee427a0bc0459ec5176b71ff71797727a1794.zip
Rollup merge of #123729 - jieyouxu:rmake-refactor-2, r=oli-obk
run-make: refactor out command wrappers for `clang` and `llvm-readobj`

This PR is rebased on top of https://github.com/rust-lang/rust/pull/123699.

This PR is a follow up to https://github.com/rust-lang/rust/pull/123612 to refactor out command wrappers into the support library for `llvm-readobj` and `clang`.

r? ghost
Diffstat (limited to 'tests')
-rw-r--r--tests/run-make/cross-lang-lto-riscv-abi/rmake.rs61
1 files changed, 19 insertions, 42 deletions
diff --git a/tests/run-make/cross-lang-lto-riscv-abi/rmake.rs b/tests/run-make/cross-lang-lto-riscv-abi/rmake.rs
index 2f13cf17169..b534a99f8cf 100644
--- a/tests/run-make/cross-lang-lto-riscv-abi/rmake.rs
+++ b/tests/run-make/cross-lang-lto-riscv-abi/rmake.rs
@@ -1,10 +1,10 @@
 //! Make sure that cross-language LTO works on riscv targets,
-//! which requires extra abi metadata to be emitted.
+//! which requires extra `target-abi` metadata to be emitted.
 //@ needs-matching-clang
 //@ needs-llvm-components riscv
 extern crate run_make_support;
 
-use run_make_support::{bin_name, rustc, tmp_dir};
+use run_make_support::{bin_name, clang, llvm_readobj, rustc, tmp_dir};
 use std::{
     env,
     path::PathBuf,
@@ -12,13 +12,6 @@ use std::{
     str,
 };
 
-fn handle_failed_output(output: Output) {
-    eprintln!("output status: `{}`", output.status);
-    eprintln!("=== STDOUT ===\n{}\n\n", String::from_utf8(output.stdout).unwrap());
-    eprintln!("=== STDERR ===\n{}\n\n", String::from_utf8(output.stderr).unwrap());
-    std::process::exit(1)
-}
-
 fn check_target(target: &str, clang_target: &str, carch: &str, is_double_float: bool) {
     eprintln!("Checking target {target}");
     // Rust part
@@ -30,40 +23,24 @@ fn check_target(target: &str, clang_target: &str, carch: &str, is_double_float:
         .linker_plugin_lto("on")
         .run();
     // C part
-    let clang = env::var("CLANG").unwrap();
-    let mut cmd = Command::new(clang);
-    let executable = tmp_dir().join("riscv-xlto");
-    cmd.arg("-target")
-        .arg(clang_target)
-        .arg(format!("-march={carch}"))
-        .arg(format!("-flto=thin"))
-        .arg(format!("-fuse-ld=lld"))
-        .arg("-nostdlib")
-        .arg("-o")
-        .arg(&executable)
-        .arg("cstart.c")
-        .arg(tmp_dir().join("libriscv_xlto.rlib"));
-    eprintln!("{cmd:?}");
-    let output = cmd.output().unwrap();
-    if !output.status.success() {
-        handle_failed_output(output);
-    }
+    clang()
+        .target(clang_target)
+        .arch(carch)
+        .lto("thin")
+        .use_ld("lld")
+        .no_stdlib()
+        .out_exe("riscv-xlto")
+        .input("cstart.c")
+        .input(tmp_dir().join("libriscv_xlto.rlib"))
+        .run();
+
     // Check that the built binary has correct float abi
-    let llvm_readobj =
-        PathBuf::from(env::var("LLVM_BIN_DIR").unwrap()).join(bin_name("llvm-readobj"));
-    let mut cmd = Command::new(llvm_readobj);
-    cmd.arg("--file-header").arg(executable);
-    eprintln!("{cmd:?}");
-    let output = cmd.output().unwrap();
-    if output.status.success() {
-        assert!(
-            !(is_double_float
-                ^ dbg!(str::from_utf8(&output.stdout).unwrap())
-                    .contains("EF_RISCV_FLOAT_ABI_DOUBLE"))
-        )
-    } else {
-        handle_failed_output(output);
-    }
+    let executable = tmp_dir().join(bin_name("riscv-xlto"));
+    let output = llvm_readobj().input(&executable).file_header().run();
+    let stdout = String::from_utf8_lossy(&output.stdout);
+    eprintln!("obj:\n{}", stdout);
+
+    assert!(!(is_double_float ^ stdout.contains("EF_RISCV_FLOAT_ABI_DOUBLE")));
 }
 
 fn main() {