From 761e939c2688ed8cf8ab674b9a03db8cd6ccba8c Mon Sep 17 00:00:00 2001
From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
Date: Thu, 25 Dec 2025 20:33:00 -0800
Subject: [PATCH 1/5] Add windows arm comp
Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
---
.github/workflows/build.yml | 2 ++
.../src/main/cpp/toolchain/aarch64-windows-clang.cmake | 5 +++++
webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake | 4 ++++
3 files changed, 11 insertions(+)
create mode 100644 webrtc-jni/src/main/cpp/toolchain/aarch64-windows-clang.cmake
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 03a2c2b0..a7e3ede5 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -27,6 +27,8 @@ jobs:
platform:
- name: windows_x86_64
runs-on: windows-2022
+ - name: windows-aarch64
+ runs-on: windows-2022
java: [17]
runs-on: ${{ matrix.platform.runs-on }}
steps:
diff --git a/webrtc-jni/src/main/cpp/toolchain/aarch64-windows-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/aarch64-windows-clang.cmake
new file mode 100644
index 00000000..2a198f77
--- /dev/null
+++ b/webrtc-jni/src/main/cpp/toolchain/aarch64-windows-clang.cmake
@@ -0,0 +1,5 @@
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(TARGET_CPU "arm64")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT /EHsc -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE")
\ No newline at end of file
diff --git a/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake b/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake
index 28253095..3d079b46 100644
--- a/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake
+++ b/webrtc-jni/src/main/cpp/toolchain/x86_64-windows-clang.cmake
@@ -1 +1,5 @@
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR x86_64)
+set(TARGET_CPU "x64")
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT /EHsc -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE")
From 803ac7958598d003b047ec97a001ec4af644abc7 Mon Sep 17 00:00:00 2001
From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
Date: Thu, 25 Dec 2025 21:36:58 -0800
Subject: [PATCH 2/5] Fix windows compile
Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
---
webrtc-jni/src/main/cpp/CMakeLists.txt | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/webrtc-jni/src/main/cpp/CMakeLists.txt b/webrtc-jni/src/main/cpp/CMakeLists.txt
index 5051ace4..d2df35b3 100644
--- a/webrtc-jni/src/main/cpp/CMakeLists.txt
+++ b/webrtc-jni/src/main/cpp/CMakeLists.txt
@@ -79,7 +79,14 @@ list(APPEND SOURCES
add_library(${PROJECT_NAME} SHARED ${SOURCES})
# Introduced since WebRTC branch 7204 and Clang 20.
-target_compile_options(${PROJECT_NAME} PRIVATE -Wno-nullability-completeness)
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ if(MSVC)
+ # clang-cl on Windows requires the /clang: prefix to avoid interpreting /W... as a warning level flag
+ target_compile_options(${PROJECT_NAME} PRIVATE /clang:-Wno-nullability-completeness)
+ else()
+ target_compile_options(${PROJECT_NAME} PRIVATE -Wno-nullability-completeness)
+ endif()
+endif()
target_include_directories(${PROJECT_NAME}
PRIVATE
From 6d9627090171eb0305ca9030ebe58b8c90aceb97 Mon Sep 17 00:00:00 2001
From: SendableMetatype <263203301+SendableMetatype@users.noreply.github.com>
Date: Thu, 13 Aug 2026 19:33:23 +0200
Subject: [PATCH 3/5] build: add the windows arm64 cross build to Maven and CI
The parent pom sets the classifier and the module name. The jni pom
selects the ARM64 generator platform, the multi config build type, and
the arm64 toolchain file. The new profiles have the same structure as
the linux cross profiles. They follow the host-activated windows
profiles in the pom, so their properties win on the amd64 cross
runner. The macos cross profile uses the same declaration order.
The CI lane has the same shape as the linux_arm lane: the cross build
skips the tests, because arm64 binaries cannot run on the x86_64
runner. The JNI shim keeps the ClangCL toolset of the x86_64 build, so
the ABI stays consistent with the clang-built engine.
---
.github/actions/build/action.yml | 6 +++++-
.github/workflows/build.yml | 2 +-
pom.xml | 7 +++++++
webrtc-jni/pom.xml | 8 ++++++++
4 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml
index 00ff34ba..a9f167c5 100644
--- a/.github/actions/build/action.yml
+++ b/.github/actions/build/action.yml
@@ -56,13 +56,15 @@ runs:
mvn package -DskipTests -Plinux-aarch32
elif [ "${{ inputs.platform-name }}" == "linux_arm64" ]; then
mvn package -DskipTests -Plinux-aarch64
+ elif [ "${{ inputs.platform-name }}" == "windows_arm64" ]; then
+ mvn package -DskipTests -Pwindows-aarch64
else
mvn package -DskipTests
fi
shell: bash
- name: Test
- if: ${{ inputs.platform-name != 'linux_arm' && inputs.platform-name != 'linux_arm64' }}
+ if: ${{ inputs.platform-name != 'linux_arm' && inputs.platform-name != 'linux_arm64' && inputs.platform-name != 'windows_arm64' }}
run: mvn -B jar:jar surefire:test
shell: bash
@@ -76,6 +78,8 @@ runs:
mvn deploy -DskipTests -Plinux-aarch32
elif [ "${{ inputs.platform-name }}" == "linux_arm64" ]; then
mvn deploy -DskipTests -Plinux-aarch64
+ elif [ "${{ inputs.platform-name }}" == "windows_arm64" ]; then
+ mvn deploy -DskipTests -Pwindows-aarch64
else
mvn deploy -DskipTests
fi
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a7e3ede5..926ebaeb 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -27,7 +27,7 @@ jobs:
platform:
- name: windows_x86_64
runs-on: windows-2022
- - name: windows-aarch64
+ - name: windows_arm64
runs-on: windows-2022
java: [17]
runs-on: ${{ matrix.platform.runs-on }}
diff --git a/pom.xml b/pom.xml
index a2bb56b5..0cd5ae7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -282,6 +282,13 @@
webrtc.windows.x86_64
+
+ windows-aarch64
+
+ windows-aarch64
+ webrtc.windows.aarch64
+
+
linux-x86_64
diff --git a/webrtc-jni/pom.xml b/webrtc-jni/pom.xml
index 85cfd49c..fd4e5aeb 100644
--- a/webrtc-jni/pom.xml
+++ b/webrtc-jni/pom.xml
@@ -216,5 +216,13 @@
toolchain/x86_64-macos-cross.cmake
+
+ windows-aarch64
+
+ -AARM64
+ ${cmake.build.type}
+ toolchain/aarch64-windows-clang.cmake
+
+
From cf40000b56adc85ef68b02b1fd4d8c78445bb300 Mon Sep 17 00:00:00 2001
From: SendableMetatype <263203301+SendableMetatype@users.noreply.github.com>
Date: Sat, 5 Sep 2026 16:24:26 +0200
Subject: [PATCH 4/5] build: add windows arm64 to the release pipeline
The release workflow gains the windows_arm64 lane. The release action
builds it with the windows-aarch64 profile and skips the tests on the
cross runner, like the linux arm lanes. The publish job verifies the
new classifier and the release profile of the webrtc module attaches
it to the deployment bundle.
---
.github/actions/release/action.yml | 4 +++-
.github/workflows/release.yml | 4 +++-
webrtc/pom.xml | 5 +++++
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/.github/actions/release/action.yml b/.github/actions/release/action.yml
index 8508c025..fa20ed67 100644
--- a/.github/actions/release/action.yml
+++ b/.github/actions/release/action.yml
@@ -44,13 +44,15 @@ runs:
mvn package -DskipTests -Plinux-aarch32
elif [ "${{ inputs.platform-name }}" == "linux_arm64" ]; then
mvn package -DskipTests -Plinux-aarch64
+ elif [ "${{ inputs.platform-name }}" == "windows_arm64" ]; then
+ mvn package -DskipTests -Pwindows-aarch64
else
mvn package -DskipTests
fi
shell: bash
- name: Test
- if: ${{ inputs.platform-name != 'linux_arm' && inputs.platform-name != 'linux_arm64' }}
+ if: ${{ inputs.platform-name != 'linux_arm' && inputs.platform-name != 'linux_arm64' && inputs.platform-name != 'windows_arm64' }}
run: mvn -B jar:jar surefire:test
shell: bash
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index da5187e0..0684e52f 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -139,6 +139,8 @@ jobs:
platform:
- name: windows_x86_64
runs-on: windows-2022
+ - name: windows_arm64
+ runs-on: windows-2022
java: [17]
runs-on: ${{ matrix.platform.runs-on }}
steps:
@@ -314,7 +316,7 @@ jobs:
version="${{ steps.release-version.outputs.version }}"
status=0
- for classifier in windows-x86_64 linux-x86_64 linux-aarch64 \
+ for classifier in windows-x86_64 windows-aarch64 linux-x86_64 linux-aarch64 \
linux-aarch32 macos-x86_64 macos-aarch64; do
if [ ! -f "natives/webrtc-java-$version-$classifier.jar" ]; then
echo "::error::Missing native library jar for $classifier"
diff --git a/webrtc/pom.xml b/webrtc/pom.xml
index 6708fa07..00946f51 100644
--- a/webrtc/pom.xml
+++ b/webrtc/pom.xml
@@ -101,6 +101,11 @@
jar
windows-x86_64
+
+ ${natives.dir}/${project.name}-${project.version}-windows-aarch64.jar
+ jar
+ windows-aarch64
+
${natives.dir}/${project.name}-${project.version}-linux-x86_64.jar
jar
From 7fc7ab21863ada026ea27864fcc51fcf0c4e1fd0 Mon Sep 17 00:00:00 2001
From: SendableMetatype <263203301+SendableMetatype@users.noreply.github.com>
Date: Sat, 5 Sep 2026 16:32:40 +0200
Subject: [PATCH 5/5] docs: list the windows-aarch64 classifier
---
docs/guide/get-started.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/docs/guide/get-started.md b/docs/guide/get-started.md
index 2fb828a7..810ace00 100644
--- a/docs/guide/get-started.md
+++ b/docs/guide/get-started.md
@@ -44,6 +44,7 @@ If you encounter issues loading the native library "webrtc-java", you can declar
Complete list of available classifiers:
- windows-x86_64
+- windows-aarch64
- macos-x86_64
- macos-aarch64
- linux-x86_64
@@ -93,6 +94,7 @@ For specific platforms, add the appropriate classifier:
```groovy
implementation group: "dev.onvoid.webrtc", name: "webrtc-java", version: "{{ VERSION }}", classifier: "windows-x86_64"
+implementation group: "dev.onvoid.webrtc", name: "webrtc-java", version: "{{ VERSION }}", classifier: "windows-aarch64"
implementation group: "dev.onvoid.webrtc", name: "webrtc-java", version: "{{ VERSION }}", classifier: "macos-x86_64"
implementation group: "dev.onvoid.webrtc", name: "webrtc-java", version: "{{ VERSION }}", classifier: "macos-aarch64"
implementation group: "dev.onvoid.webrtc", name: "webrtc-java", version: "{{ VERSION }}", classifier: "linux-x86_64"