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/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/build.yml b/.github/workflows/build.yml index 03a2c2b0..926ebaeb 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_arm64 + runs-on: windows-2022 java: [17] runs-on: ${{ matrix.platform.runs-on }} steps: 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/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" 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 + + 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 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") 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