diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index abfaed85..698caf55 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -136,6 +136,21 @@ jobs: copy README.md package\ cd package && 7z a ..\yaze-windows-x86.zip * + - name: "Windows ARM64" + os: windows-2022 + vcpkg_triplet: arm64-windows + cmake_generator: "Visual Studio 17 2022" + cmake_generator_platform: ARM64 + artifact_name: "yaze-windows-arm64" + artifact_path: "build/bin/Release/" + package_cmd: | + mkdir package + xcopy /E /I build\bin\Release\* package\ + xcopy /E /I assets package\assets + copy LICENSE package\ + copy README.md package\ + cd package && 7z a ..\yaze-windows-arm64.zip * + - name: "macOS Universal" os: macos-14 vcpkg_triplet: arm64-osx diff --git a/CMakeLists.txt b/CMakeLists.txt index d1692c00..116fa9a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,20 @@ elseif(YAZE_PLATFORM_MACOS) elseif(YAZE_PLATFORM_WINDOWS) include(cmake/vcpkg.cmake) target_compile_definitions(yaze_common INTERFACE WINDOWS) + + # Windows-specific architecture detection and configuration + if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64") + target_compile_definitions(yaze_common INTERFACE YAZE_ARCH_ARM64) + message(STATUS "Building for Windows ARM64") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|x86_64") + target_compile_definitions(yaze_common INTERFACE YAZE_ARCH_X64) + message(STATUS "Building for Windows x64") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86") + target_compile_definitions(yaze_common INTERFACE YAZE_ARCH_X86) + message(STATUS "Building for Windows x86") + else() + message(WARNING "Unknown Windows architecture: ${CMAKE_SYSTEM_PROCESSOR}") + endif() endif() # Compiler-specific settings diff --git a/cmake/vcpkg.cmake b/cmake/vcpkg.cmake index aa773284..8fcf265f 100644 --- a/cmake/vcpkg.cmake +++ b/cmake/vcpkg.cmake @@ -3,16 +3,29 @@ add_definitions("-DMICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS=0") # vcpkg settings -set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic) # Enable vcpkg manifest mode for automatic dependency management set(VCPKG_MANIFEST_MODE ON) -# Configure vcpkg triplet (defaults to x64-windows) +# Auto-detect target architecture and set vcpkg triplet if(NOT DEFINED VCPKG_TARGET_TRIPLET) - set(VCPKG_TARGET_TRIPLET "x64-windows" CACHE STRING "vcpkg target triplet") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64") + set(VCPKG_TARGET_TRIPLET "arm64-windows" CACHE STRING "vcpkg target triplet") + set(VCPKG_TARGET_ARCHITECTURE arm64) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|x86_64") + set(VCPKG_TARGET_TRIPLET "x64-windows" CACHE STRING "vcpkg target triplet") + set(VCPKG_TARGET_ARCHITECTURE x64) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86") + set(VCPKG_TARGET_TRIPLET "x86-windows" CACHE STRING "vcpkg target triplet") + set(VCPKG_TARGET_ARCHITECTURE x86) + else() + # Fallback to x64 if architecture detection fails + set(VCPKG_TARGET_TRIPLET "x64-windows" CACHE STRING "vcpkg target triplet") + set(VCPKG_TARGET_ARCHITECTURE x64) + message(WARNING "Could not detect target architecture, defaulting to x64") + endif() endif() # Set vcpkg installation directory if not already set @@ -21,6 +34,7 @@ if(NOT DEFINED VCPKG_INSTALLED_DIR) endif() message(STATUS "vcpkg configuration:") +message(STATUS " Target architecture: ${VCPKG_TARGET_ARCHITECTURE}") message(STATUS " Target triplet: ${VCPKG_TARGET_TRIPLET}") message(STATUS " Installed directory: ${VCPKG_INSTALLED_DIR}") message(STATUS " Manifest mode: ${VCPKG_MANIFEST_MODE}") diff --git a/yaze.vcxproj b/yaze.vcxproj index d226facf..589acb14 100644 --- a/yaze.vcxproj +++ b/yaze.vcxproj @@ -17,6 +17,14 @@ Release x86 + + Debug + ARM64 + + + Release + ARM64 + @@ -30,6 +38,7 @@ true x86-windows x64-windows + arm64-windows @@ -76,6 +85,27 @@ x86-windows + + Application + true + v143 + Unicode + true + true + arm64-windows + + + + Application + false + v143 + true + Unicode + true + true + arm64-windows + + @@ -130,6 +160,20 @@ yaze + + true + $(SolutionDir)build\bin\$(Configuration)\ + $(SolutionDir)build\obj\$(ProjectName)\$(Configuration)\ + yaze + + + + false + $(SolutionDir)build\bin\$(Configuration)\ + $(SolutionDir)build\obj\$(ProjectName)\$(Configuration)\ + yaze + + Level4