diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 036fd5bc724..2491789e6a4 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -39,7 +39,7 @@ env: # vcpkg version: 2025.08.27 # If we change the `VCPKG COMMIT_ID`, please remember: # 1. Call `$VCPKG_ROOT/vcpkg x-update-baseline` to update the baseline in `vcpkg.json`. - # Or we may face build issue like + # Or we may face build issue like # https://github.com/rustdesk/rustdesk/actions/runs/14414119794/job/40427970174 # 2. Update the `VCPKG_COMMIT_ID` in `ci.yml` and `playground.yml`. VCPKG_COMMIT_ID: "120deac3062162151622ca4860575a33844ba10b" @@ -49,7 +49,6 @@ env: #signing keys env variable checks ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}" MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}" - MACOS_NOTARIZE_JSON: "${{ secrets.MACOS_NOTARIZE_JSON }}" UPLOAD_ARTIFACT: "${{ inputs.upload-artifact }}" SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}-2" @@ -616,7 +615,7 @@ jobs: run: | rustup target add ${{ matrix.job.target }} cargo build --locked --features flutter,hwcodec --release --target aarch64-apple-ios --lib - + - name: Upload liblibrustdesk.a Artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: @@ -694,20 +693,12 @@ jobs: - name: Check sign and import sign key if: env.MACOS_P12_BASE64 != null - env: - MACOS_CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }} - shell: bash run: | security default-keychain -s rustdesk.keychain security find-identity -v - if ! [[ "$MACOS_CODESIGN_IDENTITY" =~ ^[A-Za-z0-9]+$ ]]; then - # Ensure no whitespaces or special characters - echo 'FATAL: Invalid `secrets.MACOS_CODESIGN_IDENTITY` given. If signing key is stored on your Mac, you can run `security find-identity -v -p codesigning` to find out hex format of your identity.' >&2 - exit 128 - fi - name: Import notarize key - if: env.MACOS_P12_BASE64 != null && env.MACOS_NOTARIZE_JSON != null + if: env.MACOS_P12_BASE64 != null uses: timheuer/base64-to-file@adaa40c0c581f276132199d4cf60afa07ce60eac # v1.2 with: # https://gregoryszorc.com/docs/apple-codesign/stable/apple_codesign_rcodesign.html#notarizing-and-stapling @@ -855,10 +846,8 @@ jobs: codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict ./flutter/build/macos/Build/Products/Release/RustDesk.app -vvv create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict rustdesk-${{ env.VERSION }}.dmg -vvv - if [ "$MACOS_NOTARIZE_JSON" != "" ]; then - # notarize the rustdesk-${{ env.VERSION }}.dmg - rcodesign notary-submit --api-key-path ${{ github.workspace }}/rustdesk.json --staple rustdesk-${{ env.VERSION }}.dmg - fi + # notarize the rustdesk-${{ env.VERSION }}.dmg + rcodesign notary-submit --api-key-path ${{ github.workspace }}/rustdesk.json --staple rustdesk-${{ env.VERSION }}.dmg - name: Rename rustdesk if: env.UPLOAD_ARTIFACT == 'true' diff --git a/flutter/build_android_deps.sh b/flutter/build_android_deps.sh index 64fb9dad2a9..1f07cb7ba1f 100755 --- a/flutter/build_android_deps.sh +++ b/flutter/build_android_deps.sh @@ -6,83 +6,82 @@ ANDROID_ABI=$1 # Build RustDesk dependencies for Android using vcpkg.json # Required: -# 1. set VCPKG_ROOT / ANDROID_NDK path environment variables +# 1. set VCPKG_ROOT / ANDROID_NDK_HOME path environment variables # 2. vcpkg initialized # 3. ndk, version: r25c or newer -if [ -z "$ANDROID_NDK_HOME" ]; then - echo "Failed! Please set ANDROID_NDK_HOME" - exit 1 +if [ -z "${ANDROID_NDK_HOME}" ]; then + echo "ERROR: Please set ANDROID_NDK_HOME environment variable" 1>&2 + exit 1 fi -if [ -z "$VCPKG_ROOT" ]; then - echo "Failed! Please set VCPKG_ROOT" - exit 1 +if [ -z "${VCPKG_ROOT}" ]; then + echo "ERROR: Please set VCPKG_ROOT environment variable" 1>&2 + exit 1 fi -API_LEVEL="21" +case "${ANDROID_ABI}" in +arm64-v8a) + VCPKG_TARGET=arm64-android + ;; +armeabi-v7a) + VCPKG_TARGET=arm-neon-android + ;; +x86_64) + VCPKG_TARGET=x64-android + ;; +x86) + VCPKG_TARGET=x86-android + ;; +*) + echo "Usage: build_android_deps.sh " 1>&2 + exit 1 + ;; +esac # Get directory of this script SCRIPTDIR="$(readlink -f "$0")" -SCRIPTDIR="$(dirname "$SCRIPTDIR")" +SCRIPTDIR="$(dirname "${SCRIPTDIR}")" # Check if vcpkg.json is one level up - in root directory of RD -if [ ! -f "$SCRIPTDIR/../vcpkg.json" ]; then - echo "Failed! Please check where vcpkg.json is!" - exit 1 +if [ ! -f "${SCRIPTDIR}/../vcpkg.json" ]; then + echo "ERROR: Can not find vcpkg.json in RustDesk top-level directory" 1>&2 + exit 1 fi -# NDK llvm toolchain - -HOST_TAG="linux-x86_64" # current platform, set as `ls $ANDROID_NDK/toolchains/llvm/prebuilt/` -TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG - -function build { - ANDROID_ABI=$1 - - case "$ANDROID_ABI" in - arm64-v8a) - ABI=aarch64-linux-android$API_LEVEL - VCPKG_TARGET=arm64-android - ;; - armeabi-v7a) - ABI=armv7a-linux-androideabi$API_LEVEL - VCPKG_TARGET=arm-neon-android - ;; - x86_64) - ABI=x86_64-linux-android$API_LEVEL - VCPKG_TARGET=x64-android - ;; - x86) - ABI=i686-linux-android$API_LEVEL - VCPKG_TARGET=x86-android - ;; - *) - echo "ERROR: ANDROID_ABI must be one of: arm64-v8a, armeabi-v7a, x86_64, x86" >&2 - return 1 - esac - - echo "*** [$ANDROID_ABI][Start] Build and install vcpkg dependencies" - pushd "$SCRIPTDIR/.." - $VCPKG_ROOT/vcpkg install --triplet $VCPKG_TARGET --x-install-root="$VCPKG_ROOT/installed" - popd - head -n 100 "${VCPKG_ROOT}/buildtrees/ffmpeg/build-$VCPKG_TARGET-rel-out.log" || true - echo "*** [$ANDROID_ABI][Finished] Build and install vcpkg dependencies" - -if [ -d "$VCPKG_ROOT/installed/arm-neon-android" ]; then - echo "*** [Start] Move arm-neon-android to arm-android" - - mv "$VCPKG_ROOT/installed/arm-neon-android" "$VCPKG_ROOT/installed/arm-android" - - echo "*** [Finished] Move arm-neon-android to arm-android" -fi -} +echo "INFO: Building and install vcpkg dependencies for Android ${ANDROID_ABI} ..." + +pushd "${SCRIPTDIR}/.." + +"${VCPKG_ROOT}/vcpkg" install \ + --triplet "${VCPKG_TARGET}" \ + --x-install-root="${VCPKG_ROOT}/installed" + +popd + +echo "INFO: Completed building vcpkg dependencies for Android ${ANDROID_ABI}" + +if [ "${ANDROID_ABI}" = 'armeabi-v7a' ]; then + # Symlink arm-neon-android to arm-android because cargo-ndk does not + # understand NEON suffix. + + if [ -d "${VCPKG_ROOT}/installed/arm-neon-android" ]; then + echo 'INFO: Symlinking arm-neon-android to arm-android' + + ln -sf \ + "${VCPKG_ROOT}/installed/arm-neon-android" \ + "${VCPKG_ROOT}/installed/arm-android" + + echo 'INFO: Symlinked arm-neon-android to arm-android' + else + cat 0<<.a +ERROR: 'vcpkg install' seem to complete successfully but +directory '${VCPKG_ROOT}/installed/arm-neon-android' is missing! + +.a -if [ ! -z "$ANDROID_ABI" ]; then - build "$ANDROID_ABI" -else - echo "Usage: build-android-deps.sh " >&2 - exit 1 + exit 1 + fi fi diff --git a/res/vcpkg-triplets/arm-neon-android.cmake b/res/vcpkg-triplets/arm-neon-android.cmake new file mode 100644 index 00000000000..e0a9c042548 --- /dev/null +++ b/res/vcpkg-triplets/arm-neon-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE arm) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=armv7a-linux-androideabi") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=armeabi-v7a -DANDROID_ARM_NEON=ON) diff --git a/res/vcpkg-triplets/arm64-android.cmake b/res/vcpkg-triplets/arm64-android.cmake new file mode 100644 index 00000000000..ffd358f9aed --- /dev/null +++ b/res/vcpkg-triplets/arm64-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a) diff --git a/res/vcpkg-triplets/x64-android.cmake b/res/vcpkg-triplets/x64-android.cmake new file mode 100644 index 00000000000..37ad1f6760e --- /dev/null +++ b/res/vcpkg-triplets/x64-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=x86_64-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=x86_64) diff --git a/res/vcpkg-triplets/x86-android.cmake b/res/vcpkg-triplets/x86-android.cmake new file mode 100644 index 00000000000..992816cf1b1 --- /dev/null +++ b/res/vcpkg-triplets/x86-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE x86) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=i686-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=x86) diff --git a/vcpkg.json b/vcpkg.json index 634c32b1911..cd282fc1c29 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -95,6 +95,9 @@ }, "overlay-ports": [ "./res/vcpkg" + ], + "overlay-triplets": [ + "./res/vcpkg-triplets" ] }, "overrides": [