From 08138c218c4242516fb3d4505bd9925fd512e825 Mon Sep 17 00:00:00 2001 From: NickVs2015 Date: Thu, 4 Dec 2025 00:00:51 +0300 Subject: [PATCH] feat: update support arm 64 server --- .github/workflows/deploy.yml | 113 +--------------------------------- deploy/build_windows.bat | 34 ++-------- service/server/CMakeLists.txt | 25 +++----- 3 files changed, 17 insertions(+), 155 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 631626715..0b23826a2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -234,12 +234,6 @@ jobs: } } - - - name: 'Setup Python 3.11' - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - name: 'Install Qt Desktop (host for cross-compilation)' uses: jurplel/install-qt-action@v3 with: @@ -249,43 +243,12 @@ jobs: arch: 'win64_msvc2022_64' modules: 'qtremoteobjects qt5compat qtshadertools' dir: ${{ runner.temp }} - setup-python: 'false' + setup-python: 'true' set-env: 'false' aqtversion: '==3.3.0' py7zrversion: '==0.22.*' extra: '--base ${{ env.QT_MIRROR }}' - - name: 'Verify Qt Desktop (host) installation' - shell: cmd - run: | - echo "Checking Qt Desktop (host) installation..." - set QT_HOST_DIR=${{ runner.temp }}\Qt\${{ env.QT_VERSION }}\msvc2022_64 - echo "Qt host directory: %QT_HOST_DIR%" - if exist "%QT_HOST_DIR%" ( - echo "Qt host directory exists" - dir "%QT_HOST_DIR%\bin\Qt6*.dll" - ) else ( - echo "ERROR: Qt host directory does not exist" - exit /b 1 - ) - - - name: 'Cleanup Qt ARM64 directory before install' - shell: pwsh - run: | - $baseDir = "${{ runner.temp }}" - $qtVersion = "${{ env.QT_VERSION }}" - # Handle both path formats (with \ and /) - $paths = @( - "$baseDir\Qt\$qtVersion\msvc2022_arm64", - "$baseDir/Qt/$qtVersion/msvc2022_arm64" - ) - foreach ($path in $paths) { - if (Test-Path $path) { - Write-Host "Removing $path before ARM64 Qt install..." - Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue - } - } - - name: 'Install Qt ARM64' uses: jurplel/install-qt-action@v3 with: @@ -295,67 +258,18 @@ jobs: arch: 'win64_msvc2022_arm64_cross_compiled' modules: 'qtremoteobjects qt5compat qtshadertools' dir: ${{ runner.temp }} - setup-python: 'false' + setup-python: 'true' tools: 'tools_ifw' set-env: 'false' aqtversion: '==3.3.0' py7zrversion: '==0.22.*' extra: '--external 7z --base ${{ env.QT_MIRROR }}' - - name: 'Verify Qt ARM64 installation' - shell: cmd - run: | - echo "Checking Qt ARM64 installation..." - set QT_ARM64_DIR=${{ runner.temp }}\Qt\${{ env.QT_VERSION }}\msvc2022_arm64 - echo "Qt ARM64 directory: %QT_ARM64_DIR%" - if exist "%QT_ARM64_DIR%" ( - echo "Qt ARM64 directory exists" - echo. - echo "Checking bin directory..." - if exist "%QT_ARM64_DIR%\bin" ( - echo "bin directory exists" - dir "%QT_ARM64_DIR%\bin\Qt6*.dll" | findstr /C:"Qt6Core.dll" - ) else ( - echo "ERROR: bin directory does not exist" - exit /b 1 - ) - echo. - echo "Checking lib directory..." - if exist "%QT_ARM64_DIR%\lib" ( - echo "lib directory exists" - dir "%QT_ARM64_DIR%\lib\Qt6Core*.lib" - ) else ( - echo "ERROR: lib directory does not exist" - exit /b 1 - ) - echo "Qt ARM64 installation verified successfully" - ) else ( - echo "ERROR: Qt ARM64 directory does not exist" - exit /b 1 - ) - - name: 'Setup mvsc' uses: ilammy/msvc-dev-cmd@v1 with: arch: 'x64_arm64' - - name: 'Check environment variables before build' - shell: cmd - run: | - echo "=== Environment Variables Check ===" - echo "Checking for Qt-related environment variables..." - set | findstr /I "Qt" - set | findstr /I "CMAKE" - echo. - echo "Checking for MSVC tools in PATH..." - where cl 2>nul && echo "cl.exe found" || echo "WARNING: cl.exe not found" - where dumpbin 2>nul && echo "dumpbin.exe found" || echo "NOTE: dumpbin.exe not found" - where link 2>nul && echo "link.exe found" || echo "WARNING: link.exe not found" - echo. - echo "MSVC environment variables:" - set | findstr /I "VCINSTALLDIR VSINSTALLDIR" - echo "====================================" - - name: 'Build project' shell: cmd run: | @@ -384,29 +298,6 @@ jobs: name: AmneziaVPN_Windows_ARM64_unpacked path: deploy\\build_${{ env.BUILD_ARCH }}\\client\\Release retention-days: 7 - - - name: 'Create Qt ARM64 archive' - shell: pwsh - run: | - $qtArm64Dir = "${{ runner.temp }}\Qt\${{ env.QT_VERSION }}\msvc2022_arm64" - $archivePath = "Qt_${{ env.QT_VERSION }}_ARM64.zip" - - if (Test-Path $qtArm64Dir) { - Write-Host "Creating Qt ARM64 archive from: $qtArm64Dir" - Compress-Archive -Path $qtArm64Dir -DestinationPath $archivePath -Force - Write-Host "Archive created: $archivePath" - Write-Host "Archive size: $((Get-Item $archivePath).Length / 1MB) MB" - } else { - Write-Host "ERROR: Qt ARM64 directory not found: $qtArm64Dir" - exit 1 - } - - - name: 'Upload Qt ARM64 archive' - uses: actions/upload-artifact@v4 - with: - name: Qt_${{ env.QT_VERSION }}_ARM64 - path: Qt_${{ env.QT_VERSION }}_ARM64.zip - retention-days: 7 # ------------------------------------------------------ Build-iOS: diff --git a/deploy/build_windows.bat b/deploy/build_windows.bat index adb9a335d..e9101719d 100644 --- a/deploy/build_windows.bat +++ b/deploy/build_windows.bat @@ -71,8 +71,6 @@ if defined QT_HOST_BIN_DIR ( ) cmake --version -REM Calculate Qt root directory BEFORE entering if blocks (batch variable expansion issue) -REM Remove \bin from QT_BIN_DIR to get Qt root set "QT_ROOT_DIR=%QT_BIN_DIR:\bin=%" cd %PROJECT_DIR% @@ -99,25 +97,8 @@ if defined QT_HOST_PATH ( echo "ERROR: Qt ARM64 lib directory not found at %QT_ROOT_DIR%\lib" exit /b 1 ) - echo "Qt ARM64 lib directory found: %QT_ROOT_DIR%\lib" - dir "%QT_ROOT_DIR%\lib\Qt6Core*.lib" - - REM Check architecture of Qt6Core.lib (if dumpbin is available) - echo "Verifying Qt6Core.lib architecture..." - where dumpbin >nul 2>&1 - if %errorlevel% equ 0 ( - echo "dumpbin found, checking architecture..." - dumpbin /headers "%QT_ROOT_DIR%\lib\Qt6Core.lib" | findstr /C:"machine" - if %errorlevel% equ 0 ( - echo "Architecture check completed" - ) else ( - echo "WARNING: Could not extract machine type from Qt6Core.lib" - ) - ) else ( - echo "NOTE: dumpbin not available, skipping architecture verification" - echo "This is not critical - build will continue" - ) - + + echo "Building for ARM64" call cmake . -B %WORK_DIR% -A ARM64 "-DCMAKE_BUILD_TYPE:STRING=Release" "-DCMAKE_PREFIX_PATH:PATH=%QT_ROOT_DIR%" "-DQT_HOST_PATH:PATH=%QT_HOST_PATH%" ) else ( REM x64 build - QT_ROOT_DIR already calculated above @@ -232,14 +213,9 @@ if defined QT_HOST_BIN_DIR ( echo "ARM64 Qt libraries copied successfully" - REM Verify Qt6Core.dll architecture - echo "Verifying Qt6Core.dll was copied:" - if exist "%OUT_APP_DIR:"=%\Qt6Core.dll" ( - echo "Qt6Core.dll found in output directory" - ) else ( - echo "ERROR: Qt6Core.dll not found after copy" - exit /b 1 - ) + REM Remove ALL debug DLLs recursively (Qt6*d.dll, *d.dll in all subdirectories) + echo "Removing debug DLLs and libraries from output directory (recursive)..." + del /s /q "%OUT_APP_DIR:"=%\*d.dll" >nul 2>&1 ) else ( echo "ERROR: ARM64 Qt DLLs not found in %QT_BIN_DIR:"=%" exit /b 1 diff --git a/service/server/CMakeLists.txt b/service/server/CMakeLists.txt index aeeac0987..7706659bc 100644 --- a/service/server/CMakeLists.txt +++ b/service/server/CMakeLists.txt @@ -18,27 +18,21 @@ set(QSIMPLECRYPTO_DIR ${CMAKE_CURRENT_LIST_DIR}/../../client/3rd/QSimpleCrypto/s set(OPENSSL_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../../client/3rd-prebuilt/3rd-prebuilt/openssl/") set(OPENSSL_LIBRARIES_DIR "${OPENSSL_ROOT_DIR}/lib") -set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/windows/include") -if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64") - set(OPENSSL_LIB_SSL_PATH "${OPENSSL_ROOT_DIR}/windows/winarm64/libssl.lib") - set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_ROOT_DIR}/windows/winarm64/libcrypto.lib") -elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") - set(OPENSSL_LIB_SSL_PATH "${OPENSSL_ROOT_DIR}/windows/win64/libssl.lib") - set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_ROOT_DIR}/windows/win64/libcrypto.lib") -else() - set(OPENSSL_LIB_SSL_PATH "${OPENSSL_ROOT_DIR}/windows/win32/libssl.lib") - set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_ROOT_DIR}/windows/win32/libcrypto.lib") -endif() - - if(WIN32) set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/windows/include") - if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64") + # Use CMAKE_GENERATOR_PLATFORM for cross-compilation detection (ARM64 on x64 host) + if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "ARM64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64") + set(OPENSSL_LIB_SSL_PATH "${OPENSSL_ROOT_DIR}/windows/winarm64/libssl.lib") set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_ROOT_DIR}/windows/winarm64/libcrypto.lib") + message(STATUS "Service: Using ARM64 OpenSSL libraries") elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") + set(OPENSSL_LIB_SSL_PATH "${OPENSSL_ROOT_DIR}/windows/win64/libssl.lib") set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_ROOT_DIR}/windows/win64/libcrypto.lib") + message(STATUS "Service: Using x64 OpenSSL libraries") else() + set(OPENSSL_LIB_SSL_PATH "${OPENSSL_ROOT_DIR}/windows/win32/libssl.lib") set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_ROOT_DIR}/windows/win32/libcrypto.lib") + message(STATUS "Service: Using x86 OpenSSL libraries") endif() elseif(APPLE AND NOT IOS) set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/macos/include") @@ -365,7 +359,8 @@ qt_add_repc_sources(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../../ipc/ipc_process_t # copy deploy artifacts required to run the application to the debug build folder if(WIN32) - if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64") + # Use CMAKE_GENERATOR_PLATFORM for cross-compilation detection + if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "ARM64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64") set(DEPLOY_PLATFORM_PATH "windows/arm64") elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") set(DEPLOY_PLATFORM_PATH "windows/x64")