Skip to content

Commit 48f6c7e

Browse files
committed
pass the whole config to C compiler construction
1 parent 0f78e65 commit 48f6c7e

File tree

2 files changed

+35
-35
lines changed

2 files changed

+35
-35
lines changed

crates/intrinsic-test/src/arm/compile.rs

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1+
use crate::common::cli::ProcessedCli;
12
use crate::common::compile_c::CompilationCommandBuilder;
23
use crate::common::gen_c::compile_c_programs;
34

4-
pub fn compile_c_arm(
5-
intrinsics_name_list: &[String],
6-
compiler: &str,
7-
target: &str,
8-
cxx_toolchain_dir: Option<&str>,
9-
) -> bool {
5+
pub fn compile_c_arm(config: &ProcessedCli, intrinsics_name_list: &[String]) -> bool {
6+
let Some(ref cpp_compiler) = config.cpp_compiler else {
7+
return true;
8+
};
9+
1010
// -ffp-contract=off emulates Rust's approach of not fusing separate mul-add operations
1111
let mut command = CompilationCommandBuilder::new()
1212
.add_arch_flags(vec!["armv8.6-a", "crypto", "crc", "dotprod", "fp16"])
13-
.set_compiler(compiler)
14-
.set_target(target)
13+
.set_compiler(cpp_compiler)
14+
.set_target(&config.target)
1515
.set_opt_level("2")
16-
.set_cxx_toolchain_dir(cxx_toolchain_dir)
16+
.set_cxx_toolchain_dir(config.cxx_toolchain_dir.as_deref())
1717
.set_project_root("c_programs")
1818
.add_extra_flags(vec!["-ffp-contract=off", "-Wno-narrowing"]);
1919

20-
if !target.contains("v7") {
20+
if !config.target.contains("v7") {
2121
command = command.add_arch_flags(vec!["faminmax", "lut", "sha3"]);
2222
}
2323

@@ -30,22 +30,33 @@ pub fn compile_c_arm(
3030
* does not work as it gets caught up with `#include_next <stdlib.h>`
3131
* not existing...
3232
*/
33-
if target.contains("aarch64_be") {
34-
command = command
35-
.set_linker(
36-
cxx_toolchain_dir.unwrap_or("").to_string() + "/bin/aarch64_be-none-linux-gnu-g++",
33+
if config.target.contains("aarch64_be") {
34+
let Some(ref cxx_toolchain_dir) = config.cxx_toolchain_dir else {
35+
panic!(
36+
"target `{}` must specify `cxx_toolchain_dir`",
37+
config.target
3738
)
38-
.set_include_paths(vec![
39-
"/include",
40-
"/aarch64_be-none-linux-gnu/include",
41-
"/aarch64_be-none-linux-gnu/include/c++/14.2.1",
42-
"/aarch64_be-none-linux-gnu/include/c++/14.2.1/aarch64_be-none-linux-gnu",
43-
"/aarch64_be-none-linux-gnu/include/c++/14.2.1/backward",
44-
"/aarch64_be-none-linux-gnu/libc/usr/include",
45-
]);
39+
};
40+
41+
let linker = if let Some(ref linker) = config.linker {
42+
linker.to_owned()
43+
} else {
44+
format!("{cxx_toolchain_dir}/bin/aarch64_be-none-linux-gnu-g++")
45+
};
46+
47+
trace!("using linker: {linker}");
48+
49+
command = command.set_linker(linker).set_include_paths(vec![
50+
"/include",
51+
"/aarch64_be-none-linux-gnu/include",
52+
"/aarch64_be-none-linux-gnu/include/c++/14.2.1",
53+
"/aarch64_be-none-linux-gnu/include/c++/14.2.1/aarch64_be-none-linux-gnu",
54+
"/aarch64_be-none-linux-gnu/include/c++/14.2.1/backward",
55+
"/aarch64_be-none-linux-gnu/libc/usr/include",
56+
]);
4657
}
4758

48-
if !compiler.contains("clang") {
59+
if !cpp_compiler.contains("clang") {
4960
command = command.add_extra_flag("-flax-vector-conversions");
5061
}
5162

crates/intrinsic-test/src/arm/mod.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::common::gen_rust::compile_rust_programs;
1111
use crate::common::intrinsic::{Intrinsic, IntrinsicDefinition};
1212
use crate::common::intrinsic_helpers::TypeKind;
1313
use crate::common::write_file::{write_c_testfiles, write_rust_testfiles};
14-
use compile::compile_c_arm;
1514
use config::{AARCH_CONFIGURATIONS, F16_FORMATTING_DEF, POLY128_OSTREAM_DEF, build_notices};
1615
use intrinsic::ArmIntrinsicType;
1716
use json_parser::get_neon_intrinsics;
@@ -51,9 +50,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
5150
}
5251

5352
fn build_c_file(&self) -> bool {
54-
let compiler = self.cli_options.cpp_compiler.as_deref();
5553
let target = &self.cli_options.target;
56-
let cxx_toolchain_dir = self.cli_options.cxx_toolchain_dir.as_deref();
5754
let c_target = "aarch64";
5855

5956
let intrinsics_name_list = write_c_testfiles(
@@ -69,15 +66,7 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
6966
&[POLY128_OSTREAM_DEF],
7067
);
7168

72-
match compiler {
73-
None => true,
74-
Some(compiler) => compile_c_arm(
75-
intrinsics_name_list.as_slice(),
76-
compiler,
77-
target,
78-
cxx_toolchain_dir,
79-
),
80-
}
69+
compile::compile_c_arm(&self.cli_options, intrinsics_name_list.as_slice())
8170
}
8271

8372
fn build_rust_file(&self) -> bool {

0 commit comments

Comments
 (0)