Skip to content

Commit 63e3ca9

Browse files
committed
run rust programs with the runner
1 parent 11c3b93 commit 63e3ca9

File tree

6 files changed

+90
-95
lines changed

6 files changed

+90
-95
lines changed

Cargo.lock

Lines changed: 21 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/intrinsic-test/src/arm/config.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ pub const AARCH_CONFIGURATIONS: &str = r#"
114114
#![cfg_attr(any(target_arch = "aarch64", target_arch = "arm64ec"), feature(stdarch_neon_fcma))]
115115
#![cfg_attr(any(target_arch = "aarch64", target_arch = "arm64ec"), feature(stdarch_neon_dotprod))]
116116
#![cfg_attr(any(target_arch = "aarch64", target_arch = "arm64ec"), feature(stdarch_neon_i8mm))]
117-
#![cfg_attr(any(target_arch = "aarch64", target_arch = "arm64ec"), feature(stdarch_neon_sha3))]
118117
#![cfg_attr(any(target_arch = "aarch64", target_arch = "arm64ec"), feature(stdarch_neon_sm4))]
119118
#![cfg_attr(any(target_arch = "aarch64", target_arch = "arm64ec"), feature(stdarch_neon_ftts))]
120119
#![feature(fmt_helpers_for_derive)]

crates/intrinsic-test/src/arm/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
104104
}
105105

106106
fn compare_outputs(&self) -> bool {
107-
if let Some(ref toolchain) = self.cli_options.toolchain {
107+
if self.cli_options.toolchain.is_some() {
108108
let intrinsics_name_list = self
109109
.intrinsics
110110
.iter()
@@ -113,8 +113,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
113113

114114
compare_outputs(
115115
&intrinsics_name_list,
116-
toolchain,
117-
&self.cli_options.c_runner,
116+
&self.cli_options.runner,
118117
&self.cli_options.target,
119118
)
120119
} else {

crates/intrinsic-test/src/common/cli.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ pub struct ProcessedCli {
6060
pub filename: PathBuf,
6161
pub toolchain: Option<String>,
6262
pub cpp_compiler: Option<String>,
63-
pub c_runner: String,
63+
pub runner: String,
6464
pub target: String,
6565
pub linker: Option<String>,
6666
pub cxx_toolchain_dir: Option<String>,
@@ -70,7 +70,7 @@ pub struct ProcessedCli {
7070
impl ProcessedCli {
7171
pub fn new(cli_options: Cli) -> Self {
7272
let filename = cli_options.input;
73-
let c_runner = cli_options.runner.unwrap_or_default();
73+
let runner = cli_options.runner.unwrap_or_default();
7474
let target = cli_options.target;
7575
let linker = cli_options.linker;
7676
let cxx_toolchain_dir = cli_options.cxx_toolchain_dir;
@@ -102,7 +102,7 @@ impl ProcessedCli {
102102
Self {
103103
toolchain,
104104
cpp_compiler,
105-
c_runner,
105+
runner,
106106
target,
107107
linker,
108108
cxx_toolchain_dir,

crates/intrinsic-test/src/common/compare.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,24 @@ use super::cli::FailureReason;
22
use rayon::prelude::*;
33
use std::process::Command;
44

5-
pub fn compare_outputs(
6-
intrinsic_name_list: &Vec<String>,
7-
toolchain: &str,
8-
runner: &str,
9-
target: &str,
10-
) -> bool {
5+
pub fn compare_outputs(intrinsic_name_list: &Vec<String>, runner: &str, target: &str) -> bool {
6+
fn runner_command(runner: &str) -> Command {
7+
let mut it = runner.split_whitespace();
8+
let mut cmd = Command::new(it.next().unwrap());
9+
cmd.args(it);
10+
11+
cmd
12+
}
13+
1114
let intrinsics = intrinsic_name_list
1215
.par_iter()
1316
.filter_map(|intrinsic_name| {
14-
let c = Command::new("sh")
15-
.arg("-c")
16-
.arg(format!("{runner} ./c_programs/{intrinsic_name}"))
17+
let c = runner_command(runner)
18+
.arg(format!("./c_programs/{intrinsic_name}"))
1719
.output();
1820

19-
let rust = Command::new("sh")
20-
.current_dir("rust_programs")
21-
.arg("-c")
22-
.arg(format!(
23-
"cargo {toolchain} run --target {target} --bin {intrinsic_name} --release",
24-
))
21+
let rust = runner_command(runner)
22+
.arg(format!("target/{target}/release/{intrinsic_name}"))
2523
.env("RUSTFLAGS", "-Cdebuginfo=0")
2624
.output();
2725

@@ -42,8 +40,8 @@ pub fn compare_outputs(
4240
if !rust.status.success() {
4341
error!(
4442
"Failed to run Rust program for intrinsic {intrinsic_name}\nstdout: {stdout}\nstderr: {stderr}",
45-
stdout = std::str::from_utf8(&rust.stdout).unwrap_or(""),
46-
stderr = std::str::from_utf8(&rust.stderr).unwrap_or(""),
43+
stdout = String::from_utf8_lossy(&rust.stdout),
44+
stderr = String::from_utf8_lossy(&rust.stderr),
4745
);
4846
return Some(FailureReason::RunRust(intrinsic_name.clone()));
4947
}

crates/intrinsic-test/src/common/gen_rust.rs

Lines changed: 49 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use itertools::Itertools;
22
use rayon::prelude::*;
33
use std::collections::BTreeMap;
44
use std::fs::File;
5-
use std::io::Write;
65
use std::process::Command;
76

87
use super::argument::Argument;
@@ -23,8 +22,8 @@ pub fn format_rust_main_template(
2322
) -> String {
2423
format!(
2524
r#"{notices}#![feature(simd_ffi)]
26-
#![feature(link_llvm_intrinsics)]
2725
#![feature(f16)]
26+
#![allow(unused)]
2827
{configurations}
2928
{definitions}
3029
@@ -38,75 +37,75 @@ fn main() {{
3837
)
3938
}
4039

40+
fn write_cargo_toml(w: &mut impl std::io::Write, binaries: &[String]) -> std::io::Result<()> {
41+
writeln!(
42+
w,
43+
concat!(
44+
"[package]\n",
45+
"name = \"intrinsic-test-programs\"\n",
46+
"version = \"{version}\"\n",
47+
"authors = [{authors}]\n",
48+
"license = \"{license}\"\n",
49+
"edition = \"2018\"\n",
50+
"[workspace]\n",
51+
"[dependencies]\n",
52+
"core_arch = {{ path = \"../crates/core_arch\" }}",
53+
),
54+
version = env!("CARGO_PKG_VERSION"),
55+
authors = env!("CARGO_PKG_AUTHORS")
56+
.split(":")
57+
.format_with(", ", |author, fmt| fmt(&format_args!("\"{author}\""))),
58+
license = env!("CARGO_PKG_LICENSE"),
59+
)?;
60+
61+
for binary in binaries {
62+
writeln!(
63+
w,
64+
concat!(
65+
"[[bin]]\n",
66+
"name = \"{binary}\"\n",
67+
"path = \"{binary}/main.rs\"\n",
68+
),
69+
binary = binary,
70+
)?;
71+
}
72+
73+
Ok(())
74+
}
75+
4176
pub fn compile_rust_programs(
4277
binaries: Vec<String>,
4378
toolchain: Option<&str>,
4479
target: &str,
4580
linker: Option<&str>,
4681
) -> bool {
4782
let mut cargo = File::create("rust_programs/Cargo.toml").unwrap();
48-
cargo
49-
.write_all(
50-
format!(
51-
r#"[package]
52-
name = "intrinsic-test-programs"
53-
version = "{version}"
54-
authors = [{authors}]
55-
license = "{license}"
56-
edition = "2018"
57-
[workspace]
58-
[dependencies]
59-
core_arch = {{ path = "../crates/core_arch" }}
60-
{binaries}"#,
61-
version = env!("CARGO_PKG_VERSION"),
62-
authors = env!("CARGO_PKG_AUTHORS")
63-
.split(":")
64-
.format_with(", ", |author, fmt| fmt(&format_args!("\"{author}\""))),
65-
license = env!("CARGO_PKG_LICENSE"),
66-
binaries = binaries
67-
.iter()
68-
.map(|binary| {
69-
format!(
70-
r#"[[bin]]
71-
name = "{binary}"
72-
path = "{binary}/main.rs""#,
73-
)
74-
})
75-
.collect::<Vec<_>>()
76-
.join("\n")
77-
)
78-
.into_bytes()
79-
.as_slice(),
80-
)
81-
.unwrap();
82-
83-
let toolchain = match toolchain {
84-
None => return true,
85-
Some(t) => t,
86-
};
83+
write_cargo_toml(&mut cargo, &binaries).unwrap();
8784

8885
/* If there has been a linker explicitly set from the command line then
8986
* we want to set it via setting it in the RUSTFLAGS*/
9087

91-
let cargo_command = format!("cargo {toolchain} build --target {target} --release");
88+
let mut cargo_command = Command::new("cargo");
89+
cargo_command.current_dir("rust_programs");
9290

93-
let mut command = Command::new("sh");
94-
command
95-
.current_dir("rust_programs")
96-
.arg("-c")
97-
.arg(cargo_command);
91+
if let Some(toolchain) = toolchain {
92+
if !toolchain.is_empty() {
93+
cargo_command.arg(toolchain);
94+
}
95+
}
96+
cargo_command.args(["build", "--target", target, "--release"]);
9897

9998
let mut rust_flags = "-Cdebuginfo=0".to_string();
10099
if let Some(linker) = linker {
101100
rust_flags.push_str(" -C linker=");
102101
rust_flags.push_str(linker);
103102
rust_flags.push_str(" -C link-args=-static");
104103

105-
command.env("CPPFLAGS", "-fuse-ld=lld");
104+
cargo_command.env("CPPFLAGS", "-fuse-ld=lld");
106105
}
107106

108-
command.env("RUSTFLAGS", rust_flags);
109-
let output = command.output();
107+
cargo_command.env("RUSTFLAGS", rust_flags);
108+
let output = cargo_command.output();
110109

111110
if let Ok(output) = output {
112111
if output.status.success() {

0 commit comments

Comments
 (0)