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