about summary refs log tree commit diff
path: root/library/stdarch/crates/intrinsic-test/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'library/stdarch/crates/intrinsic-test/src/common')
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/cli.rs57
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/mod.rs4
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs15
3 files changed, 65 insertions, 11 deletions
diff --git a/library/stdarch/crates/intrinsic-test/src/common/cli.rs b/library/stdarch/crates/intrinsic-test/src/common/cli.rs
index 92f0e86e81e..baa21961e16 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/cli.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/cli.rs
@@ -1,3 +1,4 @@
+use itertools::Itertools;
 use std::path::PathBuf;
 
 /// Intrinsic test tool
@@ -42,3 +43,59 @@ pub struct Cli {
     #[arg(long)]
     pub cxx_toolchain_dir: Option<String>,
 }
+
+pub struct ProcessedCli {
+    pub filename: PathBuf,
+    pub toolchain: Option<String>,
+    pub cpp_compiler: Option<String>,
+    pub c_runner: String,
+    pub target: String,
+    pub linker: Option<String>,
+    pub cxx_toolchain_dir: Option<String>,
+    pub skip: Vec<String>,
+}
+
+impl ProcessedCli {
+    pub fn new(cli_options: Cli) -> Self {
+        let filename = cli_options.input;
+        let c_runner = cli_options.runner.unwrap_or_default();
+        let target = cli_options.target;
+        let linker = cli_options.linker;
+        let cxx_toolchain_dir = cli_options.cxx_toolchain_dir;
+
+        let skip = if let Some(filename) = cli_options.skip {
+            let data = std::fs::read_to_string(&filename).expect("Failed to open file");
+            data.lines()
+                .map(str::trim)
+                .filter(|s| !s.contains('#'))
+                .map(String::from)
+                .collect_vec()
+        } else {
+            Default::default()
+        };
+
+        let (toolchain, cpp_compiler) = if cli_options.generate_only {
+            (None, None)
+        } else {
+            (
+                Some(
+                    cli_options
+                        .toolchain
+                        .map_or_else(String::new, |t| format!("+{t}")),
+                ),
+                Some(cli_options.cppcompiler),
+            )
+        };
+
+        Self {
+            toolchain: toolchain,
+            cpp_compiler: cpp_compiler,
+            c_runner: c_runner,
+            target: target,
+            linker: linker,
+            cxx_toolchain_dir: cxx_toolchain_dir,
+            skip: skip,
+            filename: filename,
+        }
+    }
+}
diff --git a/library/stdarch/crates/intrinsic-test/src/common/mod.rs b/library/stdarch/crates/intrinsic-test/src/common/mod.rs
index 4e378c9c6df..098451d81b4 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/mod.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/mod.rs
@@ -1,4 +1,4 @@
-pub mod types;
+pub mod cli;
 pub mod supporting_test;
+pub mod types;
 pub mod values;
-pub mod cli;
diff --git a/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs b/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs
index 37a63c7a557..92d71d89df2 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/supporting_test.rs
@@ -1,13 +1,10 @@
+use crate::common::cli::ProcessedCli;
+
 /// Architectures must support this trait
 /// to be successfully tested.
 pub trait SupportedArchitectureTest {
-    fn write_c_file(filename: &str);
-
-    fn write_rust_file(filename: &str);
-
-    fn build_c_file(filename: &str);
-
-    fn build_rust_file(filename: &str);
-
-    fn read_intrinsic_source_file(filename: &str);
+    fn create(cli_options: ProcessedCli) -> Self;
+    fn build_c_file(&self) -> bool;
+    fn build_rust_file(&self) -> bool;
+    fn compare_outputs(&self) -> bool;
 }