diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-07-10 20:09:46 +0200 |
|---|---|---|
| committer | Folkert de Vries <folkert@folkertdev.nl> | 2025-07-18 11:25:11 +0200 |
| commit | 668fdbe41edba8bda2100a71fe412ab62322b8d5 (patch) | |
| tree | ac944b8e6444ebc778cceb6a5eb3cb12faa8ef67 /library/stdarch | |
| parent | f694b583e6ffab5c1a2ebf7977ea937fdd15258a (diff) | |
| download | rust-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.lock | 4 | ||||
| -rw-r--r-- | library/stdarch/crates/intrinsic-test/src/arm/compile.rs | 45 | ||||
| -rw-r--r-- | library/stdarch/crates/intrinsic-test/src/arm/mod.rs | 13 |
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 { |
