diff --git a/tools/idf_tools.py b/tools/idf_tools.py index 2b0089d3ee..b02e656d42 100755 --- a/tools/idf_tools.py +++ b/tools/idf_tools.py @@ -209,6 +209,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' @@ -239,7 +240,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, @@ -780,11 +782,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 00f697156e..9b11a229f5 100644 --- a/tools/tools.json +++ b/tools/tools.json @@ -542,7 +542,8 @@ "install": "always", "platforms": [ "win32", - "win64" + "win64", + "win-arm64" ] }, { @@ -602,6 +603,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, @@ -739,7 +745,8 @@ "install": "always", "platforms": [ "win32", - "win64" + "win64", + "win-arm64" ] } ], @@ -759,6 +766,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", @@ -773,6 +786,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": {