Skip to content

Commit 8bdb75e

Browse files
committed
Add testing for Arm64EC Windows
1 parent 5e70630 commit 8bdb75e

File tree

5 files changed

+42
-6
lines changed

5 files changed

+42
-6
lines changed

.github/workflows/main.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,15 @@ jobs:
105105
os: windows-11-arm
106106
rust: stable
107107
target: aarch64-pc-windows-msvc
108+
- build: cross-windows-arm64ec
109+
os: windows-latest
110+
rust: beta
111+
target: arm64ec-pc-windows-msvc
112+
no_run: --no-run
113+
- build: windows-arm64ec
114+
os: windows-11-arm
115+
rust: beta
116+
target: arm64ec-pc-windows-msvc
108117
- build: cross-win64
109118
os: windows-11-arm
110119
rust: stable

dev-tools/cc-test/build.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ fn main() {
134134
.arg("/fsrc/NMakefile")
135135
.env("OUT_DIR", &out)
136136
.env("CC_FRONTEND", cc_frontend)
137+
.env(
138+
"EXTRA_CFLAGS",
139+
if arch == "arm64ec" { "-arm64EC" } else { "" },
140+
)
141+
.env(
142+
"EXTRA_LIBFLAGS",
143+
if arch == "arm64ec" {
144+
"-machine:arm64ec"
145+
} else {
146+
""
147+
},
148+
)
137149
.status()
138150
.unwrap();
139151
assert!(status.success());

dev-tools/cc-test/src/NMakefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
all: $(OUT_DIR)/msvc.lib $(OUT_DIR)/msvc.exe
22

33
!IF "$(CC_FRONTEND)" == "MSVC"
4-
EXTRA_CFLAGS=-nologo
4+
EXTRA_CFLAGS=$(EXTRA_CFLAGS) -nologo
55
CFLAG_OUTPUT=-Fo
66
!ELSE
77
CFLAG_OUTPUT=-o
88
!ENDIF
99

1010
$(OUT_DIR)/msvc.lib: $(OUT_DIR)/msvc.o
11-
lib -nologo -out:$(OUT_DIR)/msvc.lib $(OUT_DIR)/msvc.o
11+
lib $(EXTRA_LIBFLAGS) -nologo -out:$(OUT_DIR)/msvc.lib $(OUT_DIR)/msvc.o
1212

1313
$(OUT_DIR)/msvc.o: src/msvc.c
1414
$(CC) $(EXTRA_CFLAGS) -c $(CFLAG_OUTPUT)$@ src/msvc.c -MD

dev-tools/cc-test/src/arm64ec.asm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
AREA |.text|, CODE, READONLY
2+
GLOBAL |#asm|
3+
ALIGN 4
4+
|#asm| PROC
5+
mov w0, #7
6+
ret
7+
ENDP
8+
END

src/lib.rs

Lines changed: 11 additions & 4 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" | "arm64ec" | "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" | "arm64ec" | "arm");
1847+
let is_arm = is_arm(&target);
18491848
command_add_output_file(
18501849
&mut cmd,
18511850
&obj.dst,
@@ -2607,11 +2606,15 @@ impl Build {
26072606
for directory in self.include_directories.iter() {
26082607
cmd.arg("-I").arg(&**directory);
26092608
}
2610-
if matches!(target.arch, "aarch64" | "arm64ec" | "arm") {
2609+
if is_arm(&target) {
26112610
if self.get_debug() {
26122611
cmd.arg("-g");
26132612
}
26142613

2614+
if target.arch == "arm64ec" {
2615+
cmd.args(["-machine", "ARM64EC"]);
2616+
}
2617+
26152618
for (key, value) in self.definitions.iter() {
26162619
cmd.arg("-PreDefine");
26172620
if let Some(ref value) = *value {
@@ -4301,6 +4304,10 @@ fn map_darwin_target_from_rust_to_compiler_architecture<'a>(target: &TargetInfo<
43014304
}
43024305
}
43034306

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

0 commit comments

Comments
 (0)