From b4fd738389ca4c1e5a2f8ba2c1ea9f7af40bb13a Mon Sep 17 00:00:00 2001 From: Marek Fiala Date: Wed, 25 Feb 2026 12:52:34 +0100 Subject: [PATCH] feat(tools): Added cmake and ninja arm binaries Closes https://github.com/espressif/esp-idf/issues/18272 --- tools/idf_tools.py | 8 +++++++- tools/tools.json | 23 +++++++++++++++++++++-- tools/tools_schema.json | 5 ++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/tools/idf_tools.py b/tools/idf_tools.py index 2e66545631..73a68675bf 100755 --- a/tools/idf_tools.py +++ b/tools/idf_tools.py @@ -202,6 +202,7 @@ PYTHON_PLATFORM = f'{platform.system()}-{platform.machine()}' # Identifiers used in tools.json for different platforms. PLATFORM_WIN32 = 'win32' PLATFORM_WIN64 = 'win64' +PLATFORM_WIN_ARM64 = 'win-arm64' PLATFORM_MACOS = 'macos' PLATFORM_MACOS_ARM64 = 'macos-arm64' PLATFORM_LINUX32 = 'linux-i686' @@ -232,7 +233,8 @@ class Platforms: 'Windows-x86_64': PLATFORM_WIN64, 'Windows-AMD64': PLATFORM_WIN64, 'x86_64-w64-mingw32': PLATFORM_WIN64, - 'Windows-ARM64': PLATFORM_WIN64, + PLATFORM_WIN_ARM64: PLATFORM_WIN_ARM64, + 'Windows-ARM64': PLATFORM_WIN_ARM64, # macOS PLATFORM_MACOS: PLATFORM_MACOS, 'osx': PLATFORM_MACOS, @@ -773,11 +775,15 @@ class IDFToolVersion: def get_download_for_platform(self, platform_name: str | None) -> IDFToolDownload | None: """ Get download for given platform if usable download already exists. + On win-arm64, falls back to win64 when no native build is available. """ try: platform_name = Platforms.get(platform_name) if platform_name in self.downloads.keys(): return self.downloads[platform_name] + # On Windows ARM64, use win64 (x86_64) build when no native win-arm64 exists + if platform_name == PLATFORM_WIN_ARM64 and PLATFORM_WIN64 in self.downloads: + return self.downloads[PLATFORM_WIN64] # exception can be omitted, as not detected platform is handled without err message except ValueError: pass diff --git a/tools/tools.json b/tools/tools.json index b2804fbf05..5732d66ae5 100644 --- a/tools/tools.json +++ b/tools/tools.json @@ -538,7 +538,8 @@ "install": "always", "platforms": [ "win32", - "win64" + "win64", + "win-arm64" ] }, { @@ -598,6 +599,11 @@ }, "name": "4.0.3", "status": "recommended", + "win-arm64": { + "sha256": "86ccd6485bbd4bb41a1a858db397be5bca5e0de96858bf8dbba7a64407bd6c00", + "size": 46495761, + "url": "https://github.com/Kitware/CMake/releases/download/v4.0.3/cmake-4.0.3-windows-arm64.zip" + }, "win32": { "sha256": "b59a31dfbfa376a4aaea9ff560ff2b29f78ee5f9fb15447fc71ae7bf9fea9379", "size": 47717299, @@ -735,7 +741,8 @@ "install": "always", "platforms": [ "win32", - "win64" + "win64", + "win-arm64" ] } ], @@ -755,6 +762,12 @@ "size": 123084, "url": "https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip" }, + "linux-arm64": { + "rename_dist": "ninja-linux-arm64-v1.12.1.zip", + "sha256": "5c25c6570b0155e95fce5918cb95f1ad9870df5768653afe128db822301a05a1", + "size": 121787, + "url": "https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux-aarch64.zip" + }, "macos": { "rename_dist": "ninja-mac-v1.12.1.zip", "sha256": "89a287444b5b3e98f88a945afa50ce937b8ffd1dcc59c555ad9b1baf855298c9", @@ -769,6 +782,12 @@ }, "name": "1.12.1", "status": "recommended", + "win-arm64": { + "rename_dist": "ninja-win-arm64-v1.12.1.zip", + "sha256": "79c96a50e0deafec212cfa85aa57c6b74003f52d9d1673ddcd1eab1c958c5900", + "size": 254317, + "url": "https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-winarm64.zip" + }, "win64": { "rename_dist": "ninja-win-v1.12.1.zip", "sha256": "f550fec705b6d6ff58f2db3c374c2277a37691678d6aba463adcbb129108467a", diff --git a/tools/tools_schema.json b/tools/tools_schema.json index c76eb6142d..824ec82b5c 100644 --- a/tools/tools_schema.json +++ b/tools/tools_schema.json @@ -174,6 +174,9 @@ "win64": { "$ref": "#/definitions/platformDownloadInfo" }, + "win-arm64": { + "$ref": "#/definitions/platformDownloadInfo" + }, "any": { "$ref": "#/definitions/platformDownloadInfo" } @@ -222,7 +225,7 @@ "type": "array", "items": { "type": "string", - "enum": ["linux-i686", "linux-amd64", "linux-armel", "linux-armhf", "linux-arm64", "macos", "macos-arm64", "win32", "win64"] + "enum": ["linux-i686", "linux-amd64", "linux-armel", "linux-armhf", "linux-arm64", "macos", "macos-arm64", "win32", "win64", "win-arm64"] } }, "export_paths": {