Skip to content

Commit ca81dcc

Browse files
authored
[win][arm64ec] Fix finding assembler and setting is_arm for Arm64EC (#1511)
1 parent 94a7cc3 commit ca81dcc

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/lib.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,7 +1399,6 @@ impl Build {
13991399
}
14001400

14011401
let mut cmd = compiler.to_command();
1402-
let is_arm = matches!(target.arch, "aarch64" | "arm");
14031402
command_add_output_file(
14041403
&mut cmd,
14051404
&obj,
@@ -1410,7 +1409,7 @@ impl Build {
14101409
clang: compiler.is_like_clang(),
14111410
gnu: compiler.is_like_gnu(),
14121411
is_asm: false,
1413-
is_arm,
1412+
is_arm: is_arm(target),
14141413
},
14151414
);
14161415

@@ -1845,7 +1844,7 @@ impl Build {
18451844
}
18461845
cmd
18471846
};
1848-
let is_arm = matches!(target.arch, "aarch64" | "arm");
1847+
let is_arm = is_arm(&target);
18491848
command_add_output_file(
18501849
&mut cmd,
18511850
&obj.dst,
@@ -2594,14 +2593,11 @@ impl Build {
25942593

25952594
fn msvc_macro_assembler(&self) -> Result<Command, Error> {
25962595
let target = self.get_target()?;
2597-
let tool = if target.arch == "x86_64" {
2598-
"ml64.exe"
2599-
} else if target.arch == "arm" {
2600-
"armasm.exe"
2601-
} else if target.arch == "aarch64" {
2602-
"armasm64.exe"
2603-
} else {
2604-
"ml.exe"
2596+
let tool = match target.arch {
2597+
"x86_64" => "ml64.exe",
2598+
"arm" => "armasm.exe",
2599+
"aarch64" | "arm64ec" => "armasm64.exe",
2600+
_ => "ml.exe",
26052601
};
26062602
let mut cmd = self
26072603
.windows_registry_find(&target, tool)
@@ -2610,11 +2606,15 @@ impl Build {
26102606
for directory in self.include_directories.iter() {
26112607
cmd.arg("-I").arg(&**directory);
26122608
}
2613-
if target.arch == "aarch64" || target.arch == "arm" {
2609+
if is_arm(&target) {
26142610
if self.get_debug() {
26152611
cmd.arg("-g");
26162612
}
26172613

2614+
if target.arch == "arm64ec" {
2615+
cmd.args(["-machine", "ARM64EC"]);
2616+
}
2617+
26182618
for (key, value) in self.definitions.iter() {
26192619
cmd.arg("-PreDefine");
26202620
if let Some(ref value) = *value {
@@ -4304,6 +4304,10 @@ fn map_darwin_target_from_rust_to_compiler_architecture<'a>(target: &TargetInfo<
43044304
}
43054305
}
43064306

4307+
fn is_arm(target: &TargetInfo<'_>) -> bool {
4308+
matches!(target.arch, "aarch64" | "arm64ec" | "arm")
4309+
}
4310+
43074311
#[derive(Clone, Copy, PartialEq)]
43084312
enum AsmFileExt {
43094313
/// `.asm` files. On MSVC targets, we assume these should be passed to MASM

0 commit comments

Comments
 (0)