diff options
Diffstat (limited to 'library/stdarch/crates/intrinsic-test/src/common')
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; } |
