feat: update support arm 64 new logic

This commit is contained in:
NickVs2015
2025-12-03 23:11:15 +03:00
parent 753a549938
commit 3119a589fb
4 changed files with 132 additions and 10 deletions

View File

@@ -145,9 +145,9 @@ jobs:
shell: cmd
run: |
set BUILD_ARCH=${{ env.BUILD_ARCH }}
set QT_BIN_DIR="${{ runner.temp }}\\Qt\\${{ env.QT_VERSION }}\\msvc2019_64\\bin"
set QIF_BIN_DIR="${{ runner.temp }}\\Qt\\Tools\\QtInstallerFramework\\${{ env.QIF_VERSION }}\\bin"
call deploy\\build_windows.bat
set "QT_BIN_DIR=${{ runner.temp }}\Qt\${{ env.QT_VERSION }}\msvc2019_64\bin"
set "QIF_BIN_DIR=${{ runner.temp }}\Qt\Tools\QtInstallerFramework\${{ env.QIF_VERSION }}\bin"
call deploy\build_windows.bat
- name: 'Rename Windows installer'
shell: cmd
@@ -297,7 +297,7 @@ jobs:
dir: ${{ runner.temp }}
setup-python: 'false'
tools: 'tools_ifw'
set-env: 'true'
set-env: 'false'
aqtversion: '==3.3.0'
py7zrversion: '==0.22.*'
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
@@ -310,23 +310,51 @@ jobs:
echo "Qt ARM64 directory: %QT_ARM64_DIR%"
if exist "%QT_ARM64_DIR%" (
echo "Qt ARM64 directory exists"
dir "%QT_ARM64_DIR%"
echo.
echo "Checking bin directory..."
if exist "%QT_ARM64_DIR%\bin" (
echo "bin directory exists"
dir "%QT_ARM64_DIR%\bin\Qt6*.dll"
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: 'arm64'
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

View File

@@ -39,6 +39,20 @@ endif()
find_package(Qt6 REQUIRED COMPONENTS ${PACKAGES})
# Diagnostic: Print Qt configuration
message(STATUS "=== Qt Configuration Diagnostics ===")
message(STATUS "Qt6_DIR: ${Qt6_DIR}")
message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
message(STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}")
message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
if(TARGET Qt6::Core)
get_target_property(Qt6Core_LOCATION Qt6::Core LOCATION)
message(STATUS "Qt6::Core location: ${Qt6Core_LOCATION}")
get_target_property(Qt6Core_IMPLIB Qt6::Core IMPORTED_IMPLIB_RELEASE)
message(STATUS "Qt6::Core import library: ${Qt6Core_IMPLIB}")
endif()
message(STATUS "====================================")
set(LIBS ${LIBS}
Qt6::Core Qt6::Gui
Qt6::Network Qt6::Xml Qt6::RemoteObjects

View File

@@ -15,17 +15,35 @@ set(OPENSSL_LIBRARIES_DIR "${OPENSSL_ROOT_DIR}/lib")
if(WIN32)
set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/windows/include")
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
# Check for ARM64 architecture first (CMAKE_GENERATOR_PLATFORM is set to ARM64 for cross-compilation)
message(STATUS "=== 3rd Party Libraries Configuration ===")
message(STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}")
message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
message(STATUS "CMAKE_SIZEOF_VOID_P: ${CMAKE_SIZEOF_VOID_P}")
if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "ARM64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64")
# ARM64: use ARM64 versions for both OpenSSL and libssh
message(STATUS "Building for Windows ARM64")
set(LIBSSH_LIB_PATH "${LIBSSH_ROOT_DIR}/windows/arm64/ssh.lib")
set(LIBSSH_INCLUDE_DIR "${LIBSSH_ROOT_DIR}/windows/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 "libssh: ${LIBSSH_LIB_PATH}")
message(STATUS "OpenSSL SSL: ${OPENSSL_LIB_SSL_PATH}")
message(STATUS "OpenSSL Crypto: ${OPENSSL_LIB_CRYPTO_PATH}")
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
message(STATUS "Building for Windows x64")
set(LIBSSH_LIB_PATH "${LIBSSH_ROOT_DIR}/windows/x86_64/ssh.lib")
set(LIBSSH_INCLUDE_DIR "${LIBSSH_ROOT_DIR}/windows/x86_64")
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()
message(STATUS "Building for Windows x86")
set(LIBSSH_LIB_PATH "${LIBSSH_ROOT_DIR}/windows/x86/ssh.lib")
set(LIBSSH_INCLUDE_DIR "${LIBSSH_ROOT_DIR}/windows/x86")
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()
message(STATUS "==========================================")
elseif(APPLE AND NOT IOS)
if(MACOS_NE)
set(LIBSSH_LIB_PATH "${LIBSSH_ROOT_DIR}/macos/universal2/libssh.a")

View File

@@ -50,6 +50,19 @@ del %TARGET_FILENAME%
mkdir %WORK_DIR%
echo "Checking MSVC environment..."
where cl >nul 2>&1
if %errorlevel% equ 0 (
echo "MSVC compiler found"
cl 2>&1 | findstr /C:"Version"
) else (
echo "ERROR: MSVC compiler not found in PATH"
echo "Please ensure 'Setup mvsc' step in GitHub Actions workflow is configured correctly"
echo "Trying to find cl.exe..."
where cl 2>&1
exit /b 1
)
call "%QT_BIN_DIR:"=%\qt-cmake" --version
if defined QT_HOST_BIN_DIR (
"%QT_HOST_BIN_DIR:"=%\windeployqt" -v
@@ -58,12 +71,61 @@ 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%
if defined QT_HOST_PATH (
REM ARM64 cross-compilation - set generator platform to ARM64
call cmake . -B %WORK_DIR% -A ARM64 "-DCMAKE_BUILD_TYPE:STRING=Release" "-DCMAKE_PREFIX_PATH:PATH=%QT_BIN_DIR%" "-DQT_HOST_PATH:PATH=%QT_HOST_PATH%"
REM CMAKE_PREFIX_PATH must point to Qt root (not bin), so CMake can find lib directory
echo "=== CMake Configuration for ARM64 ==="
echo "QT_BIN_DIR: %QT_BIN_DIR%"
echo "QT_ROOT_DIR: %QT_ROOT_DIR%"
echo "QT_HOST_PATH: %QT_HOST_PATH%"
echo "CMAKE_PREFIX_PATH: %QT_ROOT_DIR%"
echo "Generator Platform: ARM64"
echo "===================================="
REM Verify Qt ARM64 directories exist
if not exist "%QT_ROOT_DIR%" (
echo "ERROR: Qt ARM64 root directory not found at %QT_ROOT_DIR%"
exit /b 1
)
echo "Qt ARM64 root directory exists: %QT_ROOT_DIR%"
if not exist "%QT_ROOT_DIR%\lib" (
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"
)
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 (
call cmake . -B %WORK_DIR% "-DCMAKE_BUILD_TYPE:STRING=Release" "-DCMAKE_PREFIX_PATH:PATH=%QT_BIN_DIR%"
REM x64 build - QT_ROOT_DIR already calculated above
echo "=== CMake Configuration for x64 ==="
echo "QT_ROOT_DIR: %QT_ROOT_DIR%"
echo "===================================="
call cmake . -B %WORK_DIR% "-DCMAKE_BUILD_TYPE:STRING=Release" "-DCMAKE_PREFIX_PATH:PATH=%QT_ROOT_DIR%"
)
cd %WORK_DIR%