mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 00:20:18 +01:00
[BE] parse CMake version from cmake -E capabilities instead of cmake --version (#157073)
`cmake -E capabilities` produces a JSON format that is more machine-friendly.
```console
$ cmake --version
cmake version 4.0.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ cmake -E capabilities | jq '.version.string'
"4.0.3"
$ cmake -E capabilities | jq
{
"debugger": true,
"fileApi": {
"requests": [
{
"kind": "codemodel",
"version": [
{
"major": 2,
"minor": 8
}
]
},
{
"kind": "configureLog",
"version": [
{
"major": 1,
"minor": 0
}
]
},
{
"kind": "cache",
"version": [
{
"major": 2,
"minor": 0
}
]
},
{
"kind": "cmakeFiles",
"version": [
{
"major": 1,
"minor": 1
}
]
},
{
"kind": "toolchains",
"version": [
{
"major": 1,
"minor": 0
}
]
}
]
},
"generators": [
{
"extraGenerators": [],
"name": "Watcom WMake",
"platformSupport": false,
"toolsetSupport": false
},
{
"extraGenerators": [
"Kate"
],
"name": "Ninja Multi-Config",
"platformSupport": false,
"toolsetSupport": false
},
{
"extraGenerators": [
"CodeBlocks",
"CodeLite",
"Eclipse CDT4",
"Kate",
"Sublime Text 2"
],
"name": "Ninja",
"platformSupport": false,
"toolsetSupport": false
},
{
"extraGenerators": [],
"name": "Xcode",
"platformSupport": false,
"toolsetSupport": true
},
{
"extraGenerators": [
"CodeBlocks",
"CodeLite",
"Eclipse CDT4",
"Kate",
"Sublime Text 2"
],
"name": "Unix Makefiles",
"platformSupport": false,
"toolsetSupport": false
}
],
"serverMode": false,
"tls": true,
"version": {
"isDirty": false,
"major": 4,
"minor": 0,
"patch": 3,
"string": "4.0.3",
"suffix": ""
}
}
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/157073
Approved by: https://github.com/Skylion007
This commit is contained in:
parent
772d590415
commit
90b973a2e2
|
|
@ -18,3 +18,5 @@ start /wait "" python-amd64.exe /quiet InstallAllUsers=1 PrependPath=0 Include_t
|
|||
if errorlevel 1 exit /b 1
|
||||
|
||||
set "PATH=%CD%\Python\Scripts;%CD%\Python;%PATH%"
|
||||
%PYTHON_EXEC% -m pip install --upgrade pip setuptools packaging wheel
|
||||
if errorlevel 1 exit /b 1
|
||||
|
|
|
|||
|
|
@ -31,12 +31,13 @@ requires = [
|
|||
"setuptools>=62.3.0,<80.0",
|
||||
"wheel",
|
||||
"astunparse",
|
||||
"numpy",
|
||||
"ninja",
|
||||
"pyyaml",
|
||||
"cmake",
|
||||
"typing-extensions>=4.10.0",
|
||||
"ninja",
|
||||
"numpy",
|
||||
"packaging",
|
||||
"pyyaml",
|
||||
"requests",
|
||||
"typing-extensions>=4.10.0",
|
||||
]
|
||||
# Use legacy backend to import local packages in setup.py
|
||||
build-backend = "setuptools.build_meta:__legacy__"
|
||||
|
|
|
|||
|
|
@ -2,21 +2,32 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import multiprocessing
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import sysconfig
|
||||
from distutils.version import LooseVersion
|
||||
from pathlib import Path
|
||||
from subprocess import CalledProcessError, check_call, check_output
|
||||
from typing import Any, cast
|
||||
from subprocess import CalledProcessError, check_call, check_output, DEVNULL
|
||||
from typing import cast
|
||||
|
||||
from . import which
|
||||
from .cmake_utils import CMakeValue, get_cmake_cache_variables_from_file
|
||||
from .env import BUILD_DIR, check_negative_env_flag, IS_64BIT, IS_DARWIN, IS_WINDOWS
|
||||
|
||||
|
||||
try:
|
||||
from packaging.version import Version
|
||||
except ImportError:
|
||||
try:
|
||||
from setuptools.dist import Version # type: ignore[attr-defined,no-redef]
|
||||
except ImportError:
|
||||
from distutils.version import ( # type: ignore[assignment,no-redef]
|
||||
LooseVersion as Version,
|
||||
)
|
||||
|
||||
|
||||
def _mkdir_p(d: str) -> None:
|
||||
try:
|
||||
os.makedirs(d, exist_ok=True)
|
||||
|
|
@ -60,7 +71,7 @@ class CMake:
|
|||
cmake3_version = CMake._get_version(which("cmake3"))
|
||||
cmake_version = CMake._get_version(which("cmake"))
|
||||
|
||||
_cmake_min_version = LooseVersion("3.27.0")
|
||||
_cmake_min_version = Version("3.27.0")
|
||||
if all(
|
||||
ver is None or ver < _cmake_min_version
|
||||
for ver in [cmake_version, cmake3_version]
|
||||
|
|
@ -82,15 +93,26 @@ class CMake:
|
|||
return cmake_command
|
||||
|
||||
@staticmethod
|
||||
def _get_version(cmd: str | None) -> Any:
|
||||
"Returns cmake version."
|
||||
def _get_version(cmd: str | None) -> Version | None:
|
||||
"""Returns cmake version."""
|
||||
|
||||
if cmd is None:
|
||||
return None
|
||||
for line in check_output([cmd, "--version"]).decode("utf-8").split("\n"):
|
||||
if "version" in line:
|
||||
return LooseVersion(line.strip().split(" ")[2])
|
||||
raise RuntimeError("no version found")
|
||||
|
||||
try:
|
||||
cmake_capabilities = json.loads(
|
||||
check_output(
|
||||
[cmd, "-E", "capabilities"],
|
||||
stderr=DEVNULL,
|
||||
text=True,
|
||||
),
|
||||
)
|
||||
except (OSError, CalledProcessError, json.JSONDecodeError):
|
||||
cmake_capabilities = {}
|
||||
cmake_version = cmake_capabilities.get("version", {}).get("string")
|
||||
if cmake_version is not None:
|
||||
return Version(cmake_version)
|
||||
raise RuntimeError(f"Failed to get CMake version from command: {cmd}")
|
||||
|
||||
def run(self, args: list[str], env: dict[str, str]) -> None:
|
||||
"Executes cmake with arguments and an environment."
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user