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"