about summary refs log tree commit diff
path: root/library/stdarch
diff options
context:
space:
mode:
authorFolkert de Vries <folkert@folkertdev.nl>2025-07-10 20:09:46 +0200
committerFolkert de Vries <folkert@folkertdev.nl>2025-07-18 11:25:11 +0200
commit668fdbe41edba8bda2100a71fe412ab62322b8d5 (patch)
treeac944b8e6444ebc778cceb6a5eb3cb12faa8ef67 /library/stdarch
parentf694b583e6ffab5c1a2ebf7977ea937fdd15258a (diff)
downloadrust-668fdbe41edba8bda2100a71fe412ab62322b8d5.tar.gz
rust-668fdbe41edba8bda2100a71fe412ab62322b8d5.zip
pass the whole config to C compiler construction
Diffstat (limited to 'library/stdarch')
-rw-r--r--library/stdarch/Cargo.lock4
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/compile.rs45
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/mod.rs13
3 files changed, 31 insertions, 31 deletions
diff --git a/library/stdarch/Cargo.lock b/library/stdarch/Cargo.lock
index 122b3057b2f..f287ed6e3b7 100644
--- a/library/stdarch/Cargo.lock
+++ b/library/stdarch/Cargo.lock
@@ -90,9 +90,9 @@ checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
 
 [[package]]
 name = "cc"
-version = "1.2.29"
+version = "1.2.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362"
+checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
 dependencies = [
  "shlex",
 ]
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/compile.rs b/library/stdarch/crates/intrinsic-test/src/arm/compile.rs
index 79cd32dedc5..a90caf367ca 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/compile.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/compile.rs
@@ -1,23 +1,23 @@
+use crate::common::cli::ProcessedCli;
 use crate::common::compile_c::CompilationCommandBuilder;
 use crate::common::gen_c::compile_c_programs;
 
-pub fn compile_c_arm(
-    intrinsics_name_list: &[String],
-    compiler: &str,
-    target: &str,
-    cxx_toolchain_dir: Option<&str>,
-) -> bool {
+pub fn compile_c_arm(config: &ProcessedCli, intrinsics_name_list: &[String]) -> bool {
+    let Some(ref cpp_compiler) = config.cpp_compiler else {
+        return true;
+    };
+
     // -ffp-contract=off emulates Rust's approach of not fusing separate mul-add operations
     let mut command = CompilationCommandBuilder::new()
         .add_arch_flags(vec!["armv8.6-a", "crypto", "crc", "dotprod", "fp16"])
-        .set_compiler(compiler)
-        .set_target(target)
+        .set_compiler(cpp_compiler)
+        .set_target(&config.target)
         .set_opt_level("2")
-        .set_cxx_toolchain_dir(cxx_toolchain_dir)
+        .set_cxx_toolchain_dir(config.cxx_toolchain_dir.as_deref())
         .set_project_root("c_programs")
         .add_extra_flags(vec!["-ffp-contract=off", "-Wno-narrowing"]);
 
-    if !target.contains("v7") {
+    if !config.target.contains("v7") {
         command = command.add_arch_flags(vec!["faminmax", "lut", "sha3"]);
     }
 
@@ -30,22 +30,33 @@ pub fn compile_c_arm(
      * does not work as it gets caught up with `#include_next <stdlib.h>`
      * not existing...
      */
-    if target.contains("aarch64_be") {
-        command = command
-            .set_linker(
-                cxx_toolchain_dir.unwrap_or("").to_string() + "/bin/aarch64_be-none-linux-gnu-g++",
+    if config.target.contains("aarch64_be") {
+        let Some(ref cxx_toolchain_dir) = config.cxx_toolchain_dir else {
+            panic!(
+                "target `{}` must specify `cxx_toolchain_dir`",
+                config.target
             )
-            .set_include_paths(vec![
+        };
+
+        let linker = if let Some(ref linker) = config.linker {
+            linker.to_owned()
+        } else {
+            format!("{cxx_toolchain_dir}/bin/aarch64_be-none-linux-gnu-g++")
+        };
+
+        trace!("using linker: {linker}");
+
+        command = command.set_linker(linker).set_include_paths(vec![
                 "/include",
                 "/aarch64_be-none-linux-gnu/include",
                 "/aarch64_be-none-linux-gnu/include/c++/14.3.1",
                 "/aarch64_be-none-linux-gnu/include/c++/14.3.1/aarch64_be-none-linux-gnu",
                 "/aarch64_be-none-linux-gnu/include/c++/14.3.1/backward",
                 "/aarch64_be-none-linux-gnu/libc/usr/include",
-            ]);
+        ]);
     }
 
-    if !compiler.contains("clang") {
+    if !cpp_compiler.contains("clang") {
         command = command.add_extra_flag("-flax-vector-conversions");
     }
 
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
index 1a66ed4268d..a2535dc6a7a 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs
@@ -11,7 +11,6 @@ use crate::common::gen_rust::compile_rust_programs;
 use crate::common::intrinsic::{Intrinsic, IntrinsicDefinition};
 use crate::common::intrinsic_helpers::TypeKind;
 use crate::common::write_file::{write_c_testfiles, write_rust_testfiles};
-use compile::compile_c_arm;
 use config::{AARCH_CONFIGURATIONS, F16_FORMATTING_DEF, POLY128_OSTREAM_DEF, build_notices};
 use intrinsic::ArmIntrinsicType;
 use json_parser::get_neon_intrinsics;
@@ -51,9 +50,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
     }
 
     fn build_c_file(&self) -> bool {
-        let compiler = self.cli_options.cpp_compiler.as_deref();
         let target = &self.cli_options.target;
-        let cxx_toolchain_dir = self.cli_options.cxx_toolchain_dir.as_deref();
         let c_target = "aarch64";
 
         let intrinsics_name_list = write_c_testfiles(
@@ -69,15 +66,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
             &[POLY128_OSTREAM_DEF],
         );
 
-        match compiler {
-            None => true,
-            Some(compiler) => compile_c_arm(
-                intrinsics_name_list.as_slice(),
-                compiler,
-                target,
-                cxx_toolchain_dir,
-            ),
-        }
+        compile::compile_c_arm(&self.cli_options, intrinsics_name_list.as_slice())
     }
 
     fn build_rust_file(&self) -> bool {