about summary refs log tree commit diff
path: root/library/stdarch
diff options
context:
space:
mode:
authorFolkert de Vries <folkert@folkertdev.nl>2025-09-07 13:16:40 +0200
committerFolkert de Vries <folkert@folkertdev.nl>2025-09-07 14:11:01 +0200
commit916424f38d1b3d763cf19c0392799d7208482573 (patch)
treec214e99aa271f5fba00848a69987979d47dd7c81 /library/stdarch
parent6ab097b2453c5247f8d78c7ed5dfd4184b9a1c1d (diff)
downloadrust-916424f38d1b3d763cf19c0392799d7208482573.tar.gz
rust-916424f38d1b3d763cf19c0392799d7208482573.zip
move more constants into `SupportedArchitectureTest`
Diffstat (limited to 'library/stdarch')
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/config.rs13
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/mod.rs52
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/mod.rs16
3 files changed, 53 insertions, 28 deletions
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/config.rs b/library/stdarch/crates/intrinsic-test/src/arm/config.rs
index 9a7b37253d1..beaca621378 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/config.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/config.rs
@@ -1,12 +1,7 @@
-pub fn build_notices(line_prefix: &str) -> String {
-    format!(
-        "\
-{line_prefix}This is a transient test file, not intended for distribution. Some aspects of the
-{line_prefix}test are derived from a JSON specification, published under the same license as the
-{line_prefix}`intrinsic-test` crate.\n
-"
-    )
-}
+pub const NOTICE: &str = "\
+// This is a transient test file, not intended for distribution. Some aspects of the
+// test are derived from a JSON specification, published under the same license as the
+// `intrinsic-test` crate.\n";
 
 pub const POLY128_OSTREAM_DEF: &str = r#"std::ostream& operator<<(std::ostream& os, poly128_t value) {
     std::stringstream temp;
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
index 60e1ebe5f33..82dc5001adf 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
@@ -5,11 +5,12 @@ mod intrinsic;
 mod json_parser;
 mod types;
 
-use std::fs::{self, File};
+use std::fs::File;
 
 use rayon::prelude::*;
 
 use crate::common::cli::ProcessedCli;
+use crate::common::compile_c::CppCompilation;
 use crate::common::gen_c::{write_main_cpp, write_mod_cpp};
 use crate::common::gen_rust::{
     compile_rust_programs, write_bin_cargo_toml, write_lib_cargo_toml, write_lib_rs, write_main_rs,
@@ -17,7 +18,6 @@ use crate::common::gen_rust::{
 use crate::common::intrinsic::Intrinsic;
 use crate::common::intrinsic_helpers::TypeKind;
 use crate::common::{SupportedArchitectureTest, chunk_info};
-use config::{AARCH_CONFIGURATIONS, F16_FORMATTING_DEF, POLY128_OSTREAM_DEF, build_notices};
 use intrinsic::ArmIntrinsicType;
 use json_parser::get_neon_intrinsics;
 
@@ -65,24 +65,40 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
         }
     }
 
-    const PLATFORM_HEADERS: &[&str] = &["arm_neon.h", "arm_acle.h", "arm_fp16.h"];
+    const NOTICE: &str = config::NOTICE;
+
+    const PLATFORM_C_HEADERS: &[&str] = &["arm_neon.h", "arm_acle.h", "arm_fp16.h"];
+    const PLATFORM_C_DEFINITIONS: &str = config::POLY128_OSTREAM_DEF;
+
+    const PLATFORM_RUST_DEFINITIONS: &str = config::F16_FORMATTING_DEF;
+    const PLATFORM_RUST_CFGS: &str = config::AARCH_CONFIGURATIONS;
+
+    fn cpp_compilation(&self) -> Option<CppCompilation> {
+        compile::build_cpp_compilation(&self.cli_options)
+    }
 
     fn build_c_file(&self) -> bool {
         let c_target = "aarch64";
 
-        let (chunk_size, chunk_count) = chunk_info(self.intrinsics.len());
+        let (chunk_size, chunk_count) = chunk_info(self.intrinsics().len());
 
-        let cpp_compiler_wrapped = compile::build_cpp_compilation(&self.cli_options);
+        let cpp_compiler_wrapped = self.cpp_compilation();
 
-        let notice = &build_notices("// ");
-        fs::create_dir_all("c_programs").unwrap();
-        self.intrinsics
+        std::fs::create_dir_all("c_programs").unwrap();
+        self.intrinsics()
             .par_chunks(chunk_size)
             .enumerate()
             .map(|(i, chunk)| {
                 let c_filename = format!("c_programs/mod_{i}.cpp");
                 let mut file = File::create(&c_filename).unwrap();
-                write_mod_cpp(&mut file, notice, c_target, Self::PLATFORM_HEADERS, chunk).unwrap();
+                write_mod_cpp(
+                    &mut file,
+                    Self::NOTICE,
+                    c_target,
+                    Self::PLATFORM_C_HEADERS,
+                    chunk,
+                )
+                .unwrap();
 
                 // compile this cpp file into a .o file.
                 //
@@ -103,8 +119,8 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
         write_main_cpp(
             &mut file,
             c_target,
-            POLY128_OSTREAM_DEF,
-            self.intrinsics.iter().map(|i| i.name.as_str()),
+            Self::PLATFORM_C_DEFINITIONS,
+            self.intrinsics().iter().map(|i| i.name.as_str()),
         )
         .unwrap();
 
@@ -149,7 +165,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
         write_main_rs(
             &mut main_rs,
             chunk_count,
-            AARCH_CONFIGURATIONS,
+            Self::PLATFORM_RUST_CFGS,
             "",
             self.intrinsics.iter().map(|i| i.name.as_str()),
         )
@@ -159,7 +175,6 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
         let toolchain = self.cli_options.toolchain.as_deref();
         let linker = self.cli_options.linker.as_deref();
 
-        let notice = &build_notices("// ");
         self.intrinsics
             .par_chunks(chunk_size)
             .enumerate()
@@ -170,9 +185,14 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
                 trace!("generating `{rust_filename}`");
                 let mut file = File::create(rust_filename)?;
 
-                let cfg = AARCH_CONFIGURATIONS;
-                let definitions = F16_FORMATTING_DEF;
-                write_lib_rs(&mut file, architecture, notice, cfg, definitions, chunk)?;
+                write_lib_rs(
+                    &mut file,
+                    architecture,
+                    Self::NOTICE,
+                    Self::PLATFORM_RUST_CFGS,
+                    Self::PLATFORM_RUST_DEFINITIONS,
+                    chunk,
+                )?;
 
                 let toml_filename = format!("rust_programs/mod_{i}/Cargo.toml");
                 trace!("generating `{toml_filename}`");
diff --git a/library/stdarch/crates/intrinsic-test/src/common/mod.rs b/library/stdarch/crates/intrinsic-test/src/common/mod.rs
index be08aaecaba..13e6c9fe9e2 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/mod.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/mod.rs
@@ -1,6 +1,8 @@
 use cli::ProcessedCli;
 
-use crate::common::{intrinsic::Intrinsic, intrinsic_helpers::IntrinsicTypeDefinition};
+use crate::common::{
+    compile_c::CppCompilation, intrinsic::Intrinsic, intrinsic_helpers::IntrinsicTypeDefinition,
+};
 
 pub mod argument;
 pub mod cli;
@@ -17,14 +19,22 @@ pub mod values;
 /// Architectures must support this trait
 /// to be successfully tested.
 pub trait SupportedArchitectureTest {
-    type IntrinsicImpl: IntrinsicTypeDefinition;
+    type IntrinsicImpl: IntrinsicTypeDefinition + Sync;
 
     fn cli_options(&self) -> &ProcessedCli;
     fn intrinsics(&self) -> &[Intrinsic<Self::IntrinsicImpl>];
 
     fn create(cli_options: ProcessedCli) -> Self;
 
-    const PLATFORM_HEADERS: &[&str];
+    const NOTICE: &str;
+
+    const PLATFORM_C_HEADERS: &[&str];
+    const PLATFORM_C_DEFINITIONS: &str;
+
+    const PLATFORM_RUST_CFGS: &str;
+    const PLATFORM_RUST_DEFINITIONS: &str;
+
+    fn cpp_compilation(&self) -> Option<CppCompilation>;
 
     fn build_c_file(&self) -> bool;
     fn build_rust_file(&self) -> bool;