From 029fbd046fe37c4086879382832e34feca94c029 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Sun, 13 Sep 2026 14:57:49 +0100 Subject: [PATCH 1/5] [ci] Add windows arm64 build --- .github/workflows/main.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 95706e2ff..6239dcb50 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,6 +47,20 @@ jobs: ext: .dll os: windows-latest + WindowsArm64: + strategy: + fail-fast: false + matrix: + haxe: [ 4.3.7, latest ] + uses: ./.github/workflows/test.yml + name: Test Windows (Arm64) + with: + haxe: ${{ matrix.haxe }} + arch: Arm64 + sep: \ + ext: .dll + os: windows-11-arm + MacOS64: strategy: fail-fast: false From 426f636bd6cf713209545f5ec92aeeac3e1b0b0a Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Sun, 13 Sep 2026 16:11:50 +0100 Subject: [PATCH 2/5] Use patched setup-haxe for windows arm64 This patched version runs the x86_64 build of haxe through emulation on arm64 windows. --- .github/workflows/setup/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/setup/action.yml b/.github/workflows/setup/action.yml index 3b7dae26e..0b57e6cbf 100644 --- a/.github/workflows/setup/action.yml +++ b/.github/workflows/setup/action.yml @@ -7,7 +7,7 @@ runs: using: composite steps: - name: install haxe - uses: krdlab/setup-haxe@v2 + uses: krdlab/setup-haxe@f37045f8d4e04adddecf8fd1acc024ef03680734 with: haxe-version: ${{ inputs.haxe }} From de1949125be5325fabd697bb500f59a0b35a1071 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Mon, 14 Sep 2026 10:49:53 +0100 Subject: [PATCH 3/5] Fix hxcpp_get_bin_dir for windows arm64 --- src/hx/Lib.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hx/Lib.cpp b/src/hx/Lib.cpp index feb26d081..e9770b7fa 100644 --- a/src/hx/Lib.cpp +++ b/src/hx/Lib.cpp @@ -396,7 +396,9 @@ String __hxcpp_get_bin_dir() HX_CSTRING("WinRT"); #endif #elif defined(_WIN32) - #ifdef HXCPP_M64 + #ifdef HXCPP_ARM64 + HX_CSTRING("WindowsArm64"); + #elif defined(HXCPP_M64) HX_CSTRING("Windows64"); #else HX_CSTRING("Windows"); From 07eca3c339dc301c24df72a278376313dc7439a1 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Tue, 13 Oct 2026 13:36:58 +0100 Subject: [PATCH 4/5] Allow VsDevCmd.bat to decide host arch Previously we were forcing a host arch of x86, which caused the compiler to run out of memory when processing precompiled headers. Hopefully, VsDevCmd can pick an appropriate host architecture automatically for us (arm64 when available [0], x64/x86 for cross-compilation or when visual studio is old and doesn't support a native arm64 build). [0] https://devblogs.microsoft.com/visualstudio/arm64-visual-studio-is-officially-here/ --- toolchain/msvc-arm64-setup.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolchain/msvc-arm64-setup.bat b/toolchain/msvc-arm64-setup.bat index 8f7eee293..1ac482189 100644 --- a/toolchain/msvc-arm64-setup.bat +++ b/toolchain/msvc-arm64-setup.bat @@ -13,7 +13,7 @@ setlocal enabledelayedexpansion @set InstallDir=%%i ) @if exist "!InstallDir!\Common7\Tools\VsDevCmd.bat" ( - @call "!InstallDir!\Common7\Tools\VsDevCmd.bat" -host_arch=%msvc_host_arch% -arch=arm64 -app_platform=Desktop -no_logo + @call "!InstallDir!\Common7\Tools\VsDevCmd.bat" -arch=arm64 -app_platform=Desktop -no_logo @echo HXCPP_VARS @set ) else ( From 674608f2fc286ac60c123f0a269dc06038d0caac Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Tue, 13 Oct 2026 14:15:00 +0100 Subject: [PATCH 5/5] Remove HXCPP_MSVC fallback from msvc-arm64-setup HXCPP_MSVC is set when using HXCPP_MSVC_VER, which uses legacy VSxxxCOMNTOOLS environment variables that no longer exist since VS2017 [0]. VS2017 was also the first version of VS to add arm64 as a target [1], so this older method is incompatible anyway. Aside from these issues, this also never worked because it would check for "..._arm64.bat" but then call "..._amd64.bat", so it was never correctly producing arm64 binaries. [0] https://developercommunity.visualstudio.com/t/missing-vs150comntools/35325 [1] https://pete.akeo.ie/2017/05/compiling-desktop-arm-applications-with.html --- toolchain/msvc-arm64-setup.bat | 11 +---------- tools/hxcpp/Setup.hx | 1 - 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/toolchain/msvc-arm64-setup.bat b/toolchain/msvc-arm64-setup.bat index 1ac482189..86f3ec002 100644 --- a/toolchain/msvc-arm64-setup.bat +++ b/toolchain/msvc-arm64-setup.bat @@ -1,14 +1,5 @@ setlocal enabledelayedexpansion -@if exist "%HXCPP_MSVC%\..\..\VC\" ( - @if not exist "%hxcpp_msvc%\..\..\VC\Auxiliary\Build\vcvars%msvc_host_arch%_arm64.bat" ( - @echo Error: the specified MSVC version does not have vcvars%msvc_host_arch%_arm64.bat setup script - ) else ( - @echo "%HXCPP_MSVC%" - @call "%HXCPP_MSVC%\..\..\VC\Auxiliary\Build\vcvars%msvc_host_arch%_amd64.bat" - @echo HXCPP_VARS - @set - ) -) else if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" ( +@if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" ( for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.arm64 -property installationPath`) do ( @set InstallDir=%%i ) diff --git a/tools/hxcpp/Setup.hx b/tools/hxcpp/Setup.hx index 9b16ff801..e6cb1f93f 100644 --- a/tools/hxcpp/Setup.hx +++ b/tools/hxcpp/Setup.hx @@ -836,7 +836,6 @@ class Setup Sys.putEnv("HXCPP_WINXP_COMPAT","1"); xpCompat = true; } - Sys.putEnv("msvc_host_arch", ioDefines.exists("windows_arm_host") ? "x86" : "x64" ); var vc_setup_proc = new Process("cmd.exe", ["/C", BuildTool.HXCPP + "\\toolchain\\msvc" + extra + "-setup.bat" ]); var vars_found = false;